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 }