[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [muon/qapt2] libmuon/ApplicationBackend: Partially port ApplicationUpdates to QApt2.
From: Jonathan Thomas <echidnaman () kubuntu ! org>
Date: 2012-09-30 18:19:25
Message-ID: 20120930181925.71971A6094 () git ! kde ! org
[Download RAW message or body]
Git commit c2feb82ce26c2a99ca83eed5cd74d264414eeadc by Jonathan Thomas.
Committed on 30/09/2012 at 20:19.
Pushed by jmthomas into branch 'qapt2'.
Partially port ApplicationUpdates to QApt2.
M +70 -46 libmuon/ApplicationBackend/ApplicationUpdates.cpp
M +14 -10 libmuon/ApplicationBackend/ApplicationUpdates.h
http://commits.kde.org/muon/c2feb82ce26c2a99ca83eed5cd74d264414eeadc
diff --git a/libmuon/ApplicationBackend/ApplicationUpdates.cpp \
b/libmuon/ApplicationBackend/ApplicationUpdates.cpp index 613d668..c7f1a97 100644
--- a/libmuon/ApplicationBackend/ApplicationUpdates.cpp
+++ b/libmuon/ApplicationBackend/ApplicationUpdates.cpp
@@ -20,25 +20,43 @@
#include "ApplicationUpdates.h"
+// Qt includes
+#include <QIcon>
+
+// KDE includes
+#include <KProtocolManager>
+
+// LibQApt includes
+#include <LibQApt/Backend>
+#include <LibQApt/Transaction>
+
+// Own includes
#include "Application.h"
#include "ApplicationBackend.h"
-#include <ChangesDialog.h>
-#include <LibQApt/Backend>
-#include <KDebug>
-#include <QIcon>
+#include "ChangesDialog.h"
ApplicationUpdates::ApplicationUpdates(ApplicationBackend* parent)
: AbstractBackendUpdater(parent)
- , m_aptBackend(0)
+ , m_aptBackend(nullptr)
, m_appBackend(parent)
+ , m_lastRealProgress(0)
, m_eta(0)
{
- connect(this, SIGNAL(updatesFinnished()), SLOT(cleanup()));
}
-void ApplicationUpdates::cleanup()
+bool ApplicationUpdates::hasUpdates() const
+{
+ return m_appBackend->updatesCount()>0;
+}
+
+qreal ApplicationUpdates::progress() const
+{
+ return m_lastRealProgress;
+}
+
+long unsigned int ApplicationUpdates::remainingTime() const
{
- disconnect(m_aptBackend);
+ return m_eta;
}
void ApplicationUpdates::setBackend(QApt::Backend* backend)
@@ -50,10 +68,14 @@ void ApplicationUpdates::setBackend(QApt::Backend* backend)
void ApplicationUpdates::start()
{
m_aptBackend->saveCacheState();
+
+ // Take the current cache state to compare for changes later
QApt::CacheState cache = m_aptBackend->currentCacheState();
m_aptBackend->markPackagesForDistUpgrade();
- QHash<QApt::Package::State, QApt::PackageList> changes = \
m_aptBackend->stateChanges(cache, QApt::PackageList()); + auto changes = \
m_aptBackend->stateChanges(cache, QApt::PackageList()); \
changes.remove(QApt::Package::ToUpgrade); +
+ // Confirm additional changes beyond upgrading the files
if(!changes.isEmpty()) {
ChangesDialog d(0, changes);
if(d.exec()==QDialog::Rejected) {
@@ -61,37 +83,28 @@ void ApplicationUpdates::start()
return;
}
}
-
- // FIXME: Transactify
- connect(m_aptBackend, SIGNAL(downloadMessage(int,QString)), \
SLOT(downloadMessage(int,QString)));
- connect(m_aptBackend, SIGNAL(downloadProgress(int,int,int)), \
SLOT(downloadProgress(int,int,int)));
- connect(m_aptBackend, SIGNAL(commitProgress(QString,int)), \
SLOT(commitProgress(QString,int)));
- //connect(m_aptBackend, SIGNAL(workerEvent(QApt::WorkerEvent)), \
SLOT(workerEvent(QApt::WorkerEvent)));
- m_aptBackend->commitChanges();
-}
-bool ApplicationUpdates::hasUpdates() const
-{
- return m_appBackend->updatesCount()>0;
+ // Create and run the transaction
+ m_trans = m_aptBackend->commitChanges();
+ setupTransaction(m_trans);
+ m_trans->run();
}
-qreal ApplicationUpdates::progress() const
+void ApplicationUpdates::progressChanged(int progress)
{
- return m_progress;
-}
+ if (progress > 100)
+ return;
-void ApplicationUpdates::commitProgress(const QString& msg, int percentage)
-{
- //NOTE: We consider half the process to download and half to install
- m_progress = .5+qreal(percentage)/200;
- emit message(QIcon(), msg);
- emit progressChanged(m_progress);
+ if (progress > m_lastRealProgress) {
+ m_lastRealProgress = progress;
+ emit progressChanged((qreal)progress);
+ }
}
-void ApplicationUpdates::downloadMessage(int flag, const QString& msg)
+void ApplicationUpdates::etaChanged(quint64 eta)
{
- Q_UNUSED(flag)
- emit message(QIcon::fromTheme("download"), msg);
+ m_eta = eta;
+ emit remainingTimeChanged();
}
void ApplicationUpdates::installMessage(const QString& msg)
@@ -99,23 +112,34 @@ void ApplicationUpdates::installMessage(const QString& msg)
emit message(QIcon(), msg);
}
-// FIXME
-//void ApplicationUpdates::workerEvent(QApt::WorkerEvent event)
-//{
-// if(event==QApt::CommitChangesFinished) {
-// emit updatesFinnished();
-// }
-//}
+void ApplicationUpdates::transactionStatusChanged(QApt::TransactionStatus status)
+{
+ if (status == QApt::FinishedStatus) {
+ emit updatesFinnished();
+ m_lastRealProgress = 0;
+ }
+}
-void ApplicationUpdates::downloadProgress(int percentage, int speed, int ETA)
+void ApplicationUpdates::errorOccurred(QApt::ErrorCode error)
{
- m_progress = qreal(percentage)/200;
- emit progressChanged(m_progress);
- m_eta = ETA;
- emit remainingTimeChanged();
+ emit errorSignal(error, m_trans->errorDetails());
}
-long unsigned int ApplicationUpdates::remainingTime() const
+void ApplicationUpdates::setupTransaction(QApt::Transaction *trans)
{
- return m_eta;
+ // Provide proxy/locale to the transaction
+ if (KProtocolManager::proxyType() == KProtocolManager::ManualProxy) {
+ trans->setProxy(KProtocolManager::proxyFor("http"));
+ }
+
+ trans->setLocale(QLatin1String(setlocale(LC_MESSAGES, 0)));
+
+ connect(m_trans, SIGNAL(statusChanged(QApt::TransactionStatus)),
+ this, SLOT(transactionStatusChanged(QApt::TransactionStatus)));
+ connect(m_trans, SIGNAL(errorOccurred(QApt::ErrorCode)),
+ this, SLOT(errorOccurred(QApt::ErrorCode)));
+ connect(m_trans, SIGNAL(progressChanged(int)),
+ this, SLOT(progressChanged(int)));
+ connect(m_trans, SIGNAL(statusDetailsChanged(QString)),
+ this, SLOT(installMessage(QString)));
}
diff --git a/libmuon/ApplicationBackend/ApplicationUpdates.h \
b/libmuon/ApplicationBackend/ApplicationUpdates.h index 22d0f8a..1accb3a 100644
--- a/libmuon/ApplicationBackend/ApplicationUpdates.h
+++ b/libmuon/ApplicationBackend/ApplicationUpdates.h
@@ -32,6 +32,7 @@
namespace QApt {
class Backend;
+ class Transaction;
}
class ApplicationBackend;
@@ -48,20 +49,23 @@ public:
void setBackend(QApt::Backend* b);
long unsigned int remainingTime() const;
-private slots:
- void commitProgress(const QString& message, int percentage);
- void downloadMessage(int flag, const QString& message);
- void installMessage(const QString& message);
- // FIXME
- //void workerEvent(QApt::WorkerEvent event);
- void downloadProgress(int percentage, int speed, int ETA);
- void cleanup();
-
private:
QApt::Backend* m_aptBackend;
+ QApt::Transaction *m_trans;
ApplicationBackend* m_appBackend;
- qreal m_progress;
+ int m_lastRealProgress;
long unsigned int m_eta;
+
+private slots:
+ void transactionStatusChanged(QApt::TransactionStatus status);
+ void errorOccurred(QApt::ErrorCode error);
+ void progressChanged(int progress);
+ void etaChanged(quint64 eta);
+ void installMessage(const QString& message);
+ void setupTransaction(QApt::Transaction *trans);
+
+signals:
+ void errorSignal(QApt::ErrorCode error, QString details);
};
#endif // APPLICATIONUPDATES_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic