Skip to content

Commit

Permalink
refactor(RD): allow setting custom folder target for downloaded resou…
Browse files Browse the repository at this point in the history
…rces

Signed-off-by: flow <flowlnlnln@gmail.com>
  • Loading branch information
flowln committed Jan 8, 2023
1 parent ddbfe4d commit 6ff50e5
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 5 deletions.
12 changes: 11 additions & 1 deletion launcher/ResourceDownloadTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,17 @@ ResourceDownloadTask::ResourceDownloadTask(ModPlatform::IndexedPack pack,
m_filesNetJob.reset(new NetJob(tr("Resource download"), APPLICATION->network()));
m_filesNetJob->setStatus(tr("Downloading resource:\n%1").arg(m_pack_version.downloadUrl));

m_filesNetJob->addNetAction(Net::Download::makeFile(m_pack_version.downloadUrl, m_pack_model->dir().absoluteFilePath(getFilename())));
QDir dir { m_pack_model->dir() };
{
// FIXME: Make this more generic. May require adding additional info to IndexedVersion,
// or adquiring a reference to the base instance.
if (!m_pack_version.custom_target_folder.isEmpty()) {
dir.cdUp();
dir.cd(m_pack_version.custom_target_folder);
}
}

m_filesNetJob->addNetAction(Net::Download::makeFile(m_pack_version.downloadUrl, dir.absoluteFilePath(getFilename())));
connect(m_filesNetJob.get(), &NetJob::succeeded, this, &ResourceDownloadTask::downloadSucceeded);
connect(m_filesNetJob.get(), &NetJob::progress, this, &ResourceDownloadTask::downloadProgressChanged);
connect(m_filesNetJob.get(), &NetJob::failed, this, &ResourceDownloadTask::downloadFailed);
Expand Down
3 changes: 1 addition & 2 deletions launcher/ResourceDownloadTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class ResourceDownloadTask : public SequentialTask {
public:
explicit ResourceDownloadTask(ModPlatform::IndexedPack pack, ModPlatform::IndexedVersion version, const std::shared_ptr<ResourceFolderModel> packs, bool is_indexed = true);
const QString& getFilename() const { return m_pack_version.fileName; }
const QString& getCustomPath() const { return m_pack_version.custom_target_folder; }
const QVariant& getVersionID() const { return m_pack_version.fileId; }

private:
Expand All @@ -43,9 +44,7 @@ class ResourceDownloadTask : public SequentialTask {
LocalModUpdateTask::Ptr m_update_task;

void downloadProgressChanged(qint64 current, qint64 total);

void downloadFailed(QString reason);

void downloadSucceeded();

std::tuple<QString, QString> to_delete {"", ""};
Expand Down
1 change: 1 addition & 0 deletions launcher/modplatform/ModIndex.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ struct IndexedVersion {

// For internal use, not provided by APIs
bool is_currently_selected = false;
QString custom_target_folder;
};

struct ExtraPackData {
Expand Down
3 changes: 2 additions & 1 deletion launcher/ui/dialogs/ResourceDownloadDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ void ResourceDownloadDialog::confirm()
confirm_dialog->retranslateUi(resourcesString());

for (auto& task : keys) {
confirm_dialog->appendResource({ task, m_selected.find(task).value()->getFilename() });
auto selected = m_selected.constFind(task).value();
confirm_dialog->appendResource({ task, selected->getFilename(), selected->getCustomPath() });
}

if (confirm_dialog->exec()) {
Expand Down
16 changes: 16 additions & 0 deletions launcher/ui/dialogs/ReviewMessageBox.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include "ReviewMessageBox.h"
#include "ui_ReviewMessageBox.h"

#include "Application.h"

#include <QPushButton>

ReviewMessageBox::ReviewMessageBox(QWidget* parent, QString const& title, QString const& icon)
Expand All @@ -11,6 +13,10 @@ ReviewMessageBox::ReviewMessageBox(QWidget* parent, QString const& title, QStrin
auto back_button = ui->buttonBox->button(QDialogButtonBox::Cancel);
back_button->setText(tr("Back"));

ui->modTreeWidget->header()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->modTreeWidget->header()->setStretchLastSection(false);
ui->modTreeWidget->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);

connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ReviewMessageBox::accept);
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &ReviewMessageBox::reject);
}
Expand All @@ -36,6 +42,16 @@ void ReviewMessageBox::appendResource(ResourceInformation&& info)

itemTop->insertChildren(0, { filenameItem });

if (!info.custom_file_path.isEmpty()) {
auto customPathItem = new QTreeWidgetItem(itemTop);
customPathItem->setText(0, tr("This download will be placed in: %1").arg(info.custom_file_path));

itemTop->insertChildren(1, { customPathItem });

itemTop->setIcon(1, QIcon(APPLICATION->getThemedIcon("status-yellow")));
itemTop->setToolTip(1, tr("This file will be downloaded to a folder location different from the default, possibly due to its loader requiring it."));
}

ui->modTreeWidget->addTopLevelItem(itemTop);
}

Expand Down
3 changes: 2 additions & 1 deletion launcher/ui/dialogs/ReviewMessageBox.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ class ReviewMessageBox : public QDialog {
public:
static auto create(QWidget* parent, QString&& title, QString&& icon = "") -> ReviewMessageBox*;

using ResourceInformation = struct {
using ResourceInformation = struct res_info {
QString name;
QString filename;
QString custom_file_path {};
};

void appendResource(ResourceInformation&& info);
Expand Down

0 comments on commit 6ff50e5

Please sign in to comment.