mirror-chatterino2/src/singletons/Toasts.cpp

120 lines
3.6 KiB
C++
Raw Normal View History

2018-08-11 12:47:03 +02:00
#include "Toasts.hpp"
#include "Application.hpp"
#include "controllers/notifications/NotificationController.hpp"
#include "providers/twitch/TwitchChannel.hpp"
#include "providers/twitch/TwitchServer.hpp"
2018-08-12 18:54:32 +02:00
#ifdef Q_OS_WIN
#include <wintoastlib.h>
2018-08-12 18:54:32 +02:00
#endif
#include <QDesktopServices>
#include <QUrl>
#include <cstdlib>
2018-08-11 12:47:03 +02:00
namespace chatterino {
2018-08-12 18:54:32 +02:00
bool Toasts::isEnabled()
{
return WinToastLib::WinToast::isCompatible() &&
getApp()->settings->notificationToast;
}
void Toasts::sendChannelNotification(const QString &channelName, Platform p)
2018-08-11 12:47:03 +02:00
{
#ifdef Q_OS_WIN
2018-08-12 18:54:32 +02:00
sendWindowsNotification(channelName, p);
return;
#endif
// OSX
// LINUX
2018-08-11 12:47:03 +02:00
}
#ifdef Q_OS_WIN
class CustomHandler : public WinToastLib::IWinToastHandler
{
public:
void toastActivated() const
{
std::wcout << L"The user clicked in this toast" << std::endl;
QString link = "http://www.google.com";
QDesktopServices::openUrl(QUrl(link));
}
void toastActivated(int actionIndex) const
{
// std::wcout << L"The user clicked on button #" << actionIndex
// << L" in this toast" << std::endl;
}
void toastFailed() const
{
// std::wcout << L"Error showing current toast" << std::endl;
}
void toastDismissed(WinToastDismissalReason state) const
{
switch (state) {
case UserCanceled:
// std::wcout << L"The user dismissed this toast" << std::endl;
break;
case ApplicationHidden:
/*
std::wcout << L"The application hid the toast using "
L"ToastNotifier.hide()"
<< std::endl;
*/
break;
case TimedOut:
// std::wcout << L"The toast has timed out" << std::endl;
break;
default:
// std::wcout << L"Toast not activated" << std::endl;
break;
}
}
};
2018-08-12 18:54:32 +02:00
void Toasts::sendWindowsNotification(const QString &channelName, Platform p)
{
WinToastLib::WinToastTemplate templ = WinToastLib::WinToastTemplate(
WinToastLib::WinToastTemplate::ImageAndText02);
QString str = channelName + " has just gone live!";
std::string utf8_text = str.toUtf8().constData();
std::wstring widestr = std::wstring(utf8_text.begin(), utf8_text.end());
templ.setTextField(widestr, WinToastLib::WinToastTemplate::FirstLine);
templ.setTextField(L"Click here to open in browser",
WinToastLib::WinToastTemplate::SecondLine);
if (getApp()->settings->notificationPlaySound) {
templ.setAudioOption(
WinToastLib::WinToastTemplate::AudioOption::Silent);
}
WinToastLib::WinToast::instance()->setAppName(L"Chatterino2");
int mbstowcs(wchar_t * aumi_version, const char *CHATTERINO_VERSION,
size_t size);
std::string(CHATTERINO_VERSION);
std::wstring aumi_version =
std::wstring(CHATTERINO_VERSION.begin(), CHATTERINO_VERSION.end());
// int mbstowcs(wchar_t *out, const char *in, size_t size);
/*
std::wstring aumi_version =
std::wstring(std::string(CHATTERINO_VERSION).begin(),
std::string(CHATTERINO_VERSION).end());*/
WinToastLib::WinToast::instance()->setAppUserModelId(
WinToastLib::WinToast::configureAUMI(L"", L"Chatterino 2", L"",
aumi_version));
WinToastLib::WinToast::instance()->initialize();
WinToastLib::WinToast::instance()->showToast(templ, new CustomHandler());
}
#endif
2018-08-11 12:47:03 +02:00
} // namespace chatterino