Skip to content
This repository was archived by the owner on Feb 2, 2019. It is now read-only.

Packagekit1.0 #3

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions ornplugin.pro
Original file line number Diff line number Diff line change
@@ -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

Expand Down
9 changes: 8 additions & 1 deletion src/ornapplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -271,16 +274,18 @@ void OrnApplication::onPackageRemoved(const QString &packageId)
emit this->removed();
}
}

#if 0
void OrnApplication::checkDesktopFile()
{

auto desktopFile = mDesktopFile;
if (mPackageName.isEmpty() || mInstalledPackageId.isEmpty())
{
desktopFile.clear();
}
else
{
//FIXME
auto desktopFiles = PackageKit::Transaction::packageDesktopFiles(mPackageName);
for (const auto &file : desktopFiles)
{
Expand All @@ -297,4 +302,6 @@ void OrnApplication::checkDesktopFile()
mDesktopFile = desktopFile;
emit this->canBeLaunchedChanged();
}

}
#endif
23 changes: 11 additions & 12 deletions src/ornbackup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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);
}
86 changes: 40 additions & 46 deletions src/ornzypp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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)
{
Expand All @@ -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)
{
Expand All @@ -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)
Expand All @@ -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)
{
Expand All @@ -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);
Expand Down Expand Up @@ -414,37 +421,22 @@ void OrnZypp::onPackage(PackageKit::Transaction::Info info,
}
}

PackageKit::Transaction *OrnZypp::transaction()
void OrnZypp::transaction_connections(QPointer<PackageKit::Transaction> 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()
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -541,6 +534,7 @@ void OrnZypp::pInstalledApps()
}
}
}
#endif
apps << App{
name,
title,
Expand Down
8 changes: 6 additions & 2 deletions src/ornzypp.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@

#include <QObject>
#include <QSet>
#include <QPointer>

#include <PackageKit/packagekit-qt5/Transaction>
#include <PackageKit/Transaction>
#include <PackageKit/Daemon>

class QDBusPendingCallWatcher;
class QQmlEngine;
Expand Down Expand Up @@ -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<PackageKit::Transaction> transaction);
void pPrepareFetching(PackageKit::Transaction *&fetcher);
void pInstalledApps();
/// This method is one big dirty hack...
Expand Down