From 310cb3a223cea11433cc3dd4800d4908c502d167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= Date: Sun, 11 Feb 2018 22:01:36 +0100 Subject: [PATCH 1/4] link packagekit via pkconfig and add pkconfig to include path. For some reason pkgconfig returns the wrong include path so I added the include path direct. --- ornplugin.pro | 6 ++++-- src/ornzypp.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ornplugin.pro b/ornplugin.pro index 229b80f..5a52681 100644 --- a/ornplugin.pro +++ b/ornplugin.pro @@ -1,11 +1,13 @@ TEMPLATE = lib TARGET = ornplugin QT += qml quick -CONFIG += qt plugin static c++11 + +CONFIG += qt plugin static c++11 link_pkgconfig CONFIG(release, debug|release): DEFINES += QT_NO_DEBUG_OUTPUT VERSION = 0.1 - TARGET = $$qtLibraryTarget($$TARGET) +PKGCONFIG+= packagekitqt5 +INCLUDEPATH+= /usr/include/packagekitqt5/ uri = harbour.orn diff --git a/src/ornzypp.h b/src/ornzypp.h index a9fe06a..8030f77 100644 --- a/src/ornzypp.h +++ b/src/ornzypp.h @@ -4,7 +4,7 @@ #include #include -#include +#include class QDBusPendingCallWatcher; class QQmlEngine; From ba3eba31f32fa99dd3b2ca3c28331cb8ebba7a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= Date: Wed, 14 Feb 2018 19:00:44 +0100 Subject: [PATCH 2/4] added libsolv as dependency via pkg-config --- ornplugin.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ornplugin.pro b/ornplugin.pro index 5a52681..6f15172 100644 --- a/ornplugin.pro +++ b/ornplugin.pro @@ -6,7 +6,7 @@ CONFIG += qt plugin static c++11 link_pkgconfig CONFIG(release, debug|release): DEFINES += QT_NO_DEBUG_OUTPUT VERSION = 0.1 TARGET = $$qtLibraryTarget($$TARGET) -PKGCONFIG+= packagekitqt5 +PKGCONFIG+= packagekitqt5 libsolv INCLUDEPATH+= /usr/include/packagekitqt5/ uri = harbour.orn From 749e5d90b9d490667bcc6657f2458b71620a096c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= Date: Wed, 14 Feb 2018 18:54:29 +0100 Subject: [PATCH 3/4] disabled retrieving of desktop files until I find a fix --- src/ornapplication.cpp | 9 ++++++++- src/ornzypp.cpp | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ornapplication.cpp b/src/ornapplication.cpp index ab6dff9..87b72b3 100644 --- a/src/ornapplication.cpp +++ b/src/ornapplication.cpp @@ -253,7 +253,10 @@ void OrnApplication::onInstalledPackagesChanged() mInstalledPackageId.clear(); emit this->installedVersionChanged(); } +#if 0 + #FIXME disabled for now this->checkDesktopFile(); +#endif } void OrnApplication::onPackageInstalled(const QString &packageId) @@ -271,9 +274,10 @@ void OrnApplication::onPackageRemoved(const QString &packageId) emit this->removed(); } } - +#if 0 void OrnApplication::checkDesktopFile() { + auto desktopFile = mDesktopFile; if (mPackageName.isEmpty() || mInstalledPackageId.isEmpty()) { @@ -281,6 +285,7 @@ void OrnApplication::checkDesktopFile() } else { + //FIXME auto desktopFiles = PackageKit::Transaction::packageDesktopFiles(mPackageName); for (const auto &file : desktopFiles) { @@ -297,4 +302,6 @@ void OrnApplication::checkDesktopFile() mDesktopFile = desktopFile; emit this->canBeLaunchedChanged(); } + } +#endif diff --git a/src/ornzypp.cpp b/src/ornzypp.cpp index 642556c..9d36a3e 100644 --- a/src/ornzypp.cpp +++ b/src/ornzypp.cpp @@ -501,6 +501,7 @@ void OrnZypp::pInstalledApps() auto title = name; QString icon; +#if 0 auto desktopFiles = PackageKit::Transaction::packageDesktopFiles(name); qDebug() << "Adding installed package" << name; @@ -541,6 +542,7 @@ void OrnZypp::pInstalledApps() } } } +#endif apps << App{ name, title, From 6f05fc5aba3243f2724b5497ef23f47ef16cfad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= Date: Thu, 15 Feb 2018 13:30:53 +0100 Subject: [PATCH 4/4] port to packagekit1.0 (>= 0.9) No longer create transactions ourself. Instead call the daemon with the requested action. --- src/ornbackup.cpp | 23 +++++++------ src/ornzypp.cpp | 84 +++++++++++++++++++++-------------------------- src/ornzypp.h | 6 +++- 3 files changed, 54 insertions(+), 59 deletions(-) diff --git a/src/ornbackup.cpp b/src/ornbackup.cpp index d7323cb..c526236 100644 --- a/src/ornbackup.cpp +++ b/src/ornbackup.cpp @@ -123,26 +123,27 @@ void OrnBackup::pSearchPackages() mPackagesToInstall.clear(); mSearchIndex = 0; - auto t = new PackageKit::Transaction(); + auto t = PackageKit::Daemon::searchNames(mNamesToSearch[mSearchIndex]); connect(t, &PackageKit::Transaction::errorCode, mZypp, &OrnZypp::pkError); connect(t, &PackageKit::Transaction::package, this, &OrnBackup::pAddPackage); // It seems that the PackageKit::Transaction::searchNames(QStringList, ...) // does searches only for the first name so we use this hack connect(t, &PackageKit::Transaction::finished, [this, t]() { - ++mSearchIndex; + /* ++mSearchIndex; if (mSearchIndex < mNamesToSearch.size()) { - t->reset(); - t->searchNames(mNamesToSearch[mSearchIndex]); + delete t; + auto t = PackageKit::Daemon::searchNames(mNamesToSearch[mSearchIndex]); } else { - t->deleteLater(); - this->pInstallPackages(); - } + */ + + t->deleteLater(); + this->pInstallPackages(); + }); - t->searchNames(mNamesToSearch[mSearchIndex]); } void OrnBackup::pAddPackage(int info, const QString &packageId, const QString &summary) @@ -200,9 +201,8 @@ void OrnBackup::pInstallPackages() } else { - auto t = mZypp->transaction(); + auto t = PackageKit::Daemon::installPackages(ids); connect(t, &PackageKit::Transaction::finished, this, &OrnBackup::pFinishRestore); - t->installPackages(ids); } } @@ -307,9 +307,8 @@ void OrnBackup::pRefreshRepos() { qDebug() << "Refreshing repos"; this->setStatus(RefreshingRepos); - auto t = new PackageKit::Transaction(); + auto t = PackageKit::Daemon::refreshCache(false); connect(t, &PackageKit::Transaction::finished, t, &PackageKit::Transaction::deleteLater); connect(t, &PackageKit::Transaction::errorCode, mZypp, &OrnZypp::pkError); connect(t, &PackageKit::Transaction::finished, this, &OrnBackup::pSearchPackages); - t->refreshCache(false); } diff --git a/src/ornzypp.cpp b/src/ornzypp.cpp index 9d36a3e..bc36034 100644 --- a/src/ornzypp.cpp +++ b/src/ornzypp.cpp @@ -220,59 +220,68 @@ void OrnZypp::enableRepos(bool enable) void OrnZypp::refreshRepos(bool force) { - auto t = transaction(); + auto t = PackageKit::Daemon::refreshCache(force); qDebug() << "Refreshing repos with" << t << "method refreshCache()"; - t->refreshCache(force); } void OrnZypp::refreshRepo(const QString &alias, bool force) { - auto t = transaction(); + auto t = PackageKit::Daemon::repoSetData(alias, QStringLiteral("refresh-now"), + force ? QStringLiteral("true") : + QStringLiteral("false")); qDebug() << "Refreshing repo" << alias << "with" << t << "method repoSetData()"; - t->repoSetData(alias, QStringLiteral("refresh-now"), - force ? QStringLiteral("true") : QStringLiteral("false")); } void OrnZypp::getAvailablePackages() -{ - this->pPrepareFetching(mAvailableFetcher); +{; qDebug() << "Getting all available packages with" << mAvailableFetcher << "method getPackages(FilterSupported)"; + + mAvailableFetcher = PackageKit::Daemon::getPackages(PackageKit::Transaction::FilterSupported); connect(mAvailableFetcher, &PackageKit::Transaction::finished, [this] { this->mAvailableFetcher = 0; emit this->availablePackagesChanged(); }); mAvailablePackages.clear(); - mAvailableFetcher->getPackages(PackageKit::Transaction::FilterSupported); } void OrnZypp::getInstalledPackages() { - this->pPrepareFetching(mInstalledFetcher); qDebug() << "Getting all installed packages with" << mInstalledFetcher << "method getPackages(FilterInstalled)"; + + + mInstalledFetcher = PackageKit::Daemon::getPackages(PackageKit::Transaction::FilterInstalled); + + transaction_connections(mInstalledFetcher); + connect(mInstalledFetcher, &PackageKit::Transaction::finished, [this] { this->mInstalledFetcher = 0; emit this->installedPackagesChanged(); }); mInstalledPackages.clear(); - mInstalledFetcher->getPackages(PackageKit::Transaction::FilterInstalled); + } + void OrnZypp::getUpdates() { - this->pPrepareFetching(mUpdatesFetcher); qDebug() << "Getting all updates with" << mUpdatesFetcher << "method getUpdates()"; + mUpdatesFetcher = PackageKit::Daemon::getUpdates(); + + transaction_connections(mInstalledFetcher); + connect(mUpdatesFetcher, &PackageKit::Transaction::finished, [this] - { - this->mUpdatesFetcher = 0; - emit this->updatesChanged(); - }); + { + this->mUpdatesFetcher = 0; + emit this->updatesChanged(); + }); + mUpdates.clear(); - mUpdatesFetcher->getUpdates(); + } void OrnZypp::getAllPackages() @@ -284,7 +293,8 @@ void OrnZypp::getAllPackages() void OrnZypp::installPackage(const QString &packageId) { - auto t = transaction(); + auto t = PackageKit::Daemon::installPackage(packageId); + connect(t, &PackageKit::Transaction::finished, [this, packageId](PackageKit::Transaction::Exit status, uint runtime) { @@ -303,12 +313,11 @@ void OrnZypp::installPackage(const QString &packageId) emit this->packageInstalled(packageId); }); qDebug() << "Installing package" << packageId << "with" << t << "method installPackage()"; - t->installPackage(packageId); } void OrnZypp::removePackage(const QString &packageId) { - auto t = transaction(); + auto t = PackageKit::Daemon::removePackage(packageId); connect(t, &PackageKit::Transaction::finished, [this, packageId](PackageKit::Transaction::Exit status, uint runtime) { @@ -325,15 +334,12 @@ void OrnZypp::removePackage(const QString &packageId) emit this->packageRemoved(packageId); }); qDebug() << "Removing package" << packageId << "with" << t << "method removePackage()"; - t->removePackage(packageId); } void OrnZypp::updateAll() { - PackageKit::Transaction *t = 0; - this->pPrepareFetching(t); + PackageKit::Transaction *t = PackageKit::Daemon::updatePackages(mUpdates.values()); connect(t, &PackageKit::Transaction::finished, this, &OrnZypp::getAllPackages); - t->updatePackages(mUpdates.values()); } void OrnZypp::onRepoModified(const QString &alias, const RepoAction &action) @@ -343,7 +349,9 @@ void OrnZypp::onRepoModified(const QString &alias, const RepoAction &action) case AddRepo: case EnableRepo: { - auto t = transaction(); + auto t = PackageKit::Daemon::repoSetData(alias, + QStringLiteral("refresh-now"), + QStringLiteral("true")); connect(t, &PackageKit::Transaction::finished, [this, alias](PackageKit::Transaction::Exit status, uint runtime) { @@ -356,7 +364,6 @@ void OrnZypp::onRepoModified(const QString &alias, const RepoAction &action) this->getAllPackages(); }); qDebug() << "Refreshing repo" << alias << "with" << t << "method repoSetData()"; - t->repoSetData(alias, QStringLiteral("refresh-now"), QStringLiteral("true")); } case DisableRepo: this->pFetchRepoPackages(alias); @@ -414,37 +421,22 @@ void OrnZypp::onPackage(PackageKit::Transaction::Info info, } } -PackageKit::Transaction *OrnZypp::transaction() +void OrnZypp::transaction_connections(QPointer transaction) { - auto t = new PackageKit::Transaction(); - connect(t, &PackageKit::Transaction::finished, t, &PackageKit::Transaction::deleteLater); - connect(t, &PackageKit::Transaction::errorCode, this, &OrnZypp::pkError); + connect(transaction, &PackageKit::Transaction::finished, transaction, &PackageKit::Transaction::deleteLater); + connect(transaction, &PackageKit::Transaction::errorCode, this, &OrnZypp::pkError); #ifdef QT_DEBUG - connect(t, &PackageKit::Transaction::finished, + connect(transaction, &PackageKit::Transaction::finished, [t](PackageKit::Transaction::Exit status, uint runtime) { qDebug() << t << "finished in" << runtime << "msec" << "with status" << status; }); - connect(t, &PackageKit::Transaction::errorCode, + connect(transaction, &PackageKit::Transaction::errorCode, [t](PackageKit::Transaction::Error error, const QString &details) { - qDebug() << "An error occured while running" << t << ":" << error << "-" << details; + qDebug() << "An error occured while running" << transaction << ":" << error << "-" << details; }); #endif - return t; -} - -void OrnZypp::pPrepareFetching(PackageKit::Transaction *&fetcher) -{ - if (fetcher) - { - qWarning() << "OrnZypp is already fetching packages - canceling"; - fetcher->cancel(); - fetcher->deleteLater(); - fetcher = 0; - } - fetcher = transaction(); - connect(fetcher, &PackageKit::Transaction::package, this, &OrnZypp::onPackage); } void OrnZypp::pInstalledApps() diff --git a/src/ornzypp.h b/src/ornzypp.h index 8030f77..b39f34b 100644 --- a/src/ornzypp.h +++ b/src/ornzypp.h @@ -3,8 +3,10 @@ #include #include +#include #include +#include class QDBusPendingCallWatcher; class QQmlEngine; @@ -143,8 +145,10 @@ private slots: const QString &packageId, const QString &summary); + void addPackageToUpdate(PackageKit::Transaction::Info, const QString& pkgid, const QString& summary); + private: - PackageKit::Transaction *transaction(); + void transaction_connections(QPointer transaction); void pPrepareFetching(PackageKit::Transaction *&fetcher); void pInstalledApps(); /// This method is one big dirty hack...