diff --git a/src/singletons/loggingmanager.cpp b/src/singletons/loggingmanager.cpp index c03009702..c921ddc66 100644 --- a/src/singletons/loggingmanager.cpp +++ b/src/singletons/loggingmanager.cpp @@ -39,11 +39,26 @@ void LoggingManager::addMessage(const QString &channelName, messages::MessagePtr QString LoggingManager::getDirectoryForChannel(const QString &channelName) { + auto customPath = getApp()->settings->logPath; + if (channelName.startsWith("/whispers")) { + if (customPath != "") + return customPath + "/Whispers"; return this->pathManager->whispersLogsFolderPath; } else if (channelName.startsWith("/mentions")) { + if (customPath != "") + return customPath + "/Mentions"; return this->pathManager->mentionsLogsFolderPath; } else { + if (customPath != "") { + QString logPath(customPath + QDir::separator() + channelName); + + if (!this->pathManager->createFolder(logPath)) { + debug::Log("Error creating channel logs folder for channel {}", channelName); + } + + return logPath; + } QString logPath(this->pathManager->channelsLogsFolderPath + QDir::separator() + channelName); @@ -55,5 +70,12 @@ QString LoggingManager::getDirectoryForChannel(const QString &channelName) } } +void LoggingManager::refreshLoggingPath() +{ + // if (app->settings->logPath == "") { + + //} +} + } // namespace singletons } // namespace chatterino diff --git a/src/singletons/loggingmanager.hpp b/src/singletons/loggingmanager.hpp index 30681ce62..b7e2d91c3 100644 --- a/src/singletons/loggingmanager.hpp +++ b/src/singletons/loggingmanager.hpp @@ -7,7 +7,6 @@ namespace chatterino { namespace singletons { - class PathManager; class LoggingManager @@ -23,6 +22,8 @@ public: void addMessage(const QString &channelName, messages::MessagePtr message); + void refreshLoggingPath(); + private: std::map> loggingChannels; QString getDirectoryForChannel(const QString &channelName); diff --git a/src/singletons/settingsmanager.hpp b/src/singletons/settingsmanager.hpp index bdb603faa..c3f275d2d 100644 --- a/src/singletons/settingsmanager.hpp +++ b/src/singletons/settingsmanager.hpp @@ -105,6 +105,9 @@ public: /// Logging BoolSetting enableLogging = {"/logging/enabled", false}; + QStringSetting logPath = {"/logging/path", + QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)}; + QStringSetting pathHighlightSound = {"/highlighting/highlightSoundPath", "qrc:/sounds/ping2.wav"}; QStringSetting highlightUserBlacklist = {"/highlighting/blacklistedUsers", ""}; diff --git a/src/widgets/settingspages/moderationpage.cpp b/src/widgets/settingspages/moderationpage.cpp index 5e46e4e38..2c428ade7 100644 --- a/src/widgets/settingspages/moderationpage.cpp +++ b/src/widgets/settingspages/moderationpage.cpp @@ -3,6 +3,7 @@ #include "application.hpp" #include "controllers/taggedusers/taggeduserscontroller.hpp" #include "controllers/taggedusers/taggedusersmodel.hpp" +#include "singletons/loggingmanager.hpp" #include "singletons/pathmanager.hpp" #include "util/layoutcreator.hpp" #include "widgets/helper/editablemodelview.hpp" @@ -42,10 +43,15 @@ ModerationPage::ModerationPage() auto logs = tabs.appendTab(new QVBoxLayout, "Logs"); { - auto logPath = app->paths->logsFolderPath; + // Logs (copied from LoggingMananger) auto created = logs.emplace(); - created->setText("Logs are saved to " + CreateLink(logPath, true)); + if (app->settings->logPath == "") { + created->setText("Logs are saved to " + + CreateLink(QCoreApplication::applicationDirPath(), true)); + } else { + created->setText("Logs are saved to " + CreateLink(app->settings->logPath, true)); + } created->setTextFormat(Qt::RichText); created->setTextInteractionFlags(Qt::TextBrowserInteraction | Qt::LinksAccessibleByKeyboard | @@ -54,6 +60,43 @@ ModerationPage::ModerationPage() logs.append(this->createCheckBox("Enable logging", app->settings->enableLogging)); logs->addStretch(1); + + auto selectDir = logs.emplace("Set custom logpath"); + + // Setting custom logpath + QObject::connect( + selectDir.getElement(), &QPushButton::clicked, this, + [this, created, app, dirMemory = QString{app->settings->logPath}]() mutable { + auto dirName = QFileDialog::getExistingDirectory(this); + created->setText("Logs are saved to " + CreateLink(dirName, true)); + + if (dirName == "" && dirMemory == "") { + created->setText("Logs are saved to " + + CreateLink(QStandardPaths::writableLocation( + QStandardPaths::AppDataLocation), + true)); + } else if (dirName == "") { + dirName = dirMemory; + created->setText("Logs are saved to " + CreateLink(dirName, true)); + } + + app->settings->logPath = dirName; + dirMemory = dirName; + app->logging->refreshLoggingPath(); + }); + // Reset custom logpath + auto resetDir = logs.emplace("Reset logpath"); + QObject::connect( + resetDir.getElement(), &QPushButton::clicked, this, [this, created, app]() mutable { + app->settings->logPath = ""; + created->setText( + "Logs are saved to " + + CreateLink(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation), + true)); + app->logging->refreshLoggingPath(); + }); + + // Logs end } auto modMode = tabs.appendTab(new QVBoxLayout, "Moderation mode");