[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/sysadmin/shaman
From: Dario Freddi <drf () kde ! org>
Date: 2010-01-14 17:03:59
Message-ID: 1263488639.836611.32395.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1074732 by dafre:
New reload stuff
Signed-off-by: Dario Freddi <drf@kde.org>
M +9 -0 libshaman/backends/aqpm/AqpmPlugin.cpp
M +1 -0 libshaman/backends/aqpm/AqpmPlugin.h
M +18 -1 libshaman/backends/packagekit/PKPlugin.cpp
M +2 -0 libshaman/backends/packagekit/PKPlugin.h
M +17 -46 libshaman/shamanbackend.cpp
M +0 -19 libshaman/shamanbackend.h
M +3 -1 libshaman/shamanbackend_p.h
M +0 -6 libshaman/shamanbackendinterface.cpp
M +1 -3 libshaman/shamanbackendinterface.h
M +0 -1 libshaman/shamanbase.cpp
M +6 -8 plugins/packagedetail/PackageDetailDockWidget.cpp
M +1 -1 plugins/packagedetail/PackageDetailDockWidget.h
M +0 -2 shaman/src/MainWindow.cpp
--- trunk/playground/sysadmin/shaman/libshaman/backends/aqpm/AqpmPlugin.cpp \
#1074731:1074732 @@ -156,10 +156,19 @@
// All systems are up and running, let's go!
setState(Shaman::Backend::Idling);
+ // Reload as we go
+ QTimer::singleShot(100, this, SLOT(reload()));
}
+void AqpmPlugin::onTransactionEnded()
+{
+ // Just reload
+ reload();
+}
+
void AqpmPlugin::reload()
{
+ setState(Shaman::Backend::Reloading);
QHash< QString, Shaman::AbstractPackage*> pkglist;
Shaman::PackageGroup::List grplist;
Shaman::Repository::List repolist;
--- trunk/playground/sysadmin/shaman/libshaman/backends/aqpm/AqpmPlugin.h \
#1074731:1074732 @@ -34,6 +34,7 @@
public slots:
void reload();
+ virtual void onTransactionEnded();
void updateRepositories();
--- trunk/playground/sysadmin/shaman/libshaman/backends/packagekit/PKPlugin.cpp \
#1074731:1074732 @@ -161,10 +161,13 @@
connect(backend(), SIGNAL(stateChanged(Shaman::Backend::State)), this, \
SLOT(slotStateChanged(Shaman::Backend::State)));
setState(Backend::Idling);
+ // Go and reload!
+ reload();
}
void PKPlugin::reload()
{
+ setState(Shaman::Backend::Reloading);
stopBackgroundTransactions();
setRepositories(Shaman::Repository::List());
@@ -305,14 +308,28 @@
connect(transaction, SIGNAL(finished(PackageKit::Transaction::ExitStatus,uint)), \
SLOT(reloadNextPackageGroup())); }
-void PKPlugin::partialReload(const Shaman::AbstractPackage::List& packages)
+void PKPlugin::onTransactionEnded()
{
if (!(PackageKit::Client::instance()->getActions() & \
PackageKit::Client::ActionResolve)) { // No room for partial reloading...
reload();
return;
}
+ // Reload only the interested packages
+ AbstractPackage::List toReload;
+ foreach (Shaman::AbstractPackage *package, backend()->packages()) {
+ if (package->action() != AbstractPackage::NoAction) {
+ kDebug() << package->name() << " should be reloaded";
+ toReload.append(package);
+ }
+ }
+ partialReload(toReload);
+}
+void PKPlugin::partialReload(const Shaman::AbstractPackage::List& packages)
+{
+ setState(Shaman::Backend::Reloading);
+
qDebug() << "Partial reload triggered";
QStringList packageNames;
--- trunk/playground/sysadmin/shaman/libshaman/backends/packagekit/PKPlugin.h \
#1074731:1074732 @@ -52,6 +52,8 @@
public slots:
virtual void markAdditionalTargetsForQueue(const \
Shaman::ProcessQueueOption::List &options);
+ virtual void onTransactionEnded();
+
virtual void reload();
virtual void partialReload(const Shaman::AbstractPackage::List& packages);
--- trunk/playground/sysadmin/shaman/libshaman/shamanbackend.cpp #1074731:1074732
@@ -219,6 +219,11 @@
Q_Q(Backend);
+ if (newstate == Backend::Reloading) {
+ upgradeablePackages.clear();
+ emit q->upgradeablePackagesChanged(upgradeablePackages);
+ }
+
if (state == Backend::MarkingAdditionalTargets && newstate == Backend::Idling) {
// We have all of our targets marked now. Let's cache the size for each one \
of them Shaman::AbstractPackage::List::const_iterator i;
@@ -240,25 +245,24 @@
}
}
- if (state == Backend::OnTransaction && newstate == Backend::Idling) {
+ if (state == Backend::OnTransaction) {
// Something has just ended, before changing the state, let's run the hooks
+ // Let's queue the hook run
+ runHooksWhenBackIdle = true;
+ }
+
+ if (newstate == Backend::Idling && runHooksWhenBackIdle) {
+ // Go with the hooks!
// But - first check the transaction errors: if any, skip the hooks
if (Base::instance()->core()->transactionInterface()->lastError() != \
TransactionInterface::NoError) { // In this case, skip the hooks
- // Ok, now reload the backend as well
- if (transactionType == "queue") {
- // Attempt a partial reload
- interface->partialReload(Base::instance()->core()->transactionInterface()->packages());
- } else if (transactionType == "repoupdate") {
- interface->reload();
- }
// Set the transaction state to NoTransaction to declare the end of the \
operation :)
setTransactionState(Shaman::TransactionInterface::NoTransaction);
-
- // Return: reloading functions will take care of setting the backend \
back to idle
- return;
+ state = newstate;
+ emit q->stateChanged(state);
}
+
setTransactionState(Shaman::TransactionInterface::RunningPostHooks);
CorePlugin::Hook hook = CorePlugin::NoHooks;
if (transactionType == "queue") {
@@ -301,50 +305,17 @@
}
}
- state = newstate;
+ // Now the hooks of the backend
+ interface->onTransactionEnded();
- // Ok, now reload the backend as well
- if (transactionType == "queue") {
- // Attempt a partial reload
- interface->partialReload(Base::instance()->core()->transactionInterface()->packages());
- } else if (transactionType == "repoupdate") {
- interface->reload();
- }
-
// Set the transaction state to NoTransaction to declare the end of the \
operation :) setTransactionState(Shaman::TransactionInterface::NoTransaction);
-
- // Return: reloading functions will take care of setting the backend back to \
idle
- return;
}
state = newstate;
emit q->stateChanged(state);
}
-void Backend::reload()
-{
- // Empty the upgradeable packages first
- d->upgradeablePackages.clear();
- emit upgradeablePackagesChanged(d->upgradeablePackages);
- d->setState(Reloading);
- QMetaObject::invokeMethod(d->interface, "reload", Qt::QueuedConnection);
-}
-
-void Shaman::Backend::partialReload(const Shaman::AbstractPackage::List& packages)
-{
- // Check the upgradeable packages first
- foreach (Shaman::AbstractPackage *package, packages) {
- if (d->upgradeablePackages.contains(package)) {
- d->upgradeablePackages.removeOne(package);
- }
- }
- emit upgradeablePackagesChanged(d->upgradeablePackages);
- d->setState(Reloading);
- QMetaObject::invokeMethod(d->interface, "partialReload", Qt::QueuedConnection, \
Q_ARG(Shaman::AbstractPackage::List,
-packages));
-}
-
void Shaman::BackendPrivate::setError(Shaman::Backend::Error error, const QString \
&details) {
Q_Q(Backend);
--- trunk/playground/sysadmin/shaman/libshaman/shamanbackend.h #1074731:1074732
@@ -308,25 +308,6 @@
void markAdditionalTargetsForQueue(const Shaman::ProcessQueueOption::List \
&options);
/**
- * Reloads all the information of the backend.
- *
- * \note Do not call manually inside this function, unless you know what
- * you're doing: libshaman will take care of calling it when \
appropriate
- *
- * @see setBackgroundOperation
- */
- void reload();
-
- /**
- * Reloads only a given list of packages. This is useful for partial \
reloads, where one needs
- * just to reload a part of the available info because they could have \
changed. The list of packages
- * passed as an argument can be (and should be) deleted by the backend.
- *
- * @param packges a list of packages to be reloaded
- */
- void partialReload(const Shaman::AbstractPackage::List &packages);
-
- /**
* Asks the backend to search for packages. The state will switch to \c \
Searching and the signal
* \c searchCompleted will be emitted upon completion. Call this function \
only if the shamanbackend.has
* specified in its capabilities the ability to search for packages from the \
backend
--- trunk/playground/sysadmin/shaman/libshaman/shamanbackend_p.h #1074731:1074732
@@ -26,7 +26,8 @@
error(Shaman::Backend::NoError),
capabilities(0),
properties(0),
- interface(iface)
+ interface(iface),
+ runHooksWhenBackIdle(false)
{
}
~BackendPrivate()
@@ -64,6 +65,7 @@
BackendInterface *interface;
QList<Shaman::DistUpgrade*> distUpgrades;
Shaman::ProcessQueueOption::List availablePQOptions;
+ bool runHooksWhenBackIdle;
};
class BackendCapabilities::Private
--- trunk/playground/sysadmin/shaman/libshaman/shamanbackendinterface.cpp \
#1074731:1074732 @@ -85,12 +85,6 @@
return d->manualProgressReporter;
}
-void BackendInterface::partialReload(const Shaman::AbstractPackage::List& packages)
-{
- Q_UNUSED(packages)
- reload();
-}
-
void BackendInterface::setState(Backend::State state)
{
d->backend->d->setState(state);
--- trunk/playground/sysadmin/shaman/libshaman/shamanbackendinterface.h \
#1074731:1074732 @@ -158,8 +158,6 @@
*
* @see setBackgroundOperation
*/
- virtual void reload() = 0;
-
/**
* Reloads only a given list of packages. This is useful for partial \
reloads, where one needs
* just to reload a part of the available info because they could have \
changed. The list of packages @@ -176,7 +174,7 @@
*
* @see reload
*/
- virtual void partialReload(const Shaman::AbstractPackage::List &packages);
+ virtual void onTransactionEnded() = 0;
/**
* Reimplement this function only if you specified in the backend \
capabilities \c BasicSearchFromBackendCapability
--- trunk/playground/sysadmin/shaman/libshaman/shamanbase.cpp #1074731:1074732
@@ -184,7 +184,6 @@
emit q->initCompleted();
// After doing that, happily start reloading the whole backend
// Doing this we can start the GUI earlier
- coreInterface->backend()->reload();
foreach (Shaman::Provider *provider, coreInterface->providers()) {
provider->reload();
}
--- trunk/playground/sysadmin/shaman/plugins/packagedetail/PackageDetailDockWidget.cpp \
#1074731:1074732 @@ -28,8 +28,7 @@
requiredBy(0),
conflicts(0),
providers(0),
- currentPackage(0),
- m_currentWatcher(0)
+ currentPackage(0)
{
setupUi(this);
connect(backend, SIGNAL(stateChanged(Shaman::Backend::State)),
@@ -156,9 +155,8 @@
void PackageDetailDockWidget::slotCurrentPackageChanged(Shaman::AbstractPackage \
*pkg) {
- if (m_currentWatcher) {
- m_currentWatcher->deleteLater();
- m_currentWatcher = 0;
+ if (!m_currentWatcher.isNull()) {
+ m_currentWatcher.data()->deleteLater();
}
if (! pkg) {
reset();
@@ -222,9 +220,9 @@
// Create a watcher
m_currentWatcher = new Shaman::PackageWatcher(currentPackage, this);
- connect(m_currentWatcher, \
SIGNAL(actionChanged(Shaman::AbstractPackage::Action)), \
SLOT(actionChanged()));
- connect(m_currentWatcher, SIGNAL(stateChanged(Shaman::AbstractPackage::State)), \
SLOT(stateChanged()));
- connect(m_currentWatcher, \
SIGNAL(valueCached(Shaman::AbstractPackage::CachedValue)), this, \
SLOT(reloadCurrentPackage())); + connect(m_currentWatcher.data(), \
SIGNAL(actionChanged(Shaman::AbstractPackage::Action)), SLOT(actionChanged())); + \
connect(m_currentWatcher.data(), \
SIGNAL(stateChanged(Shaman::AbstractPackage::State)), SLOT(stateChanged())); + \
connect(m_currentWatcher.data(), \
SIGNAL(valueCached(Shaman::AbstractPackage::CachedValue)), this, \
SLOT(reloadCurrentPackage()));
if (!(currentPackage->cachedValues() & Shaman::AbstractPackage::CustomValues)) {
// If it's not cached, cache them now!
currentPackage->cacheValue(Shaman::AbstractPackage::CustomValues);
--- trunk/playground/sysadmin/shaman/plugins/packagedetail/PackageDetailDockWidget.h \
#1074731:1074732 @@ -41,7 +41,7 @@
Shaman::Backend * m_backend;
QTreeWidgetItem *depends, *requiredBy, *conflicts, *providers;
Shaman::AbstractPackage *currentPackage;
- Shaman::PackageWatcher *m_currentWatcher;
+ QPointer<Shaman::PackageWatcher> m_currentWatcher;
QHash<int, QString> m_pages;
void reset();
--- trunk/playground/sysadmin/shaman/shaman/src/MainWindow.cpp #1074731:1074732
@@ -236,8 +236,6 @@
}
if (m_saved & BackendSettingsType) {
kDebug() << "Backend settings have been modified";
- // Reload the backend then
- m_shaman->core()->backend()->reload();
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic