[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