mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Implemented requested changes
changed setting from String to int. changed EnumCase I used createComboBox only has an implementation that handles stringsettings. I implemented my own combobox to handle the ToastsSettings now. Not sure if this is the best way. Won't come up with something smarter for now.
This commit is contained in:
parent
c20629c165
commit
2a590adba7
5 changed files with 67 additions and 33 deletions
|
@ -173,9 +173,9 @@ public:
|
||||||
"qrc:/sounds/ping3.wav"};
|
"qrc:/sounds/ping3.wav"};
|
||||||
|
|
||||||
BoolSetting notificationToast = {"/notifications/enableToast", false};
|
BoolSetting notificationToast = {"/notifications/enableToast", false};
|
||||||
QStringSetting openFromToast = {
|
IntSetting openFromToast = {
|
||||||
"/notifications/openFromToast",
|
"/notifications/openFromToast",
|
||||||
Toasts::findStringFromReaction(ToastReactions::openInBrowser)};
|
static_cast<int>(ToastReactions::OpenInBrowser)};
|
||||||
|
|
||||||
/// External tools
|
/// External tools
|
||||||
// Streamlink
|
// Streamlink
|
||||||
|
|
|
@ -28,16 +28,16 @@
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
|
|
||||||
std::map<ToastReactions, QString> Toasts::reactionToString = {
|
std::map<ToastReactions, QString> Toasts::reactionToString = {
|
||||||
{ToastReactions::openInBrowser, OPEN_IN_BROWSER},
|
{ToastReactions::OpenInBrowser, OPEN_IN_BROWSER},
|
||||||
{ToastReactions::openInPlayer, OPEN_PLAYER_IN_BROWSER},
|
{ToastReactions::OpenInPlayer, OPEN_PLAYER_IN_BROWSER},
|
||||||
{ToastReactions::openInStreamlink, OPEN_IN_STREAMLINK},
|
{ToastReactions::OpenInStreamlink, OPEN_IN_STREAMLINK},
|
||||||
{ToastReactions::dontOpen, DONT_OPEN}};
|
{ToastReactions::DontOpen, DONT_OPEN}};
|
||||||
|
|
||||||
std::map<QString, ToastReactions> Toasts::stringToReaction = {
|
std::map<QString, ToastReactions> Toasts::stringToReaction = {
|
||||||
{OPEN_IN_BROWSER, ToastReactions::openInBrowser},
|
{OPEN_IN_BROWSER, ToastReactions::OpenInBrowser},
|
||||||
{OPEN_PLAYER_IN_BROWSER, ToastReactions::openInPlayer},
|
{OPEN_PLAYER_IN_BROWSER, ToastReactions::OpenInPlayer},
|
||||||
{OPEN_IN_STREAMLINK, ToastReactions::openInStreamlink},
|
{OPEN_IN_STREAMLINK, ToastReactions::OpenInStreamlink},
|
||||||
{DONT_OPEN, ToastReactions::dontOpen}};
|
{DONT_OPEN, ToastReactions::DontOpen}};
|
||||||
|
|
||||||
bool Toasts::isEnabled()
|
bool Toasts::isEnabled()
|
||||||
{
|
{
|
||||||
|
@ -61,6 +61,13 @@ QString Toasts::findStringFromReaction(const ToastReactions &reaction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Toasts::findStringFromReaction(
|
||||||
|
const pajlada::Settings::Setting<int> &value)
|
||||||
|
{
|
||||||
|
int i = static_cast<int>(value);
|
||||||
|
return Toasts::findStringFromReaction(static_cast<ToastReactions>(i));
|
||||||
|
}
|
||||||
|
|
||||||
ToastReactions Toasts::findReactionFromString(const QString &string)
|
ToastReactions Toasts::findReactionFromString(const QString &string)
|
||||||
{
|
{
|
||||||
auto iterator = Toasts::stringToReaction.find(string);
|
auto iterator = Toasts::stringToReaction.find(string);
|
||||||
|
@ -70,7 +77,7 @@ ToastReactions Toasts::findReactionFromString(const QString &string)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return ToastReactions::dontOpen;
|
return ToastReactions::DontOpen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void Toasts::sendChannelNotification(const QString &channelName, Platform p)
|
void Toasts::sendChannelNotification(const QString &channelName, Platform p)
|
||||||
|
@ -125,23 +132,24 @@ public:
|
||||||
void toastActivated() const
|
void toastActivated() const
|
||||||
{
|
{
|
||||||
QString link;
|
QString link;
|
||||||
switch (Toasts::findReactionFromString(getSettings()->openFromToast))
|
switch (static_cast<ToastReactions>(
|
||||||
|
getSettings()->openFromToast.getValue()))
|
||||||
{
|
{
|
||||||
case ToastReactions::openInBrowser:
|
case ToastReactions::OpenInBrowser:
|
||||||
if (platform_ == Platform::Twitch)
|
if (platform_ == Platform::Twitch)
|
||||||
{
|
{
|
||||||
link = "http://www.twitch.tv/" + channelName_;
|
link = "http://www.twitch.tv/" + channelName_;
|
||||||
}
|
}
|
||||||
QDesktopServices::openUrl(QUrl(link));
|
QDesktopServices::openUrl(QUrl(link));
|
||||||
break;
|
break;
|
||||||
case ToastReactions::openInPlayer:
|
case ToastReactions::OpenInPlayer:
|
||||||
if (platform_ == Platform::Twitch)
|
if (platform_ == Platform::Twitch)
|
||||||
{
|
{
|
||||||
link = "https://player.twitch.tv/?channel=" + channelName_;
|
link = "https://player.twitch.tv/?channel=" + channelName_;
|
||||||
}
|
}
|
||||||
QDesktopServices::openUrl(QUrl(link));
|
QDesktopServices::openUrl(QUrl(link));
|
||||||
break;
|
break;
|
||||||
case ToastReactions::openInStreamlink:
|
case ToastReactions::OpenInStreamlink:
|
||||||
{
|
{
|
||||||
openStreamlinkForChannel(channelName_);
|
openStreamlinkForChannel(channelName_);
|
||||||
break;
|
break;
|
||||||
|
@ -173,10 +181,11 @@ void Toasts::sendWindowsNotification(const QString &channelName, Platform p)
|
||||||
std::wstring widestr = std::wstring(utf8_text.begin(), utf8_text.end());
|
std::wstring widestr = std::wstring(utf8_text.begin(), utf8_text.end());
|
||||||
|
|
||||||
templ.setTextField(widestr, WinToastLib::WinToastTemplate::FirstLine);
|
templ.setTextField(widestr, WinToastLib::WinToastTemplate::FirstLine);
|
||||||
if (Toasts::findReactionFromString(getSettings()->openFromToast) !=
|
if (static_cast<ToastReactions>(getSettings()->openFromToast.getValue()) !=
|
||||||
ToastReactions::dontOpen)
|
ToastReactions::DontOpen)
|
||||||
{
|
{
|
||||||
QString mode = getSettings()->openFromToast;
|
QString mode =
|
||||||
|
Toasts::findStringFromReaction(getSettings()->openFromToast);
|
||||||
mode = mode.toLower();
|
mode = mode.toLower();
|
||||||
|
|
||||||
templ.setTextField(L"Click here to " + mode.toStdWString(),
|
templ.setTextField(L"Click here to " + mode.toStdWString(),
|
||||||
|
|
|
@ -8,10 +8,10 @@ namespace chatterino {
|
||||||
enum class Platform : uint8_t;
|
enum class Platform : uint8_t;
|
||||||
|
|
||||||
enum class ToastReactions {
|
enum class ToastReactions {
|
||||||
openInBrowser,
|
OpenInBrowser = 0,
|
||||||
openInPlayer,
|
OpenInPlayer = 1,
|
||||||
openInStreamlink,
|
OpenInStreamlink = 2,
|
||||||
dontOpen
|
DontOpen = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
class Toasts final : public Singleton
|
class Toasts final : public Singleton
|
||||||
|
@ -19,6 +19,8 @@ class Toasts final : public Singleton
|
||||||
public:
|
public:
|
||||||
void sendChannelNotification(const QString &channelName, Platform p);
|
void sendChannelNotification(const QString &channelName, Platform p);
|
||||||
static QString findStringFromReaction(const ToastReactions &reaction);
|
static QString findStringFromReaction(const ToastReactions &reaction);
|
||||||
|
static QString findStringFromReaction(
|
||||||
|
const pajlada::Settings::Setting<int> &reaction);
|
||||||
static ToastReactions findReactionFromString(const QString &string);
|
static ToastReactions findReactionFromString(const QString &string);
|
||||||
static std::map<ToastReactions, QString> reactionToString;
|
static std::map<ToastReactions, QString> reactionToString;
|
||||||
static std::map<QString, ToastReactions> stringToReaction;
|
static std::map<QString, ToastReactions> stringToReaction;
|
||||||
|
|
|
@ -24,7 +24,6 @@ NotificationPage::NotificationPage()
|
||||||
: SettingsPage("Notifications", ":/settings/notification2.svg")
|
: SettingsPage("Notifications", ":/settings/notification2.svg")
|
||||||
{
|
{
|
||||||
LayoutCreator<NotificationPage> layoutCreator(this);
|
LayoutCreator<NotificationPage> layoutCreator(this);
|
||||||
|
|
||||||
auto layout = layoutCreator.emplace<QVBoxLayout>().withoutMargin();
|
auto layout = layoutCreator.emplace<QVBoxLayout>().withoutMargin();
|
||||||
{
|
{
|
||||||
auto tabs = layout.emplace<QTabWidget>();
|
auto tabs = layout.emplace<QTabWidget>();
|
||||||
|
@ -46,17 +45,12 @@ NotificationPage::NotificationPage()
|
||||||
->setSizePolicy(QSizePolicy::Maximum,
|
->setSizePolicy(QSizePolicy::Maximum,
|
||||||
QSizePolicy::Preferred);
|
QSizePolicy::Preferred);
|
||||||
|
|
||||||
|
// implementation of custom combobox done
|
||||||
|
// because addComboBox only can handle strings-settings
|
||||||
|
// int setting for the ToastReaction is desired
|
||||||
openIn
|
openIn
|
||||||
.append(this->createComboBox(
|
.append(this->createToastReactionComboBox(
|
||||||
{Toasts::findStringFromReaction(
|
this->managedConnections_))
|
||||||
ToastReactions::openInBrowser),
|
|
||||||
Toasts::findStringFromReaction(
|
|
||||||
ToastReactions::openInPlayer),
|
|
||||||
Toasts::findStringFromReaction(
|
|
||||||
ToastReactions::openInStreamlink),
|
|
||||||
Toasts::findStringFromReaction(
|
|
||||||
ToastReactions::dontOpen)},
|
|
||||||
getSettings()->openFromToast))
|
|
||||||
->setSizePolicy(QSizePolicy::Maximum,
|
->setSizePolicy(QSizePolicy::Maximum,
|
||||||
QSizePolicy::Preferred);
|
QSizePolicy::Preferred);
|
||||||
}
|
}
|
||||||
|
@ -140,4 +134,31 @@ NotificationPage::NotificationPage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
QComboBox *NotificationPage::createToastReactionComboBox(
|
||||||
|
std::vector<pajlada::Signals::ScopedConnection> managedConnections)
|
||||||
|
{
|
||||||
|
QComboBox *toastReactionOptions = new QComboBox();
|
||||||
|
|
||||||
|
for (int i = 0; i <= static_cast<int>(ToastReactions::DontOpen); i++)
|
||||||
|
{
|
||||||
|
toastReactionOptions->insertItem(
|
||||||
|
i, Toasts::findStringFromReaction(static_cast<ToastReactions>(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// update when setting changes
|
||||||
|
pajlada::Settings::Setting<int> setting = getSettings()->openFromToast;
|
||||||
|
setting.connect(
|
||||||
|
[toastReactionOptions](const int &index, auto) {
|
||||||
|
toastReactionOptions->setCurrentIndex(index);
|
||||||
|
},
|
||||||
|
managedConnections);
|
||||||
|
|
||||||
|
QObject::connect(toastReactionOptions, &QComboBox::currentTextChanged,
|
||||||
|
[setting](const QString &newValue) {
|
||||||
|
getSettings()->openFromToast.setValue(static_cast<int>(
|
||||||
|
Toasts::findReactionFromString(newValue)));
|
||||||
|
});
|
||||||
|
|
||||||
|
return toastReactionOptions;
|
||||||
|
}
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -15,6 +15,8 @@ public:
|
||||||
NotificationPage();
|
NotificationPage();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QComboBox *createToastReactionComboBox(
|
||||||
|
std::vector<pajlada::Signals::ScopedConnection> managedConnections);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
Loading…
Reference in a new issue