Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added option to stop and resume download #732

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/app/downloadmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,14 @@ void DownloadManager::cancel()
}
}

void DownloadManager::stopDownload()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This basically duplicates DownloadManager::cancel()

{
if (m_current) {
m_current->deleteLater();
mDebug() << this->metaObject()->className() << "Stopping";
}
}

bool DownloadManager::isDownloaded(const QUrl &url) const
{
const QString filePath = QString("%1/%2").arg(DownloadManager::dir()).arg(url.fileName());
Expand Down
1 change: 1 addition & 0 deletions src/app/downloadmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ class DownloadManager : public QObject, public DownloadReceiver
QNetworkReply *tryAnotherMirror();

Q_INVOKABLE void cancel();
Q_INVOKABLE void stopDownload();
Q_INVOKABLE bool isDownloaded(const QUrl &url) const;

// DownloadReceiver interface
Expand Down
54 changes: 46 additions & 8 deletions src/app/qml/DownloadPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ Page {
qsTr("Preparing %1").arg(file)
else if (currentStatus === Units.DownloadStatus.Ready)
qsTr("Ready to write %1").arg(file)
else if (currentStatus === Units.DownloadStatus.Stopped)
qsTr("%1 has been stopped").arg(file)
else if (currentStatus == Units.DownloadStatus.Failed_Download)
qsTr("Failed to download %1").arg(file)
else
Expand Down Expand Up @@ -78,12 +80,12 @@ Page {
}

QQC2.Label {
visible: currentStatus == Units.DownloadStatus.Downloading
visible: currentStatus == Units.DownloadStatus.Downloading || currentStatus == Units.DownloadStatus.Stopped
text: downloadPage.leftStr
}

QQC2.Label {
visible: currentStatus == Units.DownloadStatus.Downloading
visible: currentStatus == Units.DownloadStatus.Downloading || currentStatus == Units.DownloadStatus.Stopped
text: downloadPage.rightStr
}
}
Expand Down Expand Up @@ -135,6 +137,14 @@ Page {
wrapMode: QQC2.Label.Wrap
}

QQC2.Label {
id: messageContinueDownload
visible: currentStatus === Units.DownloadStatus.Stopped
text: qsTr("Download has been stopped.")
wrapMode: Label.Wrap
width: mainColumn.width
}

QQC2.Label {
id: messageSelectedImage
visible: releases.selected.isLocal
Expand Down Expand Up @@ -228,19 +238,37 @@ Page {
releases.variant
}
}
},
State {
name: "stopped"
when: currentStatus === Units.DownloadStatus.Stopped
PropertyChanges {
target: progressBar;
value: releases.variant.progress.ratio
}
PropertyChanges {
target: messageContinueDownload;
visible: true
}
}
]

// There will be only [Finish] button on the right side so [Cancel] button
// is not necessary
previousButtonVisible: currentStatus != Units.DownloadStatus.Finished
previousButtonText: qsTr("Cancel")
previousButtonText: {
if (releases.variant.status === Units.DownloadStatus.Downloading)
return qsTr("Pause")
else
return qsTr("Cancel")
}
onPreviousButtonClicked: {
if (releases.variant.status === Units.DownloadStatus.Write_Verifying ||
releases.variant.status === Units.DownloadStatus.Writing ||
releases.variant.status === Units.DownloadStatus.Downloading ||
releases.variant.status === Units.DownloadStatus.Stopped ||
releases.variant.status === Units.DownloadStatus.Download_Verifying) {
cancelDialog.show()
} else if (releases.variant.status === Units.DownloadStatus.Downloading) {
downloadManager.stopDownload()
releases.variant.setStatus(Units.DownloadStatus.Stopped)
} else {
releases.variant.resetStatus()
downloadManager.cancel()
Expand All @@ -249,7 +277,9 @@ Page {
}

nextButtonVisible: {
if (currentStatus == Units.DownloadStatus.Finished)
// This will be [Finish] or [Resume] button to finish download or resume download
if (currentStatus == Units.DownloadStatus.Finished ||
currentStatus == Units.DownloadStatus.Stopped)
return true
// This will be [Retry] button to start the process again if there is a drive plugged in
else if (currentStatus == Units.DownloadStatus.Ready ||
Expand All @@ -260,14 +290,15 @@ Page {
return false
}
nextButtonText: {

if (releases.variant.status === Units.DownloadStatus.Write_Verifying ||
releases.variant.status === Units.DownloadStatus.Writing ||
releases.variant.status === Units.DownloadStatus.Downloading ||
releases.variant.status === Units.DownloadStatus.Download_Verifying)
return qsTr("Cancel")
else if (releases.variant.status == Units.DownloadStatus.Ready)
return qsTr("Write")
else if (releases.variant.status === Units.DownloadStatus.Stopped)
return qsTr("Resume")
else if (releases.variant.status === Units.DownloadStatus.Finished)
return qsTr("Finish")
else
Expand All @@ -288,6 +319,13 @@ Page {
releases.variant.download()
drives.selected.setImage(releases.variant)
drives.selected.write(releases.variant)
} else if (releases.variant.status === Units.DownloadStatus.Stopped) {
if (selectedOption != Units.MainSelect.Write)
releases.variant.download()
if (drives.length) {
drives.selected.setImage(releases.variant)
drives.selected.write(releases.variant)
}
}
}
}
1 change: 1 addition & 0 deletions src/app/qml/Units.qml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ QtObject {
Downloading,
Download_Verifying,
Ready,
Stopped,
Writing_Not_Possible,
Writing,
Write_Verifying,
Expand Down
5 changes: 3 additions & 2 deletions src/app/releasemanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -373,12 +373,13 @@ class ReleaseVariant : public QObject, public DownloadReceiver
public:
enum Type { LIVE = 0, NETINSTALL, FULL, ATOMIC };
Q_ENUMS(Type)
enum Status { PREPARING = 0, DOWNLOADING, DOWNLOAD_VERIFYING, READY, WRITING_NOT_POSSIBLE, WRITING, WRITE_VERIFYING, FINISHED, FAILED_VERIFICATION, FAILED_DOWNLOAD, FAILED };
enum Status { PREPARING = 0, DOWNLOADING, DOWNLOAD_VERIFYING, READY, STOPPED, WRITING_NOT_POSSIBLE, WRITING, WRITE_VERIFYING, FINISHED, FAILED_VERIFICATION, FAILED_DOWNLOAD, FAILED };
Q_ENUMS(Status)
const QStringList m_statusStrings{tr("Preparing"),
tr("Downloading"),
tr("Checking the download"),
tr("Ready to write"),
tr("Download has been stopped"),
tr("Image file was saved to your downloads folder. Writing is not possible"),
tr("Writing"),
tr("Checking the written data"),
Expand Down Expand Up @@ -414,7 +415,6 @@ class ReleaseVariant : public QObject, public DownloadReceiver

Status status() const;
QString statusString() const;
void setStatus(Status s);
QString errorString() const;
void setErrorString(const QString &o);

Expand All @@ -439,6 +439,7 @@ class ReleaseVariant : public QObject, public DownloadReceiver
public slots:
void download();
void resetStatus();
void setStatus(Status s);

private:
QString m_temporaryIso{};
Expand Down
Loading