mirror of
https://github.com/deskflow/deskflow.git
synced 2026-07-04 21:04:59 +08:00
Some checks failed
CodeQL Analysis / Analyze (cpp) (push) Has been cancelled
Continuous Integration / reuse-lint (push) Has been cancelled
Continuous Integration / pr-comment-flags (push) Has been cancelled
Continuous Integration / ci-passed (push) Has been cancelled
Continuous Integration / test-results (push) Has been cancelled
Continuous Integration / lint-check (push) Has been cancelled
Continuous Integration / analyse-valgrind (push) Has been cancelled
Continuous Integration / analyse-sonarcloud (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[arch:arm64 config-args:-DCMAKE_OSX_ARCHITECTURES="arm64" name:macos-14-arm64 qt-install-dir:/Users/runner runs-on:macos-14 timeout:10]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-DCMAKE_OSX_ARCHITECTURES="x86_64" -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk name:macos-13-x64 qt-install-dir:/Users/runner runs-on… (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:archlinux:latest like:arch name:archlinux-x86_84 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:debian:trixie-slim like:debian name:debian-13-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:debian:trixie-slim like:debian name:debian-13-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:40 like:fedora name:fedora-40-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:40 like:fedora name:fedora-40-x86_84 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:41 like:fedora name:fedora-41-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:fedora:41 like:fedora name:fedora-41-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:opensuse/tumbleweed:latest like:suse name:opensuse-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:opensuse/tumbleweed:latest like:suse name:opensuse-x86_84 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:ubuntu:25.04 like:debian name:ubuntu-25.04-arm64 runs-on:ubuntu-24.04-arm timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja -DCMAKE_INSTALL_PREFIX=/usr container:ubuntu:25.04 like:debian name:ubuntu-25.04-x86_64 runs-on:ubuntu-latest timeout:20]) (push) Has been cancelled
Continuous Integration / ${{ matrix.target.name }} (map[config-args:-G Ninja name:windows-2022-x64 qt-install-dir:C: runs-on:windows-2022 timeout:30]) (push) Has been cancelled
Continuous Integration / unix-${{ matrix.distro.name }} (map[name:freebsd]) (push) Has been cancelled
Continuous Integration / flatpak-${{matrix.flatpak.arch}} (map[arch:aarch64 runs-on:ubuntu-24.04-arm]) (push) Has been cancelled
Continuous Integration / flatpak-${{matrix.flatpak.arch}} (map[arch:x86_64 runs-on:ubuntu-latest]) (push) Has been cancelled
Continuous Integration / release (push) Has been cancelled
Continuous Integration / winget-publish (push) Has been cancelled
Only use `Qt::endl` when writing to the output stream; `Q_EMIT newLine` should not include a trailing newline because `appendPlainText` doesn't expect one.
111 lines
2.8 KiB
C++
111 lines
2.8 KiB
C++
/*
|
|
* Deskflow -- mouse and keyboard sharing utility
|
|
* SPDX-FileCopyrightText: (C) 2024 Symless Ltd.
|
|
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
|
|
*/
|
|
|
|
#include "Logger.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{
|
|
"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, type, message);
|
|
|
|
QTextStream stream(&logLine);
|
|
if (!fileLine.isEmpty()) {
|
|
stream << "\n\t" + fileLine;
|
|
}
|
|
|
|
// We must return a non-terminated log line, but before returning,
|
|
// stdout/stderr and Windows debug output all expect a terminated line.
|
|
QString terminatedLogLine = logLine;
|
|
QTextStream terminatedStream(&terminatedLogLine);
|
|
terminatedStream << Qt::endl;
|
|
|
|
#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(terminatedLogLine.toLocal8Bit().constData());
|
|
#else
|
|
QTextStream outStream(out);
|
|
outStream << terminatedLogLine;
|
|
#endif
|
|
|
|
return logLine;
|
|
}
|
|
|
|
void Logger::loadEnvVars()
|
|
{
|
|
m_debug = QVariant(qEnvironmentVariable("DESKFLOW_GUI_DEBUG")).toBool();
|
|
m_verbose = QVariant(qEnvironmentVariable("DESKFLOW_GUI_VERBOSE")).toBool();
|
|
}
|
|
|
|
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);
|
|
Q_EMIT newLine(logLine);
|
|
}
|
|
|
|
} // namespace deskflow::gui
|