[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bmuon=5D_/=3A_Use_the_new_saveDownloadList_and_downl?=
From:       Jonathan Thomas <echidnaman () kubuntu ! org>
Date:       2011-01-31 23:45:09
Message-ID: 20110131234509.27ABAA609B () git ! kde ! org
[Download RAW message or body]

Git commit 502ad03cdf625e1ff03579c382b8d68d9ccf63dd by Jonathan Thomas.
Pushed by jmthomas into branch 'master'.

Use the new saveDownloadList and downloadArchives to create a user interface for \
downloading packages from a list. Users without internet access can use this \
functionality to create a list of packages they want downloaded, take it to another \
computer, download them with Muon's download archives feature, and then take the USB \
stick back to their computer where they can add the packages to the package cache.

M  +43   -2    libmuon/MuonMainWindow.cpp     
M  +2    -0    libmuon/MuonMainWindow.h     
M  +30   -1    muon/MainWindow.cpp     
M  +3    -0    muon/MainWindow.h     
M  +2    -0    muon/muonui.rc     
M  +27   -1    updater/UpdaterWindow.cpp     
M  +3    -0    updater/UpdaterWindow.h     
M  +2    -0    updater/muon-updaterui.rc     

http://commits.kde.org/muon/502ad03cdf625e1ff03579c382b8d68d9ccf63dd

diff --git a/libmuon/MuonMainWindow.cpp b/libmuon/MuonMainWindow.cpp
index c92fd7f..9ee4e08 100644
--- a/libmuon/MuonMainWindow.cpp
+++ b/libmuon/MuonMainWindow.cpp
@@ -187,6 +187,7 @@ void MuonMainWindow::workerEvent(QApt::WorkerEvent event)
         m_canExit = false;
         break;
     case QApt::CacheUpdateFinished:
+    case QApt::PackageDownloadFinished:
     case QApt::CommitChangesFinished:
         Solid::PowerManagement::stopSuppressingSleep(m_powerInhibitor);
         m_canExit = true;
@@ -280,10 +281,11 @@ void MuonMainWindow::errorOccurred(QApt::ErrorCode code, const \
QVariantMap &args  case QApt::UserCancelError:
     case QApt::UnknownError:
     default:
-        setActionsEnabled();
-        m_canExit = true; // If we were committing changes, we aren't anymore
         break;
     }
+
+    setActionsEnabled();
+    m_canExit = true; // If we were committing changes, we aren't anymore
 }
 
 void MuonMainWindow::warningOccurred(QApt::WarningCode warning, const QVariantMap \
&args) @@ -445,6 +447,45 @@ bool MuonMainWindow::saveInstalledPackagesList()
     return true;
 }
 
+bool MuonMainWindow::createDownloadList()
+{
+    QString filename;
+    filename = KFileDialog::getSaveFileName(QString(), QString(), this,
+                                            i18nc("@title:window", "Save Download \
List As")); +
+    if (filename.isEmpty()) {
+        return false;
+    }
+
+    if (!m_backend->saveDownloadList(filename)) {
+        QString text = i18nc("@label", "The document could not be saved, as it "
+                             "was not possible to write to "
+                             "<filename>%1</filename>\n\nCheck "
+                             "that you have write access to this file "
+                             "or that enough disk space is available.",
+                             filename);
+        KMessageBox::error(this, text, QString());
+        return false;
+    }
+
+    return true;
+}
+
+void MuonMainWindow::downloadPackagesFromList()
+{
+    QString filename = KFileDialog::getOpenFileName(QString(), QString(),
+                                                    this, i18nc("@title:window", \
"Open File")); +
+    if (filename.isEmpty()) {
+        return;
+    }
+
+    QString dirName = filename.left(filename.lastIndexOf('/'));
+
+    setActionsEnabled(false);
+    m_backend->downloadArchives(filename, dirName % QLatin1String("/packages"));
+}
+
 void MuonMainWindow::loadSelections()
 {
     QString filename = KFileDialog::getOpenFileName(QString(), QString(),
diff --git a/libmuon/MuonMainWindow.h b/libmuon/MuonMainWindow.h
index 9063044..3be6c3f 100644
--- a/libmuon/MuonMainWindow.h
+++ b/libmuon/MuonMainWindow.h
@@ -90,6 +90,8 @@ protected Q_SLOTS:
     bool saveSelections();
     bool saveInstalledPackagesList();
     void loadSelections();
+    bool createDownloadList();
+    void downloadPackagesFromList();
     void loadArchives();
     void undo();
     void redo();
diff --git a/muon/MainWindow.cpp b/muon/MainWindow.cpp
index cde1451..8fc1111 100644
--- a/muon/MainWindow.cpp
+++ b/muon/MainWindow.cpp
@@ -161,6 +161,20 @@ void MainWindow::setupActions()
     m_saveSelectionsAction->setText(i18nc("@action", "Save Markings As..."));
     connect(m_saveSelectionsAction, SIGNAL(triggered()), this, \
SLOT(saveSelections()));  
+    m_createDownloadListAction = \
actionCollection()->addAction("save_download_list"); +    \
m_createDownloadListAction->setIcon(KIcon("document-save-as")); +    \
m_createDownloadListAction->setText(i18nc("@action", "Save Package Download \
List...")); +    connect(m_createDownloadListAction, SIGNAL(triggered()), this, \
SLOT(createDownloadList())); +
+    m_downloadListAction = actionCollection()->addAction("download_from_list");
+    m_downloadListAction->setIcon(KIcon("download"));
+    m_downloadListAction->setText(i18nc("@action", "Download Packages From \
List...")); +    connect(m_downloadListAction, SIGNAL(triggered()), this, \
SLOT(downloadPackagesFromList())); +    if (!isConnected()) {
+        m_downloadListAction->setDisabled(false);
+    }
+    connect(this, SIGNAL(shouldConnect(bool)), m_downloadListAction, \
SLOT(setEnabled(bool))); +
     m_loadArchivesAction = actionCollection()->addAction("load_archives");
     m_loadArchivesAction->setIcon(KIcon("document-open"));
     m_loadArchivesAction->setText(i18nc("@action", "Add Downloaded Packages"));
@@ -259,10 +273,17 @@ void MainWindow::markAutoRemove()
 void MainWindow::checkForUpdates()
 {
     setActionsEnabled(false);
+    m_managerWidget->setEnabled(false);
     initDownloadWidget();
     m_backend->updateCache();
 }
 
+void MainWindow::downloadPackagesFromList()
+{
+    initDownloadWidget();
+    MuonMainWindow::downloadPackagesFromList();
+}
+
 void MainWindow::errorOccurred(QApt::ErrorCode error, const QVariantMap &details)
 {
     Q_UNUSED(details);
@@ -271,6 +292,7 @@ void MainWindow::errorOccurred(QApt::ErrorCode error, const \
QVariantMap &details  
     switch(error) {
     case QApt::UserCancelError:
+        m_managerWidget->setEnabled(true);
         QApplication::restoreOverrideCursor();
         returnFromPreview();
         break;
@@ -294,6 +316,7 @@ void MainWindow::workerEvent(QApt::WorkerEvent event)
     case QApt::CacheUpdateFinished:
     case QApt::CommitChangesFinished:
         reload();
+    case QApt::PackageDownloadFinished:
         returnFromPreview();
         if (m_warningStack.size() > 0) {
             showQueuedWarnings();
@@ -303,6 +326,9 @@ void MainWindow::workerEvent(QApt::WorkerEvent event)
             showQueuedErrors();
             m_errorStack.clear();
         }
+
+        m_downloadWidget->deleteLater();
+        m_downloadWidget = 0;
         break;
     case QApt::PackageDownloadStarted:
         if (m_downloadWidget) {
@@ -330,7 +356,6 @@ void MainWindow::workerEvent(QApt::WorkerEvent event)
                    m_statusWidget, SLOT(updateXapianProgress(int)));
         m_statusWidget->hideXapianProgress();
         break;
-    case QApt::PackageDownloadFinished:
     case QApt::InvalidEvent:
     default:
         break;
@@ -372,6 +397,7 @@ void MainWindow::returnFromPreview()
 void MainWindow::startCommit()
 {
     setActionsEnabled(false);
+    m_managerWidget->setEnabled(false);
     QApplication::setOverrideCursor(Qt::WaitCursor);
     initDownloadWidget();
     initCommitWidget();
@@ -412,6 +438,7 @@ void MainWindow::reload()
 
     m_statusWidget->updateStatus();
     setActionsEnabled();
+    m_managerWidget->setEnabled(true);
 
     // No need to keep these around in memory.
     if (m_downloadWidget) {
@@ -451,8 +478,10 @@ void MainWindow::setActionsEnabled(bool enabled)
 
     if (isConnected()) {
         m_applyAction->setEnabled(changesPending);
+        m_downloadListAction->setEnabled(true);
     } else {
         m_applyAction->setEnabled(false);
+        m_downloadListAction->setEnabled(false);
     }
 
     m_undoAction->setEnabled(!m_backend->isUndoStackEmpty());
diff --git a/muon/MainWindow.h b/muon/MainWindow.h
index fc25714..c77f461 100644
--- a/muon/MainWindow.h
+++ b/muon/MainWindow.h
@@ -69,6 +69,8 @@ private:
     KAction *m_saveInstalledAction;
     KAction *m_saveSelectionsAction;
     KAction *m_loadSelectionsAction;
+    KAction *m_createDownloadListAction;
+    KAction *m_downloadListAction;
     KAction *m_loadArchivesAction;
 
     ManagerSettingsDialog *m_settingsDialog;
@@ -91,6 +93,7 @@ private Q_SLOTS:
     void markDistUpgrade();
     void markAutoRemove();
     void checkForUpdates();
+    void downloadPackagesFromList();
     void workerEvent(QApt::WorkerEvent event);
     void errorOccurred(QApt::ErrorCode error, const QVariantMap &details);
     void previewChanges();
diff --git a/muon/muonui.rc b/muon/muonui.rc
index 3d6e0f7..e33a974 100644
--- a/muon/muonui.rc
+++ b/muon/muonui.rc
@@ -12,6 +12,8 @@
             <Action name="save_markings" />
             <Action name="save_package_list" />
             <Separator/>
+            <Action name="save_download_list" />
+            <Action name="download_from_list" />
             <Action name="load_archives" />
             <Separator/>
             <Action name="quit" />
diff --git a/updater/UpdaterWindow.cpp b/updater/UpdaterWindow.cpp
index 8675d1e..c4f498a 100644
--- a/updater/UpdaterWindow.cpp
+++ b/updater/UpdaterWindow.cpp
@@ -90,6 +90,20 @@ void UpdaterWindow::setupActions()
 {
     MuonMainWindow::setupActions();
 
+    m_createDownloadListAction = \
actionCollection()->addAction("save_download_list"); +    \
m_createDownloadListAction->setIcon(KIcon("document-save-as")); +    \
m_createDownloadListAction->setText(i18nc("@action", "Save Package Download \
List...")); +    connect(m_createDownloadListAction, SIGNAL(triggered()), this, \
SLOT(createDownloadList())); +
+    m_downloadListAction = actionCollection()->addAction("download_from_list");
+    m_downloadListAction->setIcon(KIcon("download"));
+    m_downloadListAction->setText(i18nc("@action", "Download Packages From \
List...")); +    connect(m_downloadListAction, SIGNAL(triggered()), this, \
SLOT(downloadPackagesFromList())); +    if (!isConnected()) {
+        m_downloadListAction->setDisabled(false);
+    }
+    connect(this, SIGNAL(shouldConnect(bool)), m_downloadListAction, \
SLOT(setEnabled(bool))); +
     m_loadArchivesAction = actionCollection()->addAction("load_archives");
     m_loadArchivesAction->setIcon(KIcon("document-open"));
     m_loadArchivesAction->setText(i18nc("@action", "Add Downloaded Packages"));
@@ -117,10 +131,17 @@ void UpdaterWindow::setupActions()
 void UpdaterWindow::checkForUpdates()
 {
     setActionsEnabled(false);
+    m_updaterWidget->setEnabled(false);
     initDownloadWidget();
     m_backend->updateCache();
 }
 
+void UpdaterWindow::downloadPackagesFromList()
+{
+    initDownloadWidget();
+    MuonMainWindow::downloadPackagesFromList();
+}
+
 void UpdaterWindow::workerEvent(QApt::WorkerEvent event)
 {
     MuonMainWindow::workerEvent(event);
@@ -136,6 +157,7 @@ void UpdaterWindow::workerEvent(QApt::WorkerEvent event)
     case QApt::CacheUpdateFinished:
     case QApt::CommitChangesFinished:
         reload();
+    case QApt::PackageDownloadFinished:
         returnFromPreview();
         if (m_warningStack.size() > 0) {
             showQueuedWarnings();
@@ -161,7 +183,6 @@ void UpdaterWindow::workerEvent(QApt::WorkerEvent event)
         }
         QApplication::restoreOverrideCursor();
         break;
-    case QApt::PackageDownloadFinished:
     case QApt::InvalidEvent:
     default:
         break;
@@ -174,6 +195,7 @@ void UpdaterWindow::errorOccurred(QApt::ErrorCode error, const \
QVariantMap &args  
     switch(error) {
     case QApt::UserCancelError:
+        m_updaterWidget->setEnabled(true);
         QApplication::restoreOverrideCursor();
         returnFromPreview();
         break;
@@ -207,6 +229,7 @@ void UpdaterWindow::initCommitWidget()
 void UpdaterWindow::startCommit()
 {
     setActionsEnabled(false);
+    m_updaterWidget->setEnabled(false);
     QApplication::setOverrideCursor(Qt::WaitCursor);
     initDownloadWidget();
     initCommitWidget();
@@ -219,6 +242,7 @@ void UpdaterWindow::reload()
     m_updaterWidget->reload();
     m_statusWidget->updateStatus();
     setActionsEnabled();
+    m_updaterWidget->setEnabled(true);
 
     // No need to keep these around in memory.
     if (m_downloadWidget) {
@@ -253,8 +277,10 @@ void UpdaterWindow::setActionsEnabled(bool enabled)
 
     if (isConnected()) {
         m_applyAction->setEnabled(m_backend->areChangesMarked());
+        m_downloadListAction->setEnabled(true);
     } else {
         m_applyAction->setEnabled(false);
+        m_downloadListAction->setEnabled(false);
     }
 
     m_undoAction->setEnabled(!m_backend->isUndoStackEmpty());
diff --git a/updater/UpdaterWindow.h b/updater/UpdaterWindow.h
index 1a6ddca..a86218e 100644
--- a/updater/UpdaterWindow.h
+++ b/updater/UpdaterWindow.h
@@ -51,6 +51,8 @@ private:
     UpdaterWidget *m_updaterWidget;
 
     KAction *m_applyAction;
+    KAction *m_createDownloadListAction;
+    KAction *m_downloadListAction;
     KAction *m_loadArchivesAction;
 
     UpdaterSettingsDialog *m_settingsDialog;
@@ -64,6 +66,7 @@ private Q_SLOTS:
     void initObject();
     void setupActions();
     void checkForUpdates();
+    void downloadPackagesFromList();
     void workerEvent(QApt::WorkerEvent event);
     void errorOccurred(QApt::ErrorCode code, const QVariantMap &args);
     void initDownloadWidget();
diff --git a/updater/muon-updaterui.rc b/updater/muon-updaterui.rc
index 28b26e8..ea96212 100644
--- a/updater/muon-updaterui.rc
+++ b/updater/muon-updaterui.rc
@@ -8,6 +8,8 @@
     <MenuBar>
         <Menu name="file" >
             <Separator/>
+            <Action name="save_download_list" />
+            <Action name="download_from_list" />
             <Action name="load_archives" />
             <Separator/>
             <Action name="quit" />


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic