Remove BaseSettings & merge ConcurrentSettings (#4775)

This commit is contained in:
pajlada
2023-08-28 17:51:28 +02:00
committed by GitHub
parent 4c942a2a42
commit 7cb04bf58b
18 changed files with 235 additions and 281 deletions
+71 -41
View File
@@ -1,10 +1,17 @@
#pragma once
#include "BaseSettings.hpp"
#include "common/Channel.hpp"
#include "common/ChatterinoSetting.hpp"
#include "common/enums/MessageOverflow.hpp"
#include "common/SignalVector.hpp"
#include "controllers/filters/FilterRecord.hpp"
#include "controllers/highlights/HighlightBadge.hpp"
#include "controllers/highlights/HighlightBlacklistUser.hpp"
#include "controllers/highlights/HighlightPhrase.hpp"
#include "controllers/ignores/IgnorePhrase.hpp"
#include "controllers/logging/ChannelLog.hpp"
#include "controllers/moderationactions/ModerationAction.hpp"
#include "controllers/nicknames/Nickname.hpp"
#include "singletons/Toasts.hpp"
#include "util/RapidJsonSerializeQString.hpp"
#include "util/StreamerMode.hpp"
@@ -12,49 +19,14 @@
#include <pajlada/settings/setting.hpp>
#include <pajlada/settings/settinglistener.hpp>
#include <pajlada/signals/signalholder.hpp>
using TimeoutButton = std::pair<QString, int>;
namespace chatterino {
class HighlightPhrase;
class HighlightBlacklistUser;
class IgnorePhrase;
class FilterRecord;
using FilterRecordPtr = std::shared_ptr<FilterRecord>;
class Nickname;
class HighlightBadge;
class ModerationAction;
/// Settings which are available for reading on all threads.
class ConcurrentSettings
{
public:
ConcurrentSettings();
SignalVector<HighlightPhrase> &highlightedMessages;
SignalVector<HighlightPhrase> &highlightedUsers;
SignalVector<HighlightBadge> &highlightedBadges;
SignalVector<HighlightBlacklistUser> &blacklistedUsers;
SignalVector<IgnorePhrase> &ignoredMessages;
SignalVector<QString> &mutedChannels;
SignalVector<FilterRecordPtr> &filterRecords;
SignalVector<Nickname> &nicknames;
SignalVector<ModerationAction> &moderationActions;
SignalVector<ChannelLog> &loggedChannels;
bool isHighlightedUser(const QString &username);
bool isBlacklistedUser(const QString &username);
bool isMutedChannel(const QString &channelName);
bool toggleMutedChannel(const QString &channelName);
boost::optional<QString> matchNickname(const QString &username);
private:
void mute(const QString &channelName);
void unmute(const QString &channelName);
};
ConcurrentSettings &getCSettings();
void _actuallyRegisterSetting(
std::weak_ptr<pajlada::Settings::SettingData> setting);
enum UsernameDisplayMode : int {
Username = 1, // Username
@@ -91,15 +63,25 @@ enum UsernameRightClickBehavior : int {
/// Settings which are availlable for reading and writing on the gui thread.
// These settings are still accessed concurrently in the code but it is bad practice.
class Settings : public ABSettings, public ConcurrentSettings
class Settings
{
static Settings *instance_;
public:
Settings(const QString &settingsDirectory);
~Settings();
static Settings &instance();
void saveSnapshot();
void restoreSnapshot();
FloatSetting uiScale = {"/appearance/uiScale2", 1};
BoolSetting windowTopMost = {"/appearance/windowAlwaysOnTop", false};
float getClampedUiScale() const;
void setClampedUiScale(float value);
/// Appearance
BoolSetting showTimestamps = {"/appearance/messages/showTimestamps", true};
BoolSetting animationsWhenFocused = {
@@ -209,7 +191,7 @@ public:
{
"/behaviour/usernameRightClickBehaviorWithModifier",
UsernameRightClickBehavior::Reply,
};
};
EnumSetting<Qt::KeyboardModifier> usernameRightClickModifier = {
"/behaviour/usernameRightClickModifier",
Qt::KeyboardModifier::ShiftModifier};
@@ -575,7 +557,55 @@ public:
"/plugins/enabledPlugins", {}};
private:
ChatterinoSetting<std::vector<HighlightPhrase>> highlightedMessagesSetting =
{"/highlighting/highlights"};
ChatterinoSetting<std::vector<HighlightPhrase>> highlightedUsersSetting = {
"/highlighting/users"};
ChatterinoSetting<std::vector<HighlightBadge>> highlightedBadgesSetting = {
"/highlighting/badges"};
ChatterinoSetting<std::vector<HighlightBlacklistUser>>
blacklistedUsersSetting = {"/highlighting/blacklist"};
ChatterinoSetting<std::vector<IgnorePhrase>> ignoredMessagesSetting = {
"/ignore/phrases"};
ChatterinoSetting<std::vector<QString>> mutedChannelsSetting = {
"/pings/muted"};
ChatterinoSetting<std::vector<FilterRecordPtr>> filterRecordsSetting = {
"/filtering/filters"};
ChatterinoSetting<std::vector<Nickname>> nicknamesSetting = {"/nicknames"};
ChatterinoSetting<std::vector<ModerationAction>> moderationActionsSetting =
{"/moderation/actions"};
ChatterinoSetting<std::vector<ChannelLog>> loggedChannelsSetting = {
"/logging/channels"};
public:
SignalVector<HighlightPhrase> highlightedMessages;
SignalVector<HighlightPhrase> highlightedUsers;
SignalVector<HighlightBadge> highlightedBadges;
SignalVector<HighlightBlacklistUser> blacklistedUsers;
SignalVector<IgnorePhrase> ignoredMessages;
SignalVector<QString> mutedChannels;
SignalVector<FilterRecordPtr> filterRecords;
SignalVector<Nickname> nicknames;
SignalVector<ModerationAction> moderationActions;
SignalVector<ChannelLog> loggedChannels;
bool isHighlightedUser(const QString &username);
bool isBlacklistedUser(const QString &username);
bool isMutedChannel(const QString &channelName);
bool toggleMutedChannel(const QString &channelName);
boost::optional<QString> matchNickname(const QString &username);
private:
void mute(const QString &channelName);
void unmute(const QString &channelName);
void updateModerationActions();
std::unique_ptr<rapidjson::Document> snapshot_;
pajlada::Signals::SignalHolder signalHolder;
};
Settings *getSettings();
} // namespace chatterino