did some more things and stuff

This commit is contained in:
fourtf 2020-02-23 23:07:28 +01:00
parent 5ad427bd61
commit e537277fa8
17 changed files with 98 additions and 174 deletions

View file

@ -138,13 +138,11 @@ SOURCES += \
src/controllers/ignores/IgnoreModel.cpp \ src/controllers/ignores/IgnoreModel.cpp \
src/controllers/moderationactions/ModerationAction.cpp \ src/controllers/moderationactions/ModerationAction.cpp \
src/controllers/moderationactions/ModerationActionModel.cpp \ src/controllers/moderationactions/ModerationActionModel.cpp \
src/controllers/moderationactions/ModerationActions.cpp \
src/controllers/notifications/NotificationController.cpp \ src/controllers/notifications/NotificationController.cpp \
src/controllers/notifications/NotificationModel.cpp \ src/controllers/notifications/NotificationModel.cpp \
src/controllers/pings/MutedChannelController.cpp \ src/controllers/pings/MutedChannelController.cpp \
src/controllers/pings/MutedChannelModel.cpp \ src/controllers/pings/MutedChannelModel.cpp \
src/controllers/taggedusers/TaggedUser.cpp \ src/controllers/taggedusers/TaggedUser.cpp \
src/controllers/taggedusers/TaggedUsersController.cpp \
src/controllers/taggedusers/TaggedUsersModel.cpp \ src/controllers/taggedusers/TaggedUsersModel.cpp \
src/debug/Benchmark.cpp \ src/debug/Benchmark.cpp \
src/main.cpp \ src/main.cpp \
@ -333,13 +331,11 @@ HEADERS += \
src/controllers/ignores/IgnorePhrase.hpp \ src/controllers/ignores/IgnorePhrase.hpp \
src/controllers/moderationactions/ModerationAction.hpp \ src/controllers/moderationactions/ModerationAction.hpp \
src/controllers/moderationactions/ModerationActionModel.hpp \ src/controllers/moderationactions/ModerationActionModel.hpp \
src/controllers/moderationactions/ModerationActions.hpp \
src/controllers/notifications/NotificationController.hpp \ src/controllers/notifications/NotificationController.hpp \
src/controllers/notifications/NotificationModel.hpp \ src/controllers/notifications/NotificationModel.hpp \
src/controllers/pings/MutedChannelController.hpp \ src/controllers/pings/MutedChannelController.hpp \
src/controllers/pings/MutedChannelModel.hpp \ src/controllers/pings/MutedChannelModel.hpp \
src/controllers/taggedusers/TaggedUser.hpp \ src/controllers/taggedusers/TaggedUser.hpp \
src/controllers/taggedusers/TaggedUsersController.hpp \
src/controllers/taggedusers/TaggedUsersModel.hpp \ src/controllers/taggedusers/TaggedUsersModel.hpp \
src/debug/AssertInGuiThread.hpp \ src/debug/AssertInGuiThread.hpp \
src/debug/Benchmark.hpp \ src/debug/Benchmark.hpp \

View file

@ -6,10 +6,7 @@
#include "controllers/accounts/AccountController.hpp" #include "controllers/accounts/AccountController.hpp"
#include "controllers/commands/CommandController.hpp" #include "controllers/commands/CommandController.hpp"
#include "controllers/ignores/IgnoreController.hpp" #include "controllers/ignores/IgnoreController.hpp"
#include "controllers/moderationactions/ModerationActions.hpp"
#include "controllers/notifications/NotificationController.hpp" #include "controllers/notifications/NotificationController.hpp"
#include "controllers/pings/MutedChannelController.hpp"
#include "controllers/taggedusers/TaggedUsersController.hpp"
#include "messages/MessageBuilder.hpp" #include "messages/MessageBuilder.hpp"
#include "providers/bttv/BttvEmotes.hpp" #include "providers/bttv/BttvEmotes.hpp"
#include "providers/chatterino/ChatterinoBadges.hpp" #include "providers/chatterino/ChatterinoBadges.hpp"
@ -54,9 +51,6 @@ Application::Application(Settings &_settings, Paths &_paths)
, accounts(&this->emplace<AccountController>()) , accounts(&this->emplace<AccountController>())
, commands(&this->emplace<CommandController>()) , commands(&this->emplace<CommandController>())
, notifications(&this->emplace<NotificationController>()) , notifications(&this->emplace<NotificationController>())
, pings(&this->emplace<MutedChannelController>())
, taggedUsers(&this->emplace<TaggedUsersController>())
, moderationActions(&this->emplace<ModerationActions>())
, twitch2(&this->emplace<TwitchIrcServer>()) , twitch2(&this->emplace<TwitchIrcServer>())
, chatterinoBadges(&this->emplace<ChatterinoBadges>()) , chatterinoBadges(&this->emplace<ChatterinoBadges>())
, logging(&this->emplace<Logging>()) , logging(&this->emplace<Logging>())
@ -111,9 +105,6 @@ void Application::initialize(Settings &settings, Paths &paths)
this->initNm(paths); this->initNm(paths);
this->initPubsub(); this->initPubsub();
this->moderationActions->items.delayedItemsChanged.connect(
[this] { this->windows->forceLayoutChannelViews(); });
} }
int Application::run(QApplication &qtApp) int Application::run(QApplication &qtApp)
@ -126,6 +117,8 @@ int Application::run(QApplication &qtApp)
getSettings()->betaUpdates.connect( getSettings()->betaUpdates.connect(
[] { Updates::instance().checkForUpdates(); }, false); [] { Updates::instance().checkForUpdates(); }, false);
getSettings()->moderationActions.delayedItemsChanged.connect(
[this] { this->windows->forceLayoutChannelViews(); });
return qtApp.exec(); return qtApp.exec();
} }

View file

@ -13,13 +13,8 @@ class TwitchIrcServer;
class PubSub; class PubSub;
class CommandController; class CommandController;
class HighlightController;
class IgnoreController;
class TaggedUsersController;
class AccountController; class AccountController;
class ModerationActions;
class NotificationController; class NotificationController;
class MutedChannelController;
class Theme; class Theme;
class WindowManager; class WindowManager;
@ -60,9 +55,6 @@ public:
AccountController *const accounts{}; AccountController *const accounts{};
CommandController *const commands{}; CommandController *const commands{};
NotificationController *const notifications{}; NotificationController *const notifications{};
MutedChannelController *const pings{};
TaggedUsersController *const taggedUsers{};
ModerationActions *const moderationActions{};
TwitchIrcServer *const twitch2{}; TwitchIrcServer *const twitch2{};
ChatterinoBadges *const chatterinoBadges{}; ChatterinoBadges *const chatterinoBadges{};

View file

@ -71,11 +71,11 @@ ModerationAction::ModerationAction(const QString &action)
} }
else if (action.startsWith("/ban ")) else if (action.startsWith("/ban "))
{ {
this->image_ = Image::fromPixmap(getResources().buttons.ban); this->imageToLoad_ = 1;
} }
else if (action.startsWith("/delete ")) else if (action.startsWith("/delete "))
{ {
this->image_ = Image::fromPixmap(getResources().buttons.trashCan); this->imageToLoad_ = 2;
} }
else else
{ {
@ -100,6 +100,16 @@ bool ModerationAction::isImage() const
const boost::optional<ImagePtr> &ModerationAction::getImage() const const boost::optional<ImagePtr> &ModerationAction::getImage() const
{ {
assertInGuiThread();
if (this->imageToLoad_ != 0)
{
if (this->imageToLoad_ == 1)
this->image_ = Image::fromPixmap(getResources().buttons.ban);
else if (this->imageToLoad_ == 2)
this->image_ = Image::fromPixmap(getResources().buttons.trashCan);
}
return this->image_; return this->image_;
} }

View file

@ -25,10 +25,11 @@ public:
const QString &getAction() const; const QString &getAction() const;
private: private:
boost::optional<ImagePtr> image_; mutable boost::optional<ImagePtr> image_;
QString line1_; QString line1_;
QString line2_; QString line2_;
QString action_; QString action_;
int imageToLoad_{};
}; };
} // namespace chatterino } // namespace chatterino

View file

@ -1,19 +0,0 @@
#include "ModerationActions.hpp"
#include "Application.hpp"
#include "controllers/moderationactions/ModerationActionModel.hpp"
#include "util/PersistSignalVector.hpp"
#include <QRegularExpression>
namespace chatterino {
void ModerationActions::initialize(Settings &settings, Paths &paths)
{
assert(!this->initialized_);
this->initialized_ = true;
persist(this->items, "/moderation/actions");
}
} // namespace chatterino

View file

@ -1,23 +0,0 @@
#pragma once
#include "common/SignalVector.hpp"
#include "common/Singleton.hpp"
#include "controllers/moderationactions/ModerationAction.hpp"
namespace chatterino {
class Settings;
class Paths;
class ModerationActions final : public Singleton
{
public:
virtual void initialize(Settings &settings, Paths &paths) override;
SignalVector<ModerationAction> items;
private:
bool initialized_ = false;
};
} // namespace chatterino

View file

@ -7,51 +7,6 @@ namespace chatterino {
void MutedChannelController::initialize(Settings &settings, Paths &paths) void MutedChannelController::initialize(Settings &settings, Paths &paths)
{ {
this->initialized_ = true; this->initialized_ = true;
persist(this->channels, "/pings/muted");
}
bool MutedChannelController::isMuted(const QString &channelName)
{
for (const auto &channel : this->channels)
{
if (channelName.toLower() == channel.toLower())
{
return true;
}
}
return false;
}
void MutedChannelController::mute(const QString &channelName)
{
channels.append(channelName);
}
void MutedChannelController::unmute(const QString &channelName)
{
for (std::vector<int>::size_type i = 0; i != channels.raw().size(); i++)
{
if (channels.raw()[i].toLower() == channelName.toLower())
{
channels.removeAt(i);
i--;
}
}
}
bool MutedChannelController::toggleMuted(const QString &channelName)
{
if (this->isMuted(channelName))
{
unmute(channelName);
return false;
}
else
{
mute(channelName);
return true;
}
} }
} // namespace chatterino } // namespace chatterino

View file

@ -18,12 +18,7 @@ class MutedChannelController final : public Singleton, private QObject
public: public:
virtual void initialize(Settings &settings, Paths &paths) override; virtual void initialize(Settings &settings, Paths &paths) override;
bool isMuted(const QString &channelName);
bool toggleMuted(const QString &channelName);
private: private:
void mute(const QString &channelName);
void unmute(const QString &channelName);
bool initialized_ = false; bool initialized_ = false;
SignalVector<QString> channels; SignalVector<QString> channels;

View file

@ -1,12 +0,0 @@
#include "TaggedUsersController.hpp"
#include "controllers/taggedusers/TaggedUsersModel.hpp"
namespace chatterino {
TaggedUsersController::TaggedUsersController()
: users(std::less<TaggedUser>{})
{
}
} // namespace chatterino

View file

@ -1,20 +0,0 @@
#pragma once
#include "common/Singleton.hpp"
#include "common/SignalVector.hpp"
#include "controllers/taggedusers/TaggedUser.hpp"
namespace chatterino {
class TaggedUsersModel;
class TaggedUsersController final : public Singleton
{
public:
TaggedUsersController();
SignalVector<TaggedUser> users;
};
} // namespace chatterino

View file

@ -1,7 +1,6 @@
#include "messages/MessageElement.hpp" #include "messages/MessageElement.hpp"
#include "Application.hpp" #include "Application.hpp"
#include "controllers/moderationactions/ModerationActions.hpp"
#include "debug/Benchmark.hpp" #include "debug/Benchmark.hpp"
#include "messages/Emote.hpp" #include "messages/Emote.hpp"
#include "messages/layouts/MessageLayoutContainer.hpp" #include "messages/layouts/MessageLayoutContainer.hpp"
@ -374,8 +373,8 @@ void TwitchModerationElement::addToContainer(MessageLayoutContainer &container,
{ {
QSize size(int(container.getScale() * 16), QSize size(int(container.getScale() * 16),
int(container.getScale() * 16)); int(container.getScale() * 16));
auto actions = getCSettings().moderationActions.readOnly();
for (const auto &action : getApp()->moderationActions->items) for (const auto &action : *actions)
{ {
if (auto image = action.getImage()) if (auto image = action.getImage())
{ {

View file

@ -238,7 +238,7 @@ void TwitchMessageBuilder::triggerHighlights()
return; return;
} }
if (getApp()->pings->isMuted(this->channel->getName())) if (getCSettings().isMutedChannel(this->channel->getName()))
{ {
// Do nothing. Pings are muted in this channel. // Do nothing. Pings are muted in this channel.
return; return;

View file

@ -4,6 +4,7 @@
#include "controllers/highlights/HighlightBlacklistUser.hpp" #include "controllers/highlights/HighlightBlacklistUser.hpp"
#include "controllers/highlights/HighlightPhrase.hpp" #include "controllers/highlights/HighlightPhrase.hpp"
#include "controllers/ignores/IgnorePhrase.hpp" #include "controllers/ignores/IgnorePhrase.hpp"
#include "controllers/pings/MutedChannelController.hpp"
#include "singletons/Paths.hpp" #include "singletons/Paths.hpp"
#include "singletons/Resources.hpp" #include "singletons/Resources.hpp"
#include "singletons/WindowManager.hpp" #include "singletons/WindowManager.hpp"
@ -15,11 +16,21 @@ namespace chatterino {
ConcurrentSettings *concurrentInstance_{}; ConcurrentSettings *concurrentInstance_{};
ConcurrentSettings::ConcurrentSettings() ConcurrentSettings::ConcurrentSettings()
// NOTE: these do not get deleted
: highlightedMessages(*new SignalVector<HighlightPhrase>()) : highlightedMessages(*new SignalVector<HighlightPhrase>())
, highlightedUsers(*new SignalVector<HighlightPhrase>()) , highlightedUsers(*new SignalVector<HighlightPhrase>())
, blacklistedUsers(*new SignalVector<HighlightBlacklistUser>()) , blacklistedUsers(*new SignalVector<HighlightBlacklistUser>())
, ignoredMessages(*new SignalVector<IgnorePhrase>()) , ignoredMessages(*new SignalVector<IgnorePhrase>())
, mutedChannels(*new SignalVector<QString>())
, moderationActions(*new SignalVector<ModerationAction>)
{ {
persist(this->highlightedMessages, "/highlighting/highlights");
persist(this->blacklistedUsers, "/highlighting/blacklist");
persist(this->highlightedUsers, "/highlighting/users");
persist(this->ignoredMessages, "/ignore/phrases");
persist(this->mutedChannels, "/pings/muted");
// tagged users?
persist(this->moderationActions, "/moderation/actions");
} }
bool ConcurrentSettings::isHighlightedUser(const QString &username) bool ConcurrentSettings::isHighlightedUser(const QString &username)
@ -46,6 +57,50 @@ bool ConcurrentSettings::isBlacklistedUser(const QString &username)
return false; return false;
} }
bool ConcurrentSettings::isMutedChannel(const QString &channelName)
{
for (const auto &channel : this->mutedChannels)
{
if (channelName.toLower() == channel.toLower())
{
return true;
}
}
return false;
}
void ConcurrentSettings::mute(const QString &channelName)
{
mutedChannels.append(channelName);
}
void ConcurrentSettings::unmute(const QString &channelName)
{
for (std::vector<int>::size_type i = 0; i != mutedChannels.raw().size();
i++)
{
if (mutedChannels.raw()[i].toLower() == channelName.toLower())
{
mutedChannels.removeAt(i);
i--;
}
}
}
bool ConcurrentSettings::toggleMutedChannel(const QString &channelName)
{
if (this->isMutedChannel(channelName))
{
unmute(channelName);
return false;
}
else
{
mute(channelName);
return true;
}
}
ConcurrentSettings &getCSettings() ConcurrentSettings &getCSettings()
{ {
// `concurrentInstance_` gets assigned in Settings ctor. // `concurrentInstance_` gets assigned in Settings ctor.
@ -62,11 +117,6 @@ Settings::Settings(const QString &settingsDirectory)
instance_ = this; instance_ = this;
concurrentInstance_ = this; concurrentInstance_ = this;
persist(this->highlightedMessages, "/highlighting/highlights");
persist(this->blacklistedUsers, "/highlighting/blacklist");
persist(this->highlightedUsers, "/highlighting/users");
persist(this->ignoredMessages, "/ignore/phrases");
#ifdef USEWINSDK #ifdef USEWINSDK
this->autorun = isRegisteredForStartup(); this->autorun = isRegisteredForStartup();
this->autorun.connect( this->autorun.connect(

View file

@ -15,26 +15,35 @@ namespace chatterino {
class HighlightPhrase; class HighlightPhrase;
class HighlightBlacklistUser; class HighlightBlacklistUser;
class IgnorePhrase; class IgnorePhrase;
class TaggedUser;
// Settings which are availlable for reading on all threads. /// Settings which are availlable for reading on all threads.
class ConcurrentSettings class ConcurrentSettings
{ {
public: public:
ConcurrentSettings(); ConcurrentSettings();
// clang-format off SignalVector<HighlightPhrase> &highlightedMessages;
SignalVector<HighlightPhrase> &highlightedMessages; SignalVector<HighlightPhrase> &highlightedUsers;
SignalVector<HighlightPhrase> &highlightedUsers;
SignalVector<HighlightBlacklistUser> &blacklistedUsers; SignalVector<HighlightBlacklistUser> &blacklistedUsers;
SignalVector<IgnorePhrase> &ignoredMessages; SignalVector<IgnorePhrase> &ignoredMessages;
// clang-format on SignalVector<QString> &mutedChannels;
//SignalVector<TaggedUser> &taggedUsers;
SignalVector<ModerationAction> &moderationActions;
bool isHighlightedUser(const QString &username); bool isHighlightedUser(const QString &username);
bool isBlacklistedUser(const QString &username); bool isBlacklistedUser(const QString &username);
bool isMutedChannel(const QString &channelName);
bool toggleMutedChannel(const QString &channelName);
private:
void mute(const QString &channelName);
void unmute(const QString &channelName);
}; };
ConcurrentSettings &getCSettings(); ConcurrentSettings &getCSettings();
/// 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. // These settings are still accessed concurrently in the code but it is bad practice.
class Settings : public ABSettings, public ConcurrentSettings class Settings : public ABSettings, public ConcurrentSettings
{ {

View file

@ -2,8 +2,6 @@
#include "Application.hpp" #include "Application.hpp"
#include "controllers/moderationactions/ModerationActionModel.hpp" #include "controllers/moderationactions/ModerationActionModel.hpp"
#include "controllers/moderationactions/ModerationActions.hpp"
#include "controllers/taggedusers/TaggedUsersController.hpp"
#include "controllers/taggedusers/TaggedUsersModel.hpp" #include "controllers/taggedusers/TaggedUsersModel.hpp"
#include "singletons/Logging.hpp" #include "singletons/Logging.hpp"
#include "singletons/Paths.hpp" #include "singletons/Paths.hpp"
@ -175,7 +173,7 @@ ModerationPage::ModerationPage()
modMode modMode
.emplace<EditableModelView>( .emplace<EditableModelView>(
(new ModerationActionModel(nullptr)) (new ModerationActionModel(nullptr))
->initialized(&app->moderationActions->items)) ->initialized(&getSettings()->moderationActions))
.getElement(); .getElement();
view->setTitles({"Actions"}); view->setTitles({"Actions"});
@ -185,7 +183,7 @@ ModerationPage::ModerationPage()
0, QHeaderView::Stretch); 0, QHeaderView::Stretch);
view->addButtonPressed.connect([] { view->addButtonPressed.connect([] {
getApp()->moderationActions->items.append( getSettings()->moderationActions.append(
ModerationAction("/timeout {user} 300")); ModerationAction("/timeout {user} 300"));
}); });

View file

@ -2,7 +2,6 @@
#include "Application.hpp" #include "Application.hpp"
#include "controllers/accounts/AccountController.hpp" #include "controllers/accounts/AccountController.hpp"
#include "controllers/moderationactions/ModerationActions.hpp"
#include "controllers/notifications/NotificationController.hpp" #include "controllers/notifications/NotificationController.hpp"
#include "controllers/pings/MutedChannelController.hpp" #include "controllers/pings/MutedChannelController.hpp"
#include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchChannel.hpp"
@ -189,7 +188,7 @@ void SplitHeader::initializeLayout()
switch (button) switch (button)
{ {
case Qt::LeftButton: case Qt::LeftButton:
if (getApp()->moderationActions->items.empty()) if (getSettings()->moderationActions.empty())
{ {
getApp()->windows->showSettingsDialog( getApp()->windows->showSettingsDialog(
SettingsDialogPreference:: SettingsDialogPreference::
@ -233,9 +232,9 @@ void SplitHeader::initializeLayout()
}); });
// update moderation button when items changed // update moderation button when items changed
this->managedConnect(getApp()->moderationActions->items.delayedItemsChanged, this->managedConnect(getSettings()->moderationActions.delayedItemsChanged,
[this] { [this] {
if (getApp()->moderationActions->items.empty()) if (getSettings()->moderationActions.empty())
{ {
if (this->split_->getModerationMode()) if (this->split_->getModerationMode())
this->split_->setModerationMode(true); this->split_->setModerationMode(true);
@ -339,11 +338,12 @@ std::unique_ptr<QMenu> SplitHeader::createMainMenu()
action->setCheckable(true); action->setCheckable(true);
QObject::connect(moreMenu, &QMenu::aboutToShow, this, [action, this]() { QObject::connect(moreMenu, &QMenu::aboutToShow, this, [action, this]() {
action->setChecked(getApp()->pings->isMuted( action->setChecked(getSettings()->isMutedChannel(
this->split_->getChannel()->getName())); this->split_->getChannel()->getName()));
}); });
action->connect(action, &QAction::triggered, this, [this]() { action->connect(action, &QAction::triggered, this, [this]() {
getApp()->pings->toggleMuted(this->split_->getChannel()->getName()); getSettings()->toggleMutedChannel(
this->split_->getChannel()->getName());
}); });
moreMenu->addAction(action); moreMenu->addAction(action);
@ -567,7 +567,7 @@ void SplitHeader::updateChannelText()
void SplitHeader::updateModerationModeIcon() void SplitHeader::updateModerationModeIcon()
{ {
auto moderationMode = this->split_->getModerationMode() && auto moderationMode = this->split_->getModerationMode() &&
!getApp()->moderationActions->items.empty(); !getSettings()->moderationActions.empty();
this->moderationButton_->setPixmap( this->moderationButton_->setPixmap(
moderationMode ? getResources().buttons.modModeEnabled moderationMode ? getResources().buttons.modModeEnabled