diff --git a/libdiscover/backends/PackageKitBackend/PackageKitNotifier.h b/libdiscover/backends/PackageKitBackend/PackageKitNotifier.h --- a/libdiscover/backends/PackageKitBackend/PackageKitNotifier.h +++ b/libdiscover/backends/PackageKitBackend/PackageKitNotifier.h @@ -21,6 +21,7 @@ #define PACKAGEKITNOTIFIER_H #include +#include #include #include @@ -45,6 +46,7 @@ uint securityUpdatesCount() final; uint updatesCount() final; void recheckSystemUpdateNeeded() final; + void refreshDatabase(); private Q_SLOTS: void package(PackageKit::Transaction::Info info, const QString &packageID, const QString &summary); @@ -54,6 +56,7 @@ Update m_update; uint m_securityUpdates; uint m_normalUpdates; + QPointer m_refresher; }; #endif diff --git a/libdiscover/backends/PackageKitBackend/PackageKitNotifier.cpp b/libdiscover/backends/PackageKitBackend/PackageKitNotifier.cpp --- a/libdiscover/backends/PackageKitBackend/PackageKitNotifier.cpp +++ b/libdiscover/backends/PackageKitBackend/PackageKitNotifier.cpp @@ -30,12 +30,19 @@ , m_securityUpdates(0) , m_normalUpdates(0) { -if (PackageKit::Daemon::global()->isRunning()) { + if (PackageKit::Daemon::global()->isRunning()) { recheckSystemUpdateNeeded(); } connect(PackageKit::Daemon::global(), &PackageKit::Daemon::networkStateChanged, this, &PackageKitNotifier::recheckSystemUpdateNeeded); connect(PackageKit::Daemon::global(), &PackageKit::Daemon::updatesChanged, this, &PackageKitNotifier::recheckSystemUpdateNeeded); connect(PackageKit::Daemon::global(), &PackageKit::Daemon::isRunningChanged, this, &PackageKitNotifier::recheckSystemUpdateNeeded); + + //Check if there's packages after 5' + QTimer::singleShot(5 * 60 * 1000, this, &PackageKitNotifier::refreshDatabase); + + QTimer *dailyCheck = new QTimer(this); + dailyCheck->setInterval(24 * 60 * 60 * 1000); //refresh at least once every day + connect(dailyCheck, &QTimer::timeout, this, &PackageKitNotifier::refreshDatabase); } PackageKitNotifier::~PackageKitNotifier() @@ -106,3 +113,13 @@ return m_normalUpdates; } +void PackageKitNotifier::refreshDatabase() +{ + if (!m_refresher) { + m_refresher = PackageKit::Daemon::refreshCache(false); + connect(m_refresher.data(), &PackageKit::Transaction::finished, this, [this]() { + recheckSystemUpdateNeeded(); + delete m_refresher; + }); + } +}