From 8ae9abb2506f46ff1a20fab52b681e21c3301471 Mon Sep 17 00:00:00 2001 From: fourtf Date: Sun, 23 Feb 2020 20:01:35 +0100 Subject: [PATCH] refactored IgnoredController --- chatterino.pro | 1 + .../highlights/HighlightController.cpp | 18 +------------ src/controllers/ignores/IgnoreController.cpp | 18 ++----------- src/controllers/ignores/IgnoreController.hpp | 5 ---- src/controllers/ignores/IgnoreModel.hpp | 5 +--- src/util/PersistSignalVector.hpp | 25 +++++++++++++++++++ src/widgets/settingspages/IgnoresPage.cpp | 4 ++- 7 files changed, 33 insertions(+), 43 deletions(-) create mode 100644 src/util/PersistSignalVector.hpp diff --git a/chatterino.pro b/chatterino.pro index 029508395..78a226811 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -434,6 +434,7 @@ HEADERS += \ src/util/LayoutCreator.hpp \ src/util/LayoutHelper.hpp \ src/util/Overloaded.hpp \ + src/util/PersistSignalVector.hpp \ src/util/PostToThread.hpp \ src/util/QObjectRef.hpp \ src/util/QStringHash.hpp \ diff --git a/src/controllers/highlights/HighlightController.cpp b/src/controllers/highlights/HighlightController.cpp index f341f3495..d81ea74e7 100644 --- a/src/controllers/highlights/HighlightController.cpp +++ b/src/controllers/highlights/HighlightController.cpp @@ -1,26 +1,10 @@ #include "HighlightController.hpp" #include "Application.hpp" -#include "common/ChatterinoSetting.hpp" +#include "util/PersistSignalVector.hpp" namespace chatterino { -template -inline void persist(SignalVector &vec, const std::string &name) -{ - auto setting = std::make_unique>>(name); - - for (auto &&item : setting->getValue()) - vec.append(item); - - vec.delayedItemsChanged.connect([setting = setting.get(), vec = &vec] { - setting->setValue(vec->raw()); - }); - - // TODO: Delete when appropriate. - setting.release(); -} - void HighlightController::initialize(Settings &settings, Paths &paths) { assert(!this->initialized_); diff --git a/src/controllers/ignores/IgnoreController.cpp b/src/controllers/ignores/IgnoreController.cpp index 0080af65c..3ce1d562c 100644 --- a/src/controllers/ignores/IgnoreController.cpp +++ b/src/controllers/ignores/IgnoreController.cpp @@ -2,6 +2,7 @@ #include "Application.hpp" #include "controllers/ignores/IgnoreModel.hpp" +#include "util/PersistSignalVector.hpp" #include @@ -12,22 +13,7 @@ void IgnoreController::initialize(Settings &, Paths &) assert(!this->initialized_); this->initialized_ = true; - for (const IgnorePhrase &phrase : this->ignoresSetting_.getValue()) - { - this->phrases.append(phrase); - } - - this->phrases.delayedItemsChanged.connect([this] { // - this->ignoresSetting_.setValue(this->phrases.raw()); - }); -} - -IgnoreModel *IgnoreController::createModel(QObject *parent) -{ - IgnoreModel *model = new IgnoreModel(parent); - model->initialize(&this->phrases); - - return model; + persist(this->phrases, "/ignore/phrases"); } } // namespace chatterino diff --git a/src/controllers/ignores/IgnoreController.hpp b/src/controllers/ignores/IgnoreController.hpp index e3330c33a..979647a0a 100644 --- a/src/controllers/ignores/IgnoreController.hpp +++ b/src/controllers/ignores/IgnoreController.hpp @@ -21,13 +21,8 @@ public: SignalVector phrases; - IgnoreModel *createModel(QObject *parent); - private: bool initialized_ = false; - - ChatterinoSetting> ignoresSetting_ = { - "/ignore/phrases"}; }; } // namespace chatterino diff --git a/src/controllers/ignores/IgnoreModel.hpp b/src/controllers/ignores/IgnoreModel.hpp index 1b9a5099e..473b61b93 100644 --- a/src/controllers/ignores/IgnoreModel.hpp +++ b/src/controllers/ignores/IgnoreModel.hpp @@ -7,10 +7,9 @@ namespace chatterino { -class IgnoreController; - class IgnoreModel : public SignalVectorModel { +public: explicit IgnoreModel(QObject *parent); protected: @@ -21,8 +20,6 @@ protected: // turns a row in the model into a vector item virtual void getRowFromItem(const IgnorePhrase &item, std::vector &row) override; - - friend class IgnoreController; }; } // namespace chatterino diff --git a/src/util/PersistSignalVector.hpp b/src/util/PersistSignalVector.hpp new file mode 100644 index 000000000..b1dde7786 --- /dev/null +++ b/src/util/PersistSignalVector.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include +#include "common/ChatterinoSetting.hpp" +#include "common/SignalVector.hpp" + +namespace chatterino { + +template +inline void persist(SignalVector &vec, const std::string &name) +{ + auto setting = std::make_unique>>(name); + + for (auto &&item : setting->getValue()) + vec.append(item); + + vec.delayedItemsChanged.connect([setting = setting.get(), vec = &vec] { + setting->setValue(vec->raw()); + }); + + // TODO: Delete when appropriate. + setting.release(); +} + +} // namespace chatterino diff --git a/src/widgets/settingspages/IgnoresPage.cpp b/src/widgets/settingspages/IgnoresPage.cpp index 773fdea33..c16b1858f 100644 --- a/src/widgets/settingspages/IgnoresPage.cpp +++ b/src/widgets/settingspages/IgnoresPage.cpp @@ -44,7 +44,9 @@ void addPhrasesTab(LayoutCreator layout) layout.emplace("Ignore messages based certain patterns."); EditableModelView *view = layout - .emplace(getApp()->ignores->createModel(nullptr)) + .emplace( + (new IgnoreModel(nullptr)) + ->initialized(&getApp()->ignores->phrases)) .getElement(); view->setTitles( {"Pattern", "Regex", "Case Sensitive", "Block", "Replacement"});