Warning, file /plasma/discover/notifier/NotifierItem.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  *   SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "NotifierItem.h"
0008 #include <KLocalizedString>
0009 #include <QDebug>
0010 #include <QMenu>
0011 
0012 KStatusNotifierItem::ItemStatus sniStatus(DiscoverNotifier::State state)
0013 {
0014     switch (state) {
0015     case DiscoverNotifier::Offline:
0016     case DiscoverNotifier::NoUpdates:
0017         return KStatusNotifierItem::Passive;
0018     case DiscoverNotifier::Busy:
0019     case DiscoverNotifier::NormalUpdates:
0020     case DiscoverNotifier::SecurityUpdates:
0021     case DiscoverNotifier::RebootRequired:
0022         return KStatusNotifierItem::Active;
0023     }
0024     return KStatusNotifierItem::Active;
0025 }
0026 
0027 NotifierItem::NotifierItem()
0028 {
0029 }
0030 
0031 void NotifierItem::setupNotifierItem()
0032 {
0033     Q_ASSERT(!m_item);
0034     m_item = new KStatusNotifierItem(QStringLiteral("org.kde.DiscoverNotifier"), this);
0035     m_item->setTitle(i18n("Updates"));
0036     m_item->setToolTipTitle(i18n("Updates"));
0037 
0038     connect(&m_notifier, &DiscoverNotifier::stateChanged, this, &NotifierItem::refresh);
0039 
0040     connect(m_item, &KStatusNotifierItem::activateRequested, &m_notifier, [this]() {
0041         if (m_notifier.needsReboot()) {
0042             m_notifier.reboot();
0043         } else {
0044             m_notifier.showDiscoverUpdates(m_item->providedToken());
0045         }
0046     });
0047 
0048     QMenu *menu = new QMenu;
0049     connect(m_item, &QObject::destroyed, menu, &QObject::deleteLater);
0050     auto discoverAction = menu->addAction(QIcon::fromTheme(QStringLiteral("plasmadiscover")), i18n("Open Discover…"));
0051     connect(discoverAction, &QAction::triggered, &m_notifier, [this] {
0052         m_notifier.showDiscover(m_item->providedToken());
0053     });
0054 
0055     auto updatesAction = menu->addAction(QIcon::fromTheme(QStringLiteral("system-software-update")), i18n("See Updates…"));
0056     connect(updatesAction, &QAction::triggered, &m_notifier, [this] {
0057         m_notifier.showDiscoverUpdates(m_item->providedToken());
0058     });
0059 
0060     auto refreshAction = menu->addAction(QIcon::fromTheme(QStringLiteral("view-refresh")), i18n("Refresh…"));
0061     connect(refreshAction, &QAction::triggered, &m_notifier, &DiscoverNotifier::recheckSystemUpdateNeeded);
0062 
0063     auto f = [this]() {
0064         m_item->setTitle(i18n("Restart to apply installed updates"));
0065         m_item->setToolTipTitle(i18n("Click to restart the device"));
0066         m_item->setIconByName(QStringLiteral("view-refresh"));
0067     };
0068     if (m_notifier.needsReboot())
0069         f();
0070     else
0071         connect(&m_notifier, &DiscoverNotifier::needsRebootChanged, menu, f);
0072 
0073     connect(&m_notifier, &DiscoverNotifier::newUpgradeAction, menu, [menu](UpgradeAction *a) {
0074         QAction *action = new QAction(a->description(), menu);
0075         connect(action, &QAction::triggered, a, &UpgradeAction::trigger);
0076         menu->addAction(action);
0077     });
0078     m_item->setContextMenu(menu);
0079     refresh();
0080 }
0081 
0082 void NotifierItem::refresh()
0083 {
0084     Q_ASSERT(m_item);
0085     m_item->setStatus(sniStatus(m_notifier.state()));
0086     m_item->setIconByName(m_notifier.iconName());
0087     m_item->setToolTipSubTitle(m_notifier.message());
0088 }
0089 
0090 void NotifierItem::setVisible(bool visible)
0091 {
0092     if (visible == m_visible)
0093         return;
0094     m_visible = visible;
0095 
0096     if (m_visible)
0097         setupNotifierItem();
0098     else
0099         delete m_item;
0100 }