mirror of
https://github.com/deskflow/deskflow.git
synced 2026-07-04 21:04:59 +08:00
* Use Deskflow Name * Remove business-oriented options from issue templates * Remove business-oriented workflow * Bump version to 3.0.0 (to avoid confusion with previously used version numbers 1.x & 2.x) * Update readme to reflect new project name and goals * Found some more "synergy" to rename * Rename `synlib` to `app` * Rename `syntool` to `deskflow-legacy` * Rename `synwinhk` to `dfwhook` * Rename dirs from synergy to deskflow * Rename more "Synergy" files * Rename app bundle ID * Fixed copyright typo * Rename only title in serial key dialog (to be moved downstream later) * Preserve original serial key window for moving downstream * Restore dialogs ready for moving downstream * Rename `QDeskflowApplication` to `DeskflowApplication` (the Q is confusing) * Restore Volker's original project name * Fixed mimetype * Fixed weird grammar * Fixed (more) weird grammar * Broken link, restoring (but we should move all links out of source) * Broken link, restoring (but we should move all links out of source) * Add write permission to valgrind-analysis.yml * Restore AUR conflicts * Apply Clang format * Update ChangeLog * Back out version change --------- Co-authored-by: Nick Bolton <nick@symless.com>
131 lines
3.3 KiB
C++
131 lines
3.3 KiB
C++
/*
|
|
* Deskflow -- mouse and keyboard sharing utility
|
|
* Copyright (C) 2024 Symless Ltd.
|
|
*
|
|
* This package is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* found in the file LICENSE that should have accompanied this file.
|
|
*
|
|
* This package is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "Logger.h"
|
|
|
|
#include "string_utils.h"
|
|
|
|
#include <QDateTime>
|
|
#include <QDir>
|
|
#include <QMessageBox>
|
|
#include <QTime>
|
|
|
|
#if defined(Q_OS_WIN)
|
|
#include <Windows.h>
|
|
#endif
|
|
|
|
namespace deskflow::gui {
|
|
|
|
const auto kForceDebugMessages = QStringList{
|
|
"Deskflow", // TEST
|
|
"No functional TLS backend was found",
|
|
"No TLS backend is available",
|
|
"QSslSocket::connectToHostEncrypted: TLS initialization failed",
|
|
"Retrying to obtain clipboard.",
|
|
"Unable to obtain clipboard."};
|
|
|
|
Logger Logger::s_instance;
|
|
|
|
QString printLine(
|
|
FILE *out, const QString &type, const QString &message,
|
|
const QString &fileLine = "") {
|
|
|
|
auto datetime = QDateTime::currentDateTime().toString("yyyy-MM-ddTHH:mm:ss");
|
|
auto logLine = QString("[%1] %2: %3").arg(datetime).arg(type).arg(message);
|
|
|
|
QTextStream stream(&logLine);
|
|
stream << Qt::endl;
|
|
|
|
if (!fileLine.isEmpty()) {
|
|
stream << "\t" + fileLine << Qt::endl;
|
|
}
|
|
|
|
auto logLineBytes = logLine.toUtf8();
|
|
auto logLine_c = logLineBytes.constData();
|
|
|
|
#if defined(Q_OS_WIN)
|
|
// Debug output is viewable using either VS Code, Visual Studio, DebugView, or
|
|
// DbgView++ (only one can be used at once). It's important to send output to
|
|
// the debug output API, because it's difficult to view stdout and stderr from
|
|
// a Windows GUI app.
|
|
OutputDebugStringA(logLine_c);
|
|
#else
|
|
fprintf(out, "%s", logLine_c);
|
|
fflush(out);
|
|
#endif
|
|
|
|
return logLine;
|
|
}
|
|
|
|
void Logger::loadEnvVars() {
|
|
const auto debugEnvVar = qEnvironmentVariable("DESKFLOW_GUI_DEBUG");
|
|
if (!debugEnvVar.isEmpty()) {
|
|
m_debug = strToTrue(debugEnvVar);
|
|
}
|
|
|
|
const auto verboseEnvVar = qEnvironmentVariable("DESKFLOW_GUI_VERBOSE");
|
|
if (!verboseEnvVar.isEmpty()) {
|
|
m_verbose = strToTrue(verboseEnvVar);
|
|
}
|
|
}
|
|
|
|
void Logger::logVerbose(const QString &message) const {
|
|
if (m_verbose) {
|
|
printLine(stdout, "VERBOSE", message);
|
|
}
|
|
}
|
|
|
|
void Logger::handleMessage(
|
|
const QtMsgType type, const QString &fileLine, const QString &message) {
|
|
|
|
auto mutatedType = type;
|
|
if (kForceDebugMessages.contains(message)) {
|
|
mutatedType = QtDebugMsg;
|
|
}
|
|
|
|
QString typeString;
|
|
auto out = stdout;
|
|
switch (mutatedType) {
|
|
case QtDebugMsg:
|
|
typeString = "DEBUG";
|
|
if (!m_debug) {
|
|
return;
|
|
}
|
|
break;
|
|
case QtInfoMsg:
|
|
typeString = "INFO";
|
|
break;
|
|
case QtWarningMsg:
|
|
typeString = "WARNING";
|
|
out = stderr;
|
|
break;
|
|
case QtCriticalMsg:
|
|
typeString = "CRITICAL";
|
|
out = stderr;
|
|
break;
|
|
case QtFatalMsg:
|
|
typeString = "FATAL";
|
|
out = stderr;
|
|
break;
|
|
}
|
|
|
|
const auto logLine = printLine(out, typeString, message, fileLine);
|
|
emit newLine(logLine);
|
|
}
|
|
|
|
} // namespace deskflow::gui
|