aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--launcher/modplatform/helpers/ExportToModList.cpp56
-rw-r--r--launcher/modplatform/helpers/ExportToModList.h2
-rw-r--r--launcher/ui/dialogs/ExportToModListDialog.cpp26
-rw-r--r--launcher/ui/dialogs/ExportToModListDialog.ui10
4 files changed, 92 insertions, 2 deletions
diff --git a/launcher/modplatform/helpers/ExportToModList.cpp b/launcher/modplatform/helpers/ExportToModList.cpp
index d837fb0b..86bb9c41 100644
--- a/launcher/modplatform/helpers/ExportToModList.cpp
+++ b/launcher/modplatform/helpers/ExportToModList.cpp
@@ -16,6 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "ExportToModList.h"
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
namespace ExportToModList {
QString ExportToModList(QList<Mod*> mods, Formats format, OptionalData extraData)
@@ -94,6 +97,59 @@ QString ExportToModList(QList<Mod*> mods, Formats format, OptionalData extraData
}
return lines.join("\n");
}
+ case JSON: {
+ QJsonArray lines;
+ for (auto mod : mods) {
+ auto meta = mod->metadata();
+ auto modName = mod->name();
+ QJsonObject line;
+ line["name"] = modName;
+ if (extraData & Url) {
+ auto url = mod->metaurl();
+ if (!url.isEmpty())
+ line["url"] = url;
+ }
+ if (extraData & Version) {
+ auto ver = mod->version();
+ if (ver.isEmpty() && meta != nullptr)
+ ver = meta->version().toString();
+ if (!ver.isEmpty())
+ line["version"] = ver;
+ }
+ if (extraData & Authors && !mod->authors().isEmpty())
+ line["authors"] = QJsonArray::fromStringList(mod->authors());
+ lines << line;
+ }
+ QJsonDocument doc;
+ doc.setArray(lines);
+ return doc.toJson();
+ }
+ case CSV: {
+ QStringList lines;
+ for (auto mod : mods) {
+ QStringList data;
+ auto meta = mod->metadata();
+ auto modName = mod->name();
+
+ data << modName;
+ if (extraData & Url) {
+ auto url = mod->metaurl();
+ if (!url.isEmpty())
+ data << url;
+ }
+ if (extraData & Version) {
+ auto ver = mod->version();
+ if (ver.isEmpty() && meta != nullptr)
+ ver = meta->version().toString();
+ if (!ver.isEmpty())
+ data << ver;
+ }
+ if (extraData & Authors && !mod->authors().isEmpty())
+ data << QString("\"%1\"").arg(mod->authors().join(","));
+ lines << data.join(",");
+ }
+ return lines.join("\n");
+ }
default: {
return QString("unknown format:%1").arg(format);
}
diff --git a/launcher/modplatform/helpers/ExportToModList.h b/launcher/modplatform/helpers/ExportToModList.h
index 9ff8d25a..abd6e9bc 100644
--- a/launcher/modplatform/helpers/ExportToModList.h
+++ b/launcher/modplatform/helpers/ExportToModList.h
@@ -22,7 +22,7 @@
namespace ExportToModList {
-enum Formats { HTML, MARKDOWN, PLAINTXT, CUSTOM };
+enum Formats { HTML, MARKDOWN, PLAINTXT, JSON, CSV, CUSTOM };
enum OptionalData {
Authors = 1 << 0,
Url = 1 << 1,
diff --git a/launcher/ui/dialogs/ExportToModListDialog.cpp b/launcher/ui/dialogs/ExportToModListDialog.cpp
index 700e7178..cfd28cf8 100644
--- a/launcher/ui/dialogs/ExportToModListDialog.cpp
+++ b/launcher/ui/dialogs/ExportToModListDialog.cpp
@@ -89,6 +89,20 @@ void ExportToModListDialog::formatChanged(int index)
break;
}
case 3: {
+ ui->templateGroup->setDisabled(true);
+ ui->optionsGroup->setDisabled(false);
+ ui->resultText->hide();
+ format = ExportToModList::JSON;
+ break;
+ }
+ case 4: {
+ ui->templateGroup->setDisabled(true);
+ ui->optionsGroup->setDisabled(false);
+ ui->resultText->hide();
+ format = ExportToModList::CSV;
+ break;
+ }
+ case 5: {
ui->templateGroup->setDisabled(false);
ui->optionsGroup->setDisabled(true);
ui->resultText->hide();
@@ -133,6 +147,12 @@ void ExportToModListDialog::triggerImp()
}
case ExportToModList::CUSTOM:
return;
+ case ExportToModList::JSON:
+ exampleLine = "{\"name\":\"{name}\",\"url\":\"{url}\",\"version\":\"{version}\",\"authors\":\"{authors}\"},";
+ break;
+ case ExportToModList::CSV:
+ exampleLine = "{name},{url},{version},\"{authors}\"";
+ break;
}
if (!m_template_selected) {
if (ui->templateText->toPlainText() != exampleLine)
@@ -146,7 +166,7 @@ void ExportToModListDialog::done(int result)
const QString filename = FS::RemoveInvalidFilenameChars(name);
const QString output =
QFileDialog::getSaveFileName(this, tr("Export %1").arg(name), FS::PathCombine(QDir::homePath(), filename + extension()),
- "File (*.txt *.html *.md)", nullptr);
+ "File (*.txt *.html *.md *.json *.csv)", nullptr);
if (output.isEmpty())
return;
@@ -167,6 +187,10 @@ QString ExportToModListDialog::extension()
return ".txt";
case ExportToModList::CUSTOM:
return ".txt";
+ case ExportToModList::JSON:
+ return ".json";
+ case ExportToModList::CSV:
+ return ".csv";
}
return ".txt";
}
diff --git a/launcher/ui/dialogs/ExportToModListDialog.ui b/launcher/ui/dialogs/ExportToModListDialog.ui
index 640b1766..e0f138f9 100644
--- a/launcher/ui/dialogs/ExportToModListDialog.ui
+++ b/launcher/ui/dialogs/ExportToModListDialog.ui
@@ -60,6 +60,16 @@
</item>
<item>
<property name="text">
+ <string>JSON</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>CSV</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
<string>Custom</string>
</property>
</item>