File indexing completed on 2024-04-14 04:50:22
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2008-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "notifymanager.h" 0010 0011 #include <QTimer> 0012 0013 #include <KNotification> 0014 0015 #include "choqokbehaviorsettings.h" 0016 #include "choqokuiglobal.h" 0017 0018 namespace Choqok 0019 { 0020 0021 class NotifyManagerPrivate 0022 { 0023 public: 0024 NotifyManagerPrivate() 0025 { 0026 lastErrorClearance.setSingleShot(true); 0027 lastErrorClearance.setInterval(3000); 0028 QObject::connect(&lastErrorClearance, &QTimer::timeout, 0029 Choqok::UI::Global::SessionManager::self(), &Choqok::UI::Global::SessionManager::resetNotifyManager); 0030 } 0031 void triggerNotify(const QString &eventId, const QString &title, 0032 const QString &message, 0033 KNotification::NotificationFlags flags = KNotification::CloseOnTimeout); 0034 0035 QList<QString> lastErrorMessages; 0036 QTimer lastErrorClearance; 0037 }; 0038 0039 Q_GLOBAL_STATIC(NotifyManagerPrivate, _nmp) 0040 0041 NotifyManager::NotifyManager() 0042 { 0043 } 0044 0045 NotifyManager::~NotifyManager() 0046 { 0047 } 0048 0049 void NotifyManager::resetNotifyManager() 0050 { 0051 _nmp->lastErrorMessages.clear(); 0052 } 0053 0054 void NotifyManager::success(const QString &message, const QString &title) 0055 { 0056 if (Choqok::UI::Global::mainWindow()->isActiveWindow()) { 0057 choqokMainWindow->showStatusMessage(message); 0058 } else { 0059 _nmp->triggerNotify(QLatin1String("job-success"), title, message); 0060 } 0061 } 0062 0063 void NotifyManager::error(const QString &message, const QString &title) 0064 { 0065 if (!_nmp->lastErrorMessages.contains(message)) { 0066 _nmp->triggerNotify(QLatin1String("job-error"), title, message); 0067 _nmp->lastErrorMessages.append(message); 0068 _nmp->lastErrorClearance.start(); 0069 } 0070 0071 } 0072 0073 void NotifyManager::newPostArrived(const QString &message, const QString &title) 0074 { 0075 QString fullMsg = QStringLiteral("<b>%1:</b>\n%2").arg(title).arg(message); 0076 if (Choqok::UI::Global::mainWindow()->isActiveWindow()) { 0077 choqokMainWindow->showStatusMessage(message); 0078 } else { 0079 if (Choqok::BehaviorSettings::knotify()) { 0080 KNotification *n = new KNotification(QLatin1String("new-post-arrived")); 0081 n->setActions(QStringList(i18nc("Show Choqok MainWindow", "Show Choqok"))); 0082 n->setText(fullMsg); 0083 QObject::connect(n, (void (KNotification::*)())&KNotification::activated, 0084 choqokMainWindow, &Choqok::UI::MainWindow::activateChoqok); 0085 n->sendEvent(); 0086 } 0087 } 0088 } 0089 0090 void NotifyManager::shortening(const QString &message, const QString &title) 0091 { 0092 _nmp->triggerNotify(QLatin1String("shortening"), title, message); 0093 } 0094 0095 void NotifyManagerPrivate::triggerNotify(const QString &eventId, const QString &title, 0096 const QString &message, KNotification::NotificationFlags flags) 0097 { 0098 QString fullMsg = QStringLiteral("<b>%1:</b><br/>%2").arg(title).arg(message); 0099 KNotification::event(eventId, fullMsg, QPixmap(), Choqok::UI::Global::mainWindow(), flags); 0100 } 0101 0102 }