mirror-chatterino2/src/singletons/settingsmanager.hpp

148 lines
5.9 KiB
C++
Raw Normal View History

#pragma once
2017-01-05 20:49:13 +01:00
#include "messages/highlightphrase.hpp"
#include "messages/messageelement.hpp"
2017-12-31 00:50:07 +01:00
#include "singletons/helper/chatterinosetting.hpp"
2018-01-17 14:14:31 +01:00
#include "singletons/helper/moderationaction.hpp"
2017-01-20 06:10:28 +01:00
#include <pajlada/settings/setting.hpp>
#include <pajlada/settings/settinglistener.hpp>
2017-01-05 20:49:13 +01:00
2017-01-18 21:30:23 +01:00
namespace chatterino {
2017-12-31 22:58:35 +01:00
namespace singletons {
2017-01-18 21:30:23 +01:00
static void _registerSetting(std::weak_ptr<pajlada::Settings::ISettingData> setting);
2017-12-31 22:58:35 +01:00
class SettingManager : public QObject
2017-01-05 20:49:13 +01:00
{
2017-01-22 12:46:35 +01:00
Q_OBJECT
using BoolSetting = ChatterinoSetting<bool>;
using FloatSetting = ChatterinoSetting<float>;
using IntSetting = ChatterinoSetting<int>;
using StringSetting = ChatterinoSetting<std::string>;
using QStringSetting = ChatterinoSetting<QString>;
2017-01-20 06:10:28 +01:00
public:
messages::MessageElement::Flags getWordFlags();
2017-05-27 16:16:39 +02:00
bool isIgnoredEmote(const QString &emote);
void initialize();
/// Appearance
BoolSetting showTimestamps = {"/appearance/messages/showTimestamps", true};
QStringSetting timestampFormat = {"/appearance/messages/timestampFormat", "h:mm"};
BoolSetting showBadges = {"/appearance/messages/showBadges", true};
BoolSetting showLastMessageIndicator = {"/appearance/messages/showLastMessageIndicator", false};
BoolSetting hideEmptyInput = {"/appearance/hideEmptyInputBox", false};
BoolSetting showMessageLength = {"/appearance/messages/showMessageLength", false};
BoolSetting seperateMessages = {"/appearance/messages/separateMessages", false};
BoolSetting windowTopMost = {"/appearance/windowAlwaysOnTop", false};
BoolSetting hideTabX = {"/appearance/hideTabX", false};
BoolSetting hidePreferencesButton = {"/appearance/hidePreferencesButton", false};
BoolSetting hideUserButton = {"/appearance/hideUserButton", false};
BoolSetting enableSmoothScrolling = {"/appearance/smoothScrolling", true};
BoolSetting enableSmoothScrollingNewMessages = {"/appearance/smoothScrollingNewMessages",
false};
// BoolSetting useCustomWindowFrame = {"/appearance/useCustomWindowFrame", false};
/// Behaviour
2017-12-17 13:48:02 +01:00
BoolSetting allowDuplicateMessages = {"/behaviour/allowDuplicateMessages", true};
BoolSetting mentionUsersWithAt = {"/behaviour/mentionUsersWithAt", false};
FloatSetting mouseScrollMultiplier = {"/behaviour/mouseScrollMultiplier", 1.0};
// Auto-completion
BoolSetting onlyFetchChattersForSmallerStreamers = {
"/behaviour/autocompletion/onlyFetchChattersForSmallerStreamers", true};
IntSetting smallStreamerLimit = {"/behaviour/autocompletion/smallStreamerLimit", 1000};
// Streamlink
2018-01-12 23:09:05 +01:00
QStringSetting streamlinkPath = {"/behaviour/streamlink/path", ""};
QStringSetting preferredQuality = {"/behaviour/streamlink/quality", "Choose"};
QStringSetting streamlinkOpts = {"/behaviour/streamlink/options", ""};
BoolSetting pauseChatHover = {"/behaviour/pauseChatHover", false};
/// Commands
BoolSetting allowCommandsAtEnd = {"/commands/allowCommandsAtEnd", false};
/// Emotes
BoolSetting scaleEmotesByLineHeight = {"/emotes/scaleEmotesByLineHeight", false};
BoolSetting enableTwitchEmotes = {"/emotes/enableTwitchEmotes", true};
BoolSetting enableBttvEmotes = {"/emotes/enableBTTVEmotes", true};
BoolSetting enableFfzEmotes = {"/emotes/enableFFZEmotes", true};
BoolSetting enableEmojis = {"/emotes/enableEmojis", true};
BoolSetting enableGifAnimations = {"/emotes/enableGifAnimations", true};
FloatSetting emoteScale = {"/emotes/scale", 1.f};
// 0 = Smallest size
// 1 = One size above 0 (usually size of 0 * 2)
// 2 = One size above 1 (usually size of 1 * 2)
// etc...
IntSetting preferredEmoteQuality = {"/emotes/preferredEmoteQuality", 0};
/// Links
BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false};
2018-01-23 21:33:49 +01:00
/// Ingored Users
BoolSetting enableTwitchIgnoredUsers = {"/ignore/enableTwitchIgnoredUsers", true};
QStringSetting ignoredKeywords = {"/ignore/ignoredKeywords", ""};
2018-01-13 03:06:10 +01:00
/// Moderation
QStringSetting moderationActions = {"/moderation/actions", "/ban {user}\n/timeout {user} 300"};
2018-03-24 16:55:28 +01:00
QStringSetting timeoutAction = {"/moderation/timeoutAction", "Disable"};
2018-01-13 03:06:10 +01:00
/// Highlighting
BoolSetting enableHighlights = {"/highlighting/enabled", true};
BoolSetting enableHighlightsSelf = {"/highlighting/nameIsHighlightKeyword", true};
BoolSetting enableHighlightSound = {"/highlighting/enableSound", true};
BoolSetting enableHighlightTaskbar = {"/highlighting/enableTaskbarFlashing", true};
BoolSetting customHighlightSound = {"/highlighting/useCustomSound", false};
/// Logging
BoolSetting enableLogging = {"/logging/enabled", false};
ChatterinoSetting<std::vector<messages::HighlightPhrase>> highlightProperties = {
"/highlighting/highlights"};
QStringSetting pathHighlightSound = {"/highlighting/highlightSoundPath",
"qrc:/sounds/ping2.wav"};
QStringSetting highlightUserBlacklist = {"/highlighting/blacklistedUsers", ""};
BoolSetting highlightAlwaysPlaySound = {"/highlighting/alwaysPlaySound", false};
BoolSetting inlineWhispers = {"/whispers/enableInlineWhispers", true};
2017-04-12 17:46:44 +02:00
2017-12-31 22:58:35 +01:00
static SettingManager &getInstance()
2017-04-12 17:46:44 +02:00
{
2017-12-31 22:58:35 +01:00
static SettingManager instance;
2017-04-12 17:46:44 +02:00
return instance;
}
2017-09-21 12:15:01 +02:00
void updateWordTypeMask();
void saveSnapshot();
void recallSnapshot();
2018-01-17 14:14:31 +01:00
std::vector<ModerationAction> getModerationActions() const;
2018-01-23 21:33:49 +01:00
const std::shared_ptr<std::vector<QString>> getIgnoredKeywords() const;
2018-01-17 14:14:31 +01:00
2017-09-21 12:15:01 +02:00
signals:
void wordFlagsChanged();
2017-09-21 12:15:01 +02:00
private:
2018-01-17 14:14:31 +01:00
std::vector<ModerationAction> _moderationActions;
std::unique_ptr<rapidjson::Document> snapshot;
2018-01-23 21:33:49 +01:00
std::shared_ptr<std::vector<QString>> _ignoredKeywords;
2017-12-31 22:58:35 +01:00
SettingManager();
2017-09-21 12:15:01 +02:00
2018-01-17 14:14:31 +01:00
void updateModerationActions();
2018-01-23 21:33:49 +01:00
void updateIgnoredKeywords();
2018-01-17 14:14:31 +01:00
messages::MessageElement::Flags wordFlags = messages::MessageElement::Default;
pajlada::Settings::SettingListener wordFlagsListener;
2017-01-05 20:49:13 +01:00
};
} // namespace singletons
2017-04-14 17:52:22 +02:00
} // namespace chatterino