From kde-commits Mon Jan 31 23:45:09 2011 From: Jonathan Thomas Date: Mon, 31 Jan 2011 23:45:09 +0000 To: kde-commits Subject: =?utf-8?q?=5Bmuon=5D_/=3A_Use_the_new_saveDownloadList_and_downl?= Message-Id: <20110131234509.27ABAA609B () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129651755906759 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 " + "%1\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 @@ + + 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 @@ + +