2017-06-07 10:09:24 +02:00
|
|
|
#pragma once
|
2017-01-05 20:49:13 +01:00
|
|
|
|
2018-05-06 00:32:45 +02:00
|
|
|
#include "controllers/highlights/highlightphrase.hpp"
|
2018-01-11 20:16:25 +01:00
|
|
|
#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
|
|
|
|
2017-06-11 20:53:43 +02:00
|
|
|
#include <pajlada/settings/setting.hpp>
|
2017-12-19 02:31:06 +01:00
|
|
|
#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
|
|
|
|
2018-04-14 21:59:51 +02:00
|
|
|
void _actuallyRegisterSetting(std::weak_ptr<pajlada::Settings::ISettingData> setting);
|
2017-12-28 19:03:52 +01:00
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
class SettingManager
|
2017-01-05 20:49:13 +01:00
|
|
|
{
|
2017-12-28 19:03:52 +01:00
|
|
|
using BoolSetting = ChatterinoSetting<bool>;
|
|
|
|
using FloatSetting = ChatterinoSetting<float>;
|
2018-01-07 02:56:45 +01:00
|
|
|
using IntSetting = ChatterinoSetting<int>;
|
2018-01-04 02:19:35 +01:00
|
|
|
using StringSetting = ChatterinoSetting<std::string>;
|
|
|
|
using QStringSetting = ChatterinoSetting<QString>;
|
2017-12-17 01:19:56 +01:00
|
|
|
|
2018-04-28 15:20:18 +02:00
|
|
|
public:
|
2018-04-27 22:11:19 +02:00
|
|
|
SettingManager();
|
|
|
|
|
|
|
|
~SettingManager() = delete;
|
|
|
|
|
2018-01-17 17:02:34 +01:00
|
|
|
messages::MessageElement::Flags getWordFlags();
|
2017-05-27 16:16:39 +02:00
|
|
|
bool isIgnoredEmote(const QString &emote);
|
|
|
|
|
2018-04-06 23:31:34 +02:00
|
|
|
void initialize();
|
2018-04-28 15:20:18 +02:00
|
|
|
void load();
|
2018-01-04 01:52:37 +01:00
|
|
|
|
2017-12-17 01:19:56 +01:00
|
|
|
/// Appearance
|
|
|
|
BoolSetting showTimestamps = {"/appearance/messages/showTimestamps", true};
|
2018-01-11 20:16:25 +01:00
|
|
|
QStringSetting timestampFormat = {"/appearance/messages/timestampFormat", "h:mm"};
|
2017-12-17 01:19:56 +01:00
|
|
|
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};
|
2018-06-04 16:34:47 +02:00
|
|
|
// BoolSetting collapseLongMessages = {"/appearance/messages/collapseLongMessages", false};
|
|
|
|
IntSetting collpseMessagesMinLines = {"/appearance/messages/collapseMessagesMinLines", 0};
|
2018-05-06 14:38:23 +02:00
|
|
|
BoolSetting alternateMessageBackground = {"/appearance/messages/alternateMessageBackground",
|
|
|
|
false};
|
2017-12-17 01:19:56 +01:00
|
|
|
BoolSetting windowTopMost = {"/appearance/windowAlwaysOnTop", false};
|
2018-04-27 01:11:09 +02:00
|
|
|
BoolSetting showTabCloseButton = {"/appearance/showTabCloseButton", true};
|
2017-12-17 01:19:56 +01:00
|
|
|
BoolSetting hidePreferencesButton = {"/appearance/hidePreferencesButton", false};
|
|
|
|
BoolSetting hideUserButton = {"/appearance/hideUserButton", false};
|
2017-12-18 18:55:09 +01:00
|
|
|
BoolSetting enableSmoothScrolling = {"/appearance/smoothScrolling", true};
|
2018-01-05 03:23:06 +01:00
|
|
|
BoolSetting enableSmoothScrollingNewMessages = {"/appearance/smoothScrollingNewMessages",
|
|
|
|
false};
|
2017-12-17 01:19:56 +01:00
|
|
|
// BoolSetting useCustomWindowFrame = {"/appearance/useCustomWindowFrame", false};
|
|
|
|
|
|
|
|
/// Behaviour
|
2017-12-17 13:48:02 +01:00
|
|
|
BoolSetting allowDuplicateMessages = {"/behaviour/allowDuplicateMessages", true};
|
2017-12-17 01:19:56 +01:00
|
|
|
BoolSetting mentionUsersWithAt = {"/behaviour/mentionUsersWithAt", false};
|
2018-05-26 18:06:55 +02:00
|
|
|
BoolSetting showJoins = {"/behaviour/showJoins", false};
|
|
|
|
BoolSetting showParts = {"/behaviour/showParts", false};
|
2017-12-19 02:47:55 +01:00
|
|
|
FloatSetting mouseScrollMultiplier = {"/behaviour/mouseScrollMultiplier", 1.0};
|
2018-03-30 15:42:59 +02:00
|
|
|
|
|
|
|
// Auto-completion
|
|
|
|
BoolSetting onlyFetchChattersForSmallerStreamers = {
|
|
|
|
"/behaviour/autocompletion/onlyFetchChattersForSmallerStreamers", true};
|
|
|
|
IntSetting smallStreamerLimit = {"/behaviour/autocompletion/smallStreamerLimit", 1000};
|
|
|
|
|
2018-01-05 11:22:51 +01:00
|
|
|
BoolSetting pauseChatHover = {"/behaviour/pauseChatHover", false};
|
2017-12-17 01:19:56 +01:00
|
|
|
|
|
|
|
/// 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};
|
2018-01-04 02:19:35 +01:00
|
|
|
FloatSetting emoteScale = {"/emotes/scale", 1.f};
|
2017-12-17 01:19:56 +01:00
|
|
|
|
2018-06-04 15:11:06 +02:00
|
|
|
// 0 = No preference
|
|
|
|
// 1 = 1x
|
|
|
|
// 2 = 2x
|
|
|
|
// 3 = 3x
|
2018-01-07 02:56:45 +01:00
|
|
|
IntSetting preferredEmoteQuality = {"/emotes/preferredEmoteQuality", 0};
|
|
|
|
|
2017-12-17 01:19:56 +01:00
|
|
|
/// Links
|
|
|
|
BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false};
|
|
|
|
|
2018-01-23 21:33:49 +01:00
|
|
|
/// Ingored Users
|
|
|
|
BoolSetting enableTwitchIgnoredUsers = {"/ignore/enableTwitchIgnoredUsers", true};
|
|
|
|
|
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
|
|
|
|
2017-12-17 01:19:56 +01:00
|
|
|
/// Highlighting
|
2018-04-27 01:11:09 +02:00
|
|
|
// BoolSetting enableHighlights = {"/highlighting/enabled", true};
|
2017-12-17 01:19:56 +01:00
|
|
|
BoolSetting enableHighlightsSelf = {"/highlighting/nameIsHighlightKeyword", true};
|
|
|
|
BoolSetting enableHighlightSound = {"/highlighting/enableSound", true};
|
|
|
|
BoolSetting enableHighlightTaskbar = {"/highlighting/enableTaskbarFlashing", true};
|
|
|
|
BoolSetting customHighlightSound = {"/highlighting/useCustomSound", false};
|
2017-06-11 20:53:43 +02:00
|
|
|
|
2018-01-28 14:23:55 +01:00
|
|
|
/// Logging
|
|
|
|
BoolSetting enableLogging = {"/logging/enabled", false};
|
|
|
|
|
2018-05-16 01:39:08 +02:00
|
|
|
QStringSetting logPath = {"/logging/path",
|
|
|
|
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)};
|
2018-05-15 19:44:58 +02:00
|
|
|
|
2018-01-04 02:19:35 +01:00
|
|
|
QStringSetting pathHighlightSound = {"/highlighting/highlightSoundPath",
|
|
|
|
"qrc:/sounds/ping2.wav"};
|
|
|
|
QStringSetting highlightUserBlacklist = {"/highlighting/blacklistedUsers", ""};
|
2017-12-17 01:19:56 +01:00
|
|
|
|
|
|
|
BoolSetting highlightAlwaysPlaySound = {"/highlighting/alwaysPlaySound", false};
|
|
|
|
|
|
|
|
BoolSetting inlineWhispers = {"/whispers/enableInlineWhispers", true};
|
2017-04-12 17:46:44 +02:00
|
|
|
|
2018-05-06 16:33:00 +02:00
|
|
|
/// External tools
|
|
|
|
// Streamlink
|
|
|
|
BoolSetting streamlinkUseCustomPath = {"/external/streamlink/useCustomPath", false};
|
|
|
|
QStringSetting streamlinkPath = {"/external/streamlink/customPath", ""};
|
|
|
|
QStringSetting preferredQuality = {"/external/streamlink/quality", "Choose"};
|
|
|
|
QStringSetting streamlinkOpts = {"/external/streamlink/options", ""};
|
|
|
|
|
2017-09-21 12:15:01 +02:00
|
|
|
void updateWordTypeMask();
|
|
|
|
|
2017-12-28 19:03:52 +01:00
|
|
|
void saveSnapshot();
|
|
|
|
void recallSnapshot();
|
|
|
|
|
2018-01-17 14:14:31 +01:00
|
|
|
std::vector<ModerationAction> getModerationActions() const;
|
2018-04-27 22:11:19 +02:00
|
|
|
pajlada::Signals::NoArgSignal wordFlagsChanged;
|
2017-09-21 12:15:01 +02:00
|
|
|
|
|
|
|
private:
|
2018-01-17 14:14:31 +01:00
|
|
|
std::vector<ModerationAction> _moderationActions;
|
2017-12-28 19:03:52 +01:00
|
|
|
std::unique_ptr<rapidjson::Document> snapshot;
|
|
|
|
|
2018-01-17 14:14:31 +01:00
|
|
|
void updateModerationActions();
|
|
|
|
|
2018-01-17 17:02:34 +01:00
|
|
|
messages::MessageElement::Flags wordFlags = messages::MessageElement::Default;
|
2017-12-19 02:31:06 +01:00
|
|
|
|
2018-01-17 17:02:34 +01:00
|
|
|
pajlada::Settings::SettingListener wordFlagsListener;
|
2017-01-05 20:49:13 +01:00
|
|
|
};
|
2017-01-22 23:00:35 +01:00
|
|
|
|
2018-01-04 01:52:37 +01:00
|
|
|
} // namespace singletons
|
2017-04-14 17:52:22 +02:00
|
|
|
} // namespace chatterino
|