Basic logging implemented

Implemented scuffed logging settings page
Add helper function to PathManager to create an arbitrary folder
This commit is contained in:
Rasmus Karlsson
2018-01-28 14:23:55 +01:00
parent f474db9443
commit 2f0844ebd9
14 changed files with 201 additions and 151 deletions
+61
View File
@@ -0,0 +1,61 @@
#include "singletons/loggingmanager.hpp"
#include "debug/log.hpp"
#include "singletons/pathmanager.hpp"
#include "singletons/settingsmanager.hpp"
#include <QDir>
#include <QStandardPaths>
#include <unordered_map>
namespace chatterino {
namespace singletons {
LoggingManager::LoggingManager()
: pathManager(PathManager::getInstance())
{
}
LoggingManager &LoggingManager::getInstance()
{
static LoggingManager instance;
return instance;
}
void LoggingManager::addMessage(const QString &channelName, messages::MessagePtr message)
{
const auto &settings = singletons::SettingManager::getInstance();
if (!settings.enableLogging) {
return;
}
auto it = this->loggingChannels.find(channelName);
if (it == this->loggingChannels.end()) {
auto channel = new LoggingChannel(channelName, this->getDirectoryForChannel(channelName));
channel->addMessage(message);
this->loggingChannels.emplace(channelName, std::move(channel));
} else {
it->second->addMessage(message);
}
}
QString LoggingManager::getDirectoryForChannel(const QString &channelName)
{
if (channelName.startsWith("/whispers")) {
return this->pathManager.whispersLogsFolderPath;
} else if (channelName.startsWith("/mentions")) {
return this->pathManager.mentionsLogsFolderPath;
} else {
QString logPath(this->pathManager.channelsLogsFolderPath + QDir::separator() + channelName);
if (!this->pathManager.createFolder(logPath)) {
debug::Log("Error creating channel logs folder for channel {}", channelName);
}
return logPath;
}
}
} // namespace singletons
} // namespace chatterino