From 59b5b1cfca1614df681055d98d602692f482f0e2 Mon Sep 17 00:00:00 2001 From: Eddoursul <89222451+eddoursul@users.noreply.github.com> Date: Mon, 18 Sep 2023 19:48:13 +0200 Subject: Download files from direct URLs via a command line parameter (#1873) * Download files via a command line parameter * Use a GET parameter to predetermine Content-Disposition header in S3-compatible temporary URLs --- src/commandline.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'src/commandline.cpp') diff --git a/src/commandline.cpp b/src/commandline.cpp index 9082d710..1d44e043 100644 --- a/src/commandline.cpp +++ b/src/commandline.cpp @@ -2,6 +2,7 @@ #include "env.h" #include "instancemanager.h" #include "loglist.h" +#include "messagedialog.h" #include "multiprocess.h" #include "organizercore.h" #include "shared/appconfig.h" @@ -49,8 +50,8 @@ CommandLine::CommandLine() : m_command(nullptr) { createOptions(); - add(); + add(); } std::optional CommandLine::process(const std::wstring& line) @@ -833,6 +834,51 @@ std::optional ReloadPluginCommand::runPostOrganizer(OrganizerCore& core) return {}; } +Command::Meta DownloadFileCommand::meta() const +{ + return {"download", "downloads a file", "URL", ""}; +} + +po::options_description DownloadFileCommand::getInternalOptions() const +{ + po::options_description d; + + d.add_options()("URL", po::value()->required(), "file URL"); + + return d; +} + +po::positional_options_description DownloadFileCommand::getPositional() const +{ + po::positional_options_description d; + + d.add("URL", 1); + + return d; +} + +bool DownloadFileCommand::canForwardToPrimary() const +{ + return true; +} + +std::optional DownloadFileCommand::runPostOrganizer(OrganizerCore& core) +{ + const QString url = QString::fromStdString(vm()["URL"].as()); + + if (!url.startsWith("https://")) { + reportError(QObject::tr("Download URL must start with https://")); + return 1; + } + + log::debug("starting direct download from command line: {}", url.toStdString()); + MessageDialog::showMessage(QObject::tr("Download started"), qApp->activeWindow(), + false); + core.downloadManager()->startDownloadURLs(QStringList() << url); + + return {}; +} + Command::Meta RefreshCommand::meta() const { return {"refresh", "refreshes MO (same as F5)", "", ""}; -- cgit v1.3.1