diff --git a/ornplugin.pro b/ornplugin.pro index 229b80f..6f15172 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 libsolv +INCLUDEPATH+= /usr/include/packagekitqt5/ uri = harbour.orn 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/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 642556c..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() @@ -501,6 +493,7 @@ void OrnZypp::pInstalledApps() auto title = name; QString icon; +#if 0 auto desktopFiles = PackageKit::Transaction::packageDesktopFiles(name); qDebug() << "Adding installed package" << name; @@ -541,6 +534,7 @@ void OrnZypp::pInstalledApps() } } } +#endif apps << App{ name, title, diff --git a/src/ornzypp.h b/src/ornzypp.h index a9fe06a..b39f34b 100644 --- a/src/ornzypp.h +++ b/src/ornzypp.h @@ -3,8 +3,10 @@ #include #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...