aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-05-01 01:12:56 -0500
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-05-01 01:12:56 -0500
commitbfa9a42d9de4b29173cbe34bdbb874313d07f3ab (patch)
treeb804d94e90b6456f97517f78cd5f4dce12768ed6
parentd11b9e3a272d21be9df3c4741d3785b48058974d (diff)
Port upstream PR #2384: --name/--modname/--version/--source on download CLI
Adds metadata flags to the `download` subcommand and a corresponding DownloadManager::startDownloadURLWithMeta() entry point that populates ModRepositoryFileInfo before queueing. Skipped the upstream settings.cpp hunk that re-registers the Windows nxmhandler.exe binary for both nxm:// and modl:// — our nxmhandler_linux already registers both MIME schemes in registerHandler(). Cherry-picked from upstream/dev/modl-handler against merge-base dc420a25. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
-rw-r--r--src/src/commandline.cpp31
-rw-r--r--src/src/commandline.h1
-rw-r--r--src/src/downloadmanager.cpp16
-rw-r--r--src/src/downloadmanager.h3
4 files changed, 50 insertions, 1 deletions
diff --git a/src/src/commandline.cpp b/src/src/commandline.cpp
index 46f9be0..2de6bc6 100644
--- a/src/src/commandline.cpp
+++ b/src/src/commandline.cpp
@@ -806,6 +806,18 @@ Command::Meta DownloadFileCommand::meta() const
return {"download", "downloads a file", "URL", ""};
}
+po::options_description DownloadFileCommand::getVisibleOptions() const
+{
+ po::options_description d;
+
+ d.add_options()("name,n", po::value<std::string>(), "(optional) the download name")(
+ "modname,m", po::value<std::string>(), "(optional) the mod name")(
+ "version,v", po::value<std::string>(), "(optional) the download / mod version")(
+ "source,s", po::value<std::string>(), "(optional) the download source");
+
+ return d;
+}
+
po::options_description DownloadFileCommand::getInternalOptions() const
{
po::options_description d;
@@ -832,16 +844,33 @@ bool DownloadFileCommand::canForwardToPrimary() const
std::optional<int> DownloadFileCommand::runPostOrganizer(OrganizerCore& core)
{
const QString url = QString::fromStdString(vm()["URL"].as<std::string>());
+ QString name, modName, version, source;
if (!url.startsWith("https://")) {
reportError(QObject::tr("Download URL must start with https://"));
return 1;
}
+ if (vm().count("name")) {
+ name = QString::fromStdString(vm()["name"].as<std::string>());
+ }
+
+ if (vm().count("modname")) {
+ modName = QString::fromStdString(vm()["modname"].as<std::string>());
+ }
+
+ if (vm().count("version")) {
+ version = QString::fromStdString(vm()["version"].as<std::string>());
+ }
+
+ if (vm().count("source")) {
+ source = QString::fromStdString(vm()["source"].as<std::string>());
+ }
+
log::debug("starting direct download from command line: {}", url.toStdString());
MessageDialog::showMessage(QObject::tr("Download started"), qApp->activeWindow(),
false);
- core.downloadManager()->startDownloadURLs(QStringList() << url);
+ core.downloadManager()->startDownloadURLWithMeta(url, name, modName, version, source);
return {};
}
diff --git a/src/src/commandline.h b/src/src/commandline.h
index 8dcc23a..6109d37 100644
--- a/src/src/commandline.h
+++ b/src/src/commandline.h
@@ -207,6 +207,7 @@ class DownloadFileCommand : public Command
protected:
Meta meta() const override;
+ po::options_description getVisibleOptions() const override;
po::options_description getInternalOptions() const override;
po::positional_options_description getPositional() const override;
diff --git a/src/src/downloadmanager.cpp b/src/src/downloadmanager.cpp
index ee87f67..d7e5ce5 100644
--- a/src/src/downloadmanager.cpp
+++ b/src/src/downloadmanager.cpp
@@ -2054,6 +2054,22 @@ int DownloadManager::startDownloadURLs(const QStringList& urls)
return m_ActiveDownloads.size() - 1;
}
+int DownloadManager::startDownloadURLWithMeta(const QString& url, const QString& name,
+ const QString& modName,
+ const QString& version,
+ const QString& source)
+{
+ ModRepositoryFileInfo info;
+ info.name = name;
+ info.modName = modName;
+ info.version = version;
+ info.repository = source;
+ if (!addDownload(QStringList() << url, "", -1, -1, &info)) {
+ return 0;
+ }
+ return m_ActiveDownloads.size() - 1;
+}
+
int DownloadManager::startDownloadNexusFile(const QString& gameName, int modID,
int fileID)
{
diff --git a/src/src/downloadmanager.h b/src/src/downloadmanager.h
index 581fe84..dce9069 100644
--- a/src/src/downloadmanager.h
+++ b/src/src/downloadmanager.h
@@ -409,6 +409,9 @@ public:
public: // IDownloadManager interface:
int startDownloadURLs(const QStringList& urls);
+ int startDownloadURLWithMeta(const QString& url, const QString& name,
+ const QString& modName, const QString& version,
+ const QString& source);
int startDownloadNexusFile(const QString& gameName, int modID, int fileID);
QString downloadPath(int id) const;