aboutsummaryrefslogtreecommitdiff
path: root/launcher/modplatform/helpers/ExportToModList.cpp
blob: 5e01367f964ecd94984c1b9c9acd156d01449974 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// SPDX-License-Identifier: GPL-3.0-only
/*
 *  Prism Launcher - Minecraft Launcher
 *  Copyright (c) 2023 Trial97 <alexandru.tripon97@gmail.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, version 3.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include "ExportToModList.h"

namespace ExportToModList {
QString ExportToModList(QList<Mod*> mods, Formats format, OptionalData extraData)
{
    switch (format) {
        case HTML: {
            QStringList lines;
            for (auto mod : mods) {
                auto meta = mod->metadata();
                auto modName = mod->name();
                if (extraData & Url) {
                    auto url = mod->metaurl();
                    if (!url.isEmpty())
                        modName = QString("<a href=\"%1\">%2</a>").arg(url, modName);
                }
                auto line = modName;
                if (extraData & Version) {
                    auto ver = mod->version();
                    if (ver.isEmpty() && meta != nullptr)
                        ver = meta->version().toString();
                    if (!ver.isEmpty())
                        line += QString("[%1]").arg(ver);
                }
                if (extraData & Authors && !mod->authors().isEmpty())
                    line += " by " + mod->authors().join(", ");
                lines.append(QString("<ul>%1</ul>").arg(line));
            }
            return QString("<html><body><li>\n\t%1\n</li></body></html>").arg(lines.join("\n\t"));
        }
        case MARKDOWN: {
            QStringList lines;
            for (auto mod : mods) {
                auto meta = mod->metadata();
                auto modName = mod->name();
                if (extraData & Url) {
                    auto url = mod->metaurl();
                    if (!url.isEmpty())
                        modName = QString("[%1](%2)").arg(modName, url);
                }
                auto line = modName;
                if (extraData & Version) {
                    auto ver = mod->version();
                    if (ver.isEmpty() && meta != nullptr)
                        ver = meta->version().toString();
                    if (!ver.isEmpty())
                        line += QString("[%1]").arg(ver);
                }
                if (extraData & Authors && !mod->authors().isEmpty())
                    line += " by " + mod->authors().join(", ");
                lines << "- " + line;
            }
            return lines.join("\n");
        }
        case PLAINTXT: {
            QStringList lines;
            for (auto mod : mods) {
                auto meta = mod->metadata();
                auto modName = mod->name();

                auto 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: " + QString("[%1]").arg(ver) + ";";
                }
                if (extraData & Authors && !mod->authors().isEmpty())
                    line += " authors " + mod->authors().join(", ") + ";";
                lines << line;
            }
            return lines.join("\n");
        }
        default: {
            return QString("unknown format:%1").arg(format);
        }
    }
}

QString ExportToModList(QList<Mod*> mods, QString lineTemplate)
{
    QStringList lines;
    for (auto mod : mods) {
        auto meta = mod->metadata();
        auto modName = mod->name();
        auto url = mod->metaurl();
        auto ver = mod->version();
        if (ver.isEmpty() && meta != nullptr)
            ver = meta->version().toString();
        auto authors = mod->authors().join(", ");
        lines << QString(lineTemplate)
                     .replace("{name}", modName)
                     .replace("{url}", url)
                     .replace("{version}", ver)
                     .replace("{authors}", authors);
    }
    return lines.join("\n");
}
}  // namespace ExportToModList