Take logging categories into use

Logging can be enabled in release build like this:

QT_LOGGING_RULES="fernschreiber.*=true" harbour-fernschreiber

See https://doc.qt.io/qt-5/qloggingcategory.html for more details.
This commit is contained in:
Slava Monich 2020-11-22 05:58:47 +02:00
parent 0d600803ad
commit 162e1ca996
19 changed files with 123 additions and 72 deletions

View file

@ -145,6 +145,7 @@ HEADERS += \
src/chatmodel.h \ src/chatmodel.h \
src/dbusadaptor.h \ src/dbusadaptor.h \
src/dbusinterface.h \ src/dbusinterface.h \
src/debuglog.h \
src/emojisearchworker.h \ src/emojisearchworker.h \
src/fernschreiberutils.h \ src/fernschreiberutils.h \
src/notificationmanager.h \ src/notificationmanager.h \

View file

@ -16,9 +16,9 @@
*/ */
#include "appsettings.h" #include "appsettings.h"
#include <QDebug>
#define LOG(x) qDebug() << "[AppSettings]" << x #define DEBUG_MODULE AppSettings
#include "debuglog.h"
namespace { namespace {
const QString KEY_SEND_BY_ENTER("sendByEnter"); const QString KEY_SEND_BY_ENTER("sendByEnter");

View file

@ -19,9 +19,9 @@
#include "chatlistmodel.h" #include "chatlistmodel.h"
#include "fernschreiberutils.h" #include "fernschreiberutils.h"
#include <QDebug>
#define LOG(x) qDebug() << "[ChatListModel]" << x #define DEBUG_MODULE ChatListModel
#include "debuglog.h"
namespace { namespace {
const QString ID("id"); const QString ID("id");

View file

@ -22,9 +22,9 @@
#include <QListIterator> #include <QListIterator>
#include <QByteArray> #include <QByteArray>
#include <QBitArray> #include <QBitArray>
#include <QDebug>
#define LOG(x) qDebug() << "[ChatModel]" << x #define DEBUG_MODULE ChatModel
#include "debuglog.h"
namespace { namespace {
const QString ID("id"); const QString ID("id");

View file

@ -19,22 +19,22 @@
#include "dbusadaptor.h" #include "dbusadaptor.h"
#include <QDebug> #define DEBUG_MODULE DBusAdaptor
#include "debuglog.h"
DBusAdaptor::DBusAdaptor(QObject *parent): QDBusAbstractAdaptor(parent) DBusAdaptor::DBusAdaptor(QObject *parent): QDBusAbstractAdaptor(parent)
{ {
} }
void DBusAdaptor::openMessage(const QString &chatId, const QString &messageId) void DBusAdaptor::openMessage(const QString &chatId, const QString &messageId)
{ {
qDebug() << "[DBusAdaptor] Open Message " << chatId << messageId; LOG("Open Message" << chatId << messageId);
emit pleaseOpenMessage(chatId, messageId); emit pleaseOpenMessage(chatId, messageId);
} }
void DBusAdaptor::openUrl(const QStringList &arguments) void DBusAdaptor::openUrl(const QStringList &arguments)
{ {
qDebug() << "[DBusAdaptor] Open Url" << arguments; LOG("Open Url" << arguments);
if (arguments.length() >= 1) { if (arguments.length() >= 1) {
emit pleaseOpenUrl(arguments.first()); emit pleaseOpenUrl(arguments.first());
} }

View file

@ -19,27 +19,29 @@
#include "dbusinterface.h" #include "dbusinterface.h"
#define DEBUG_MODULE DBusInterface
#include "debuglog.h"
DBusInterface::DBusInterface(QObject *parent) : QObject(parent) DBusInterface::DBusInterface(QObject *parent) : QObject(parent)
{ {
qDebug() << "[DBusInterface] Initializing D-BUS connectivity"; LOG("Initializing D-BUS connectivity");
this->dbusAdaptor = new DBusAdaptor(this); this->dbusAdaptor = new DBusAdaptor(this);
QDBusConnection sessionBusConnection = QDBusConnection::sessionBus(); QDBusConnection sessionBusConnection = QDBusConnection::sessionBus();
if (!sessionBusConnection.isConnected()) { if (!sessionBusConnection.isConnected()) {
qDebug() << "[DBusInterface] Error connecting to D-BUS"; WARN("Error connecting to D-BUS");
return; return;
} }
if (!sessionBusConnection.registerObject(PATH_NAME, this)) { if (!sessionBusConnection.registerObject(PATH_NAME, this)) {
qDebug() << "[DBusInterface] Error registering root object to D-BUS" << sessionBusConnection.lastError().message(); WARN("Error registering root object to D-BUS" << sessionBusConnection.lastError().message());
return; return;
} }
if (!sessionBusConnection.registerService(INTERFACE_NAME)) { if (!sessionBusConnection.registerService(INTERFACE_NAME)) {
qDebug() << "[DBusInterface] Error registering interface to D-BUS" << sessionBusConnection.lastError().message(); WARN("Error registering interface to D-BUS" << sessionBusConnection.lastError().message());
return; return;
} }
} }
DBusAdaptor *DBusInterface::getDBusAdaptor() DBusAdaptor *DBusInterface::getDBusAdaptor()

45
src/debuglog.h Normal file
View file

@ -0,0 +1,45 @@
/*
Copyright (C) 2020 Slava Monich et al.
This file is part of Fernschreiber.
Fernschreiber is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Fernschreiber 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 Fernschreiber. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef FERNSCHREIBER_DEBUG_LOG_H
#define FERNSCHREIBER_DEBUG_LOG_H
#include <QLoggingCategory>
#ifndef DEBUG_MODULE
# define DEBUG_MODULE Debug
#endif
#define LOG_CATEGORY__(x) x##Log
#define LOG_CATEGORY_(x) LOG_CATEGORY__(x)
#define LOG_CATEGORY LOG_CATEGORY_(DEBUG_MODULE)
static const QLoggingCategory LOG_CATEGORY("fernschreiber." QT_STRINGIFY(DEBUG_MODULE));
#define LOG(x) qCDebug(LOG_CATEGORY) << "[" QT_STRINGIFY(DEBUG_MODULE) "]" << x
#define WARN(x) qCWarning(LOG_CATEGORY) << "[" QT_STRINGIFY(DEBUG_MODULE) "]" << x
// No VERBOSE in release build
#ifndef VERBOSE
# if defined (QT_DEBUG) || defined (DEBUG)
# define VERBOSE(x) LOG(x)
# else
# define VERBOSE(x)
# endif
#endif
#endif // FERNSCHREIBER_DEBUG_LOG_H

View file

@ -18,7 +18,8 @@
*/ */
#include "emojisearchworker.h" #include "emojisearchworker.h"
#define LOG(x) qDebug() << "[EmojiSearchWorker]" << x #define DEBUG_MODULE EmojiSearchWorker
#include "debuglog.h"
EmojiSearchWorker::~EmojiSearchWorker() EmojiSearchWorker::~EmojiSearchWorker()
{ {

View file

@ -24,7 +24,6 @@
#include <QSqlQuery> #include <QSqlQuery>
#include <QSqlError> #include <QSqlError>
#include <QVariantList> #include <QVariantList>
#include <QDebug>
class EmojiSearchWorker : public QThread class EmojiSearchWorker : public QThread
{ {

View file

@ -28,6 +28,7 @@
#include <QQmlContext> #include <QQmlContext>
#include <QQmlEngine> #include <QQmlEngine>
#include <QGuiApplication> #include <QGuiApplication>
#include <QLoggingCategory>
#include "appsettings.h" #include "appsettings.h"
#include "tdlibfile.h" #include "tdlibfile.h"
@ -41,10 +42,20 @@
#include "tgsplugin.h" #include "tgsplugin.h"
#include "fernschreiberutils.h" #include "fernschreiberutils.h"
// The default filter can be overridden by QT_LOGGING_RULES envinronment variable, e.g.
// QT_LOGGING_RULES="fernschreiber.*=true" harbour-fernschreiber
#if defined (QT_DEBUG) || defined(DEBUG)
# define DEFAULT_LOG_FILTER "fernschreiber.*=true"
#else
# define DEFAULT_LOG_FILTER "fernschreiber.*=false"
#endif
Q_IMPORT_PLUGIN(TgsIOPlugin) Q_IMPORT_PLUGIN(TgsIOPlugin)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QLoggingCategory::setFilterRules(DEFAULT_LOG_FILTER);
QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv)); QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
QScopedPointer<QQuickView> view(SailfishApp::createView()); QScopedPointer<QQuickView> view(SailfishApp::createView());

View file

@ -21,14 +21,14 @@
#include "fernschreiberutils.h" #include "fernschreiberutils.h"
#include "chatmodel.h" #include "chatmodel.h"
#include <sailfishapp.h> #include <sailfishapp.h>
#include <QDebug>
#include <QListIterator> #include <QListIterator>
#include <QUrl> #include <QUrl>
#include <QDateTime> #include <QDateTime>
#include <QDBusConnection> #include <QDBusConnection>
#include <QGuiApplication> #include <QGuiApplication>
#define LOG(x) qDebug() << "[NotificationManager]" << x #define DEBUG_MODULE NotificationManager
#include "debuglog.h"
namespace { namespace {
const QString _TYPE("@type"); const QString _TYPE("@type");

View file

@ -1,18 +1,23 @@
#include "processlauncher.h" #include "processlauncher.h"
#include <QProcess>
#include <QStandardPaths>
#define LOG(x) qDebug() << "[ProcessLauncher]" << x #define DEBUG_MODULE ProcessLauncher
#include "debuglog.h"
ProcessLauncher::ProcessLauncher(QObject *parent) : QObject(parent) ProcessLauncher::ProcessLauncher(QObject *parent) : QObject(parent)
{ {
} }
bool ProcessLauncher::launchProgram(const QString &program, const QStringList &arguments) bool ProcessLauncher::launchProgram(const QString &program, const QStringList &arguments)
{ {
QString executablePath = QStandardPaths::findExecutable(program); const QString executablePath(QStandardPaths::findExecutable(program));
if(executablePath == "") { if (executablePath.isEmpty()) {
LOG("[ProcessLauncher] Program " + program + "not found"); LOG("Program" << program << "not found");
return false; return false;
} }
QProcess *externalProcess = new QProcess(this);
return externalProcess->startDetached(program, arguments); QProcess *process = new QProcess(this);
connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater()));
return process->startDetached(program, arguments);
} }

View file

@ -2,9 +2,6 @@
#define PROCESSLAUNCHER_H #define PROCESSLAUNCHER_H
#include <QObject> #include <QObject>
#include <QProcess>
#include <QStandardPaths>
#include <QDebug>
class ProcessLauncher : public QObject class ProcessLauncher : public QObject
{ {

View file

@ -18,10 +18,10 @@
*/ */
#include "stickermanager.h" #include "stickermanager.h"
#include <QDebug>
#include <QListIterator> #include <QListIterator>
#define LOG(x) qDebug() << "[StickerManager]" << x #define DEBUG_MODULE StickerManager
#include "debuglog.h"
StickerManager::StickerManager(TDLibWrapper *tdLibWrapper, QObject *parent) : QObject(parent) StickerManager::StickerManager(TDLibWrapper *tdLibWrapper, QObject *parent) : QObject(parent)
{ {

View file

@ -18,9 +18,9 @@
*/ */
#include "tdlibfile.h" #include "tdlibfile.h"
#include <QDebug>
#define LOG(x) qDebug() << "[TDLibFile]" << x #define DEBUG_MODULE TDLibFile
#include "debuglog.h"
namespace { namespace {
const QString ID("id"); const QString ID("id");

View file

@ -18,13 +18,8 @@
*/ */
#include "tdlibreceiver.h" #include "tdlibreceiver.h"
#define LOG(x) qDebug() << "[TDLibReceiver]" << x #define DEBUG_MODULE TDLibReceiver
#include "debuglog.h"
#if defined (QT_DEBUG) || defined (DEBUG)
# define VERBOSE(x) LOG(x)
#else
# define VERBOSE(x)
#endif
namespace { namespace {
const QString ID("id"); const QString ID("id");

View file

@ -19,7 +19,8 @@
#ifndef TDLIBRECEIVER_H #ifndef TDLIBRECEIVER_H
#define TDLIBRECEIVER_H #define TDLIBRECEIVER_H
#include <QDebug> #include <QHash>
#include <QVariantMap>
#include <QThread> #include <QThread>
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonObject> #include <QJsonObject>

View file

@ -25,19 +25,13 @@
#include <QLocale> #include <QLocale>
#include <QProcess> #include <QProcess>
#include <QSysInfo> #include <QSysInfo>
#include <QDebug>
#include <QJsonDocument> #include <QJsonDocument>
#include <QStandardPaths> #include <QStandardPaths>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusInterface> #include <QDBusInterface>
#define LOG(x) qDebug() << "[TDLibWrapper]" << x #define DEBUG_MODULE TDLibWrapper
#include "debuglog.h"
#if defined (QT_DEBUG) || defined (DEBUG)
# define VERBOSE(x) LOG(x)
#else
# define VERBOSE(x)
#endif
namespace { namespace {
const QString STATUS("status"); const QString STATUS("status");
@ -199,7 +193,7 @@ void TDLibWrapper::setAuthenticationPassword(const QString &authenticationPasswo
void TDLibWrapper::registerUser(const QString &firstName, const QString &lastName) void TDLibWrapper::registerUser(const QString &firstName, const QString &lastName)
{ {
qDebug() << "[TDLibWrapper] Register User " << firstName << lastName; LOG("Register User " << firstName << lastName);
QVariantMap requestObject; QVariantMap requestObject;
requestObject.insert("@type", "registerUser"); requestObject.insert("@type", "registerUser");
requestObject.insert("first_name", firstName); requestObject.insert("first_name", firstName);
@ -890,9 +884,9 @@ void TDLibWrapper::openFileOnDevice(const QString &filePath)
argumentsList.append(filePath); argumentsList.append(filePath);
bool successfullyStarted = QProcess::startDetached("xdg-open", argumentsList); bool successfullyStarted = QProcess::startDetached("xdg-open", argumentsList);
if (successfullyStarted) { if (successfullyStarted) {
qDebug() << "Successfully opened file " << filePath; LOG("Successfully opened file " << filePath);
} else { } else {
qDebug() << "Error opening file " << filePath; LOG("Error opening file " << filePath);
} }
} }
@ -903,10 +897,10 @@ void TDLibWrapper::controlScreenSaver(bool enabled)
QDBusInterface dbusInterface("com.nokia.mce", "/com/nokia/mce/request", "com.nokia.mce.request", dbusConnection); QDBusInterface dbusInterface("com.nokia.mce", "/com/nokia/mce/request", "com.nokia.mce.request", dbusConnection);
if (enabled) { if (enabled) {
qDebug() << "Enabling screensaver"; LOG("Enabling screensaver");
dbusInterface.call("req_display_cancel_blanking_pause"); dbusInterface.call("req_display_cancel_blanking_pause");
} else { } else {
qDebug() << "Disabling screensaver"; LOG("Disabling screensaver");
dbusInterface.call("req_display_blanking_pause"); dbusInterface.call("req_display_blanking_pause");
} }
} }
@ -1178,21 +1172,21 @@ void TDLibWrapper::setLogVerbosityLevel()
void TDLibWrapper::initializeOpenWith() void TDLibWrapper::initializeOpenWith()
{ {
LOG("Initialize open-with"); LOG("Initialize open-with");
LOG("Checking standard open URL file...");
qDebug() << "Checking standard open URL file..."; const QString applicationsLocation(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation));
QString openUrlFilePath = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation) + "/open-url.desktop"; const QString openUrlFilePath(applicationsLocation + "/open-url.desktop");
if (QFile::exists(openUrlFilePath)) { if (QFile::exists(openUrlFilePath)) {
qDebug() << "Standard open URL file exists, good!"; LOG("Standard open URL file exists, good!");
} else { } else {
qDebug() << "Copying standard open URL file to " << openUrlFilePath; LOG("Copying standard open URL file to " << openUrlFilePath);
QFile::copy("/usr/share/applications/open-url.desktop", openUrlFilePath); QFile::copy("/usr/share/applications/open-url.desktop", openUrlFilePath);
QProcess::startDetached("update-desktop-database " + QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)); QProcess::startDetached("update-desktop-database " + applicationsLocation);
} }
QString desktopFilePath = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation) + "/harbour-fernschreiber-open-url.desktop"; const QString desktopFilePath(applicationsLocation + "/harbour-fernschreiber-open-url.desktop");
QFile desktopFile(desktopFilePath); QFile desktopFile(desktopFilePath);
if (!desktopFile.exists()) { if (!desktopFile.exists()) {
qDebug() << "Creating Open-With file at " << desktopFile.fileName(); LOG("Creating Open-With file at " << desktopFile.fileName());
if (desktopFile.open(QIODevice::WriteOnly | QIODevice::Text)) { if (desktopFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream fileOut(&desktopFile); QTextStream fileOut(&desktopFile);
fileOut.setCodec("UTF-8"); fileOut.setCodec("UTF-8");
@ -1208,7 +1202,7 @@ void TDLibWrapper::initializeOpenWith()
fileOut << QString("Hidden=true;").toUtf8() << "\n"; fileOut << QString("Hidden=true;").toUtf8() << "\n";
fileOut.flush(); fileOut.flush();
desktopFile.close(); desktopFile.close();
QProcess::startDetached("update-desktop-database " + QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)); QProcess::startDetached("update-desktop-database " + applicationsLocation);
} }
} }

View file

@ -18,7 +18,6 @@
#include "tgsplugin.h" #include "tgsplugin.h"
#include "rlottie.h" #include "rlottie.h"
#include <QDebug>
#include <QSize> #include <QSize>
#include <QImage> #include <QImage>
#include <QImageIOHandler> #include <QImageIOHandler>
@ -27,8 +26,9 @@
#include <zlib.h> #include <zlib.h>
#define LOG(x) qDebug() << "[TgsIOHandler]" << qPrintable(fileName) << x #define DEBUG_MODULE TgsIOHandler
#define WARN(x) qWarning() << "[TgsIOHandler]" << qPrintable(fileName) << x #include "debuglog.h"
#define LOG_(x) LOG(qPrintable(fileName) << x)
class TgsIOHandler : public QImageIOHandler class TgsIOHandler : public QImageIOHandler
{ {
@ -93,7 +93,7 @@ TgsIOHandler::~TgsIOHandler()
if (currentRender.valid()) { if (currentRender.valid()) {
currentRender.get(); currentRender.get();
} }
LOG("Done"); LOG_("Done");
} }
TgsIOHandler::ByteArray TgsIOHandler::uncompress() TgsIOHandler::ByteArray TgsIOHandler::uncompress()
@ -112,7 +112,7 @@ TgsIOHandler::ByteArray TgsIOHandler::uncompress()
unzip.next_out = (Bytef*)unzipped.data(); unzip.next_out = (Bytef*)unzipped.data();
unzip.avail_in = zipped.size(); unzip.avail_in = zipped.size();
unzip.avail_out = chunk; unzip.avail_out = chunk;
LOG("Compressed size" << zipped.size()); LOG_("Compressed size" << zipped.size());
while (unzip.avail_out > 0 && zerr == Z_OK) { while (unzip.avail_out > 0 && zerr == Z_OK) {
zerr = inflate(&unzip, Z_NO_FLUSH); zerr = inflate(&unzip, Z_NO_FLUSH);
if (zerr == Z_OK && unzip.avail_out < chunk) { if (zerr == Z_OK && unzip.avail_out < chunk) {
@ -124,7 +124,7 @@ TgsIOHandler::ByteArray TgsIOHandler::uncompress()
} }
if (zerr == Z_STREAM_END) { if (zerr == Z_STREAM_END) {
unzipped.resize(unzip.next_out - (Bytef*)unzipped.data()); unzipped.resize(unzip.next_out - (Bytef*)unzipped.data());
LOG("Uncompressed size" << unzipped.size()); LOG_("Uncompressed size" << unzipped.size());
} else { } else {
unzipped.clear(); unzipped.clear();
} }
@ -146,7 +146,7 @@ bool TgsIOHandler::load()
frameRate = animation->frameRate(); frameRate = animation->frameRate();
frameCount = (int) animation->totalFrame(); frameCount = (int) animation->totalFrame();
size = QSize(width, height); size = QSize(width, height);
LOG(size << frameCount << "frames," << frameRate << "fps"); LOG_(size << frameCount << "frames," << frameRate << "fps");
render(0); // Pre-render first frame render(0); // Pre-render first frame
} }
} }
@ -160,7 +160,7 @@ void TgsIOHandler::finishRendering()
currentRender.get(); currentRender.get();
prevImage = currentImage; prevImage = currentImage;
if (!currentFrame && !firstImage.isNull()) { if (!currentFrame && !firstImage.isNull()) {
LOG("Rendered first frame"); LOG_("Rendered first frame");
firstImage = currentImage; firstImage = currentImage;
} }
} else { } else {
@ -192,7 +192,7 @@ bool TgsIOHandler::read(QImage* out)
if (currentFrame && currentRender.valid()) { if (currentFrame && currentRender.valid()) {
std::future_status status = currentRender.wait_for(std::chrono::milliseconds(0)); std::future_status status = currentRender.wait_for(std::chrono::milliseconds(0));
if (status != std::future_status::ready) { if (status != std::future_status::ready) {
LOG("Skipping frame" << currentFrame); LOG_("Skipping frame" << currentFrame);
currentFrame = (currentFrame + 1) % frameCount; currentFrame = (currentFrame + 1) % frameCount;
*out = prevImage; *out = prevImage;
return true; return true;