feat: add links to curseforge modpacks
This commit is contained in:
parent
c5eb6fe6fb
commit
e644380160
@ -6,7 +6,6 @@ void Flame::loadIndexedPack(Flame::IndexedPack& pack, QJsonObject& obj)
|
|||||||
{
|
{
|
||||||
pack.addonId = Json::requireInteger(obj, "id");
|
pack.addonId = Json::requireInteger(obj, "id");
|
||||||
pack.name = Json::requireString(obj, "name");
|
pack.name = Json::requireString(obj, "name");
|
||||||
pack.websiteUrl = Json::ensureString(Json::ensureObject(obj, "links"), "websiteUrl", "");
|
|
||||||
pack.description = Json::ensureString(obj, "summary", "");
|
pack.description = Json::ensureString(obj, "summary", "");
|
||||||
|
|
||||||
auto logo = Json::requireObject(obj, "logo");
|
auto logo = Json::requireObject(obj, "logo");
|
||||||
@ -46,6 +45,32 @@ void Flame::loadIndexedPack(Flame::IndexedPack& pack, QJsonObject& obj)
|
|||||||
if (!found) {
|
if (!found) {
|
||||||
throw JSONValidationError(QString("Pack with no good file, skipping: %1").arg(pack.name));
|
throw JSONValidationError(QString("Pack with no good file, skipping: %1").arg(pack.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadIndexedInfo(pack, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Flame::loadIndexedInfo(IndexedPack& pack, QJsonObject& obj)
|
||||||
|
{
|
||||||
|
auto links_obj = Json::ensureObject(obj, "links");
|
||||||
|
|
||||||
|
pack.extra.websiteUrl = Json::ensureString(links_obj, "issuesUrl");
|
||||||
|
if(pack.extra.websiteUrl.endsWith('/'))
|
||||||
|
pack.extra.websiteUrl.chop(1);
|
||||||
|
|
||||||
|
pack.extra.issuesUrl = Json::ensureString(links_obj, "issuesUrl");
|
||||||
|
if(pack.extra.issuesUrl.endsWith('/'))
|
||||||
|
pack.extra.issuesUrl.chop(1);
|
||||||
|
|
||||||
|
pack.extra.sourceUrl = Json::ensureString(links_obj, "sourceUrl");
|
||||||
|
if(pack.extra.sourceUrl.endsWith('/'))
|
||||||
|
pack.extra.sourceUrl.chop(1);
|
||||||
|
|
||||||
|
pack.extra.wikiUrl = Json::ensureString(links_obj, "wikiUrl");
|
||||||
|
if(pack.extra.wikiUrl.endsWith('/'))
|
||||||
|
pack.extra.wikiUrl.chop(1);
|
||||||
|
|
||||||
|
pack.extraInfoLoaded = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Flame::loadIndexedPackVersions(Flame::IndexedPack& pack, QJsonArray& arr)
|
void Flame::loadIndexedPackVersions(Flame::IndexedPack& pack, QJsonArray& arr)
|
||||||
|
@ -21,6 +21,13 @@ struct IndexedVersion {
|
|||||||
QString fileName;
|
QString fileName;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ModpackExtra {
|
||||||
|
QString websiteUrl;
|
||||||
|
QString wikiUrl;
|
||||||
|
QString issuesUrl;
|
||||||
|
QString sourceUrl;
|
||||||
|
};
|
||||||
|
|
||||||
struct IndexedPack
|
struct IndexedPack
|
||||||
{
|
{
|
||||||
int addonId;
|
int addonId;
|
||||||
@ -29,13 +36,16 @@ struct IndexedPack
|
|||||||
QList<ModpackAuthor> authors;
|
QList<ModpackAuthor> authors;
|
||||||
QString logoName;
|
QString logoName;
|
||||||
QString logoUrl;
|
QString logoUrl;
|
||||||
QString websiteUrl;
|
|
||||||
|
|
||||||
bool versionsLoaded = false;
|
bool versionsLoaded = false;
|
||||||
QVector<IndexedVersion> versions;
|
QVector<IndexedVersion> versions;
|
||||||
|
|
||||||
|
bool extraInfoLoaded = false;
|
||||||
|
ModpackExtra extra;
|
||||||
};
|
};
|
||||||
|
|
||||||
void loadIndexedPack(IndexedPack & m, QJsonObject & obj);
|
void loadIndexedPack(IndexedPack & m, QJsonObject & obj);
|
||||||
|
void loadIndexedInfo(IndexedPack&, QJsonObject&);
|
||||||
void loadIndexedPackVersions(IndexedPack & m, QJsonArray & arr);
|
void loadIndexedPackVersions(IndexedPack & m, QJsonArray & arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,29 +119,6 @@ void FlamePage::onSelectionChanged(QModelIndex first, QModelIndex second)
|
|||||||
}
|
}
|
||||||
|
|
||||||
current = listModel->data(first, Qt::UserRole).value<Flame::IndexedPack>();
|
current = listModel->data(first, Qt::UserRole).value<Flame::IndexedPack>();
|
||||||
QString text = "";
|
|
||||||
QString name = current.name;
|
|
||||||
|
|
||||||
if (current.websiteUrl.isEmpty())
|
|
||||||
text = name;
|
|
||||||
else
|
|
||||||
text = "<a href=\"" + current.websiteUrl + "\">" + name + "</a>";
|
|
||||||
if (!current.authors.empty()) {
|
|
||||||
auto authorToStr = [](Flame::ModpackAuthor& author) {
|
|
||||||
if (author.url.isEmpty()) {
|
|
||||||
return author.name;
|
|
||||||
}
|
|
||||||
return QString("<a href=\"%1\">%2</a>").arg(author.url, author.name);
|
|
||||||
};
|
|
||||||
QStringList authorStrs;
|
|
||||||
for (auto& author : current.authors) {
|
|
||||||
authorStrs.push_back(authorToStr(author));
|
|
||||||
}
|
|
||||||
text += "<br>" + tr(" by ") + authorStrs.join(", ");
|
|
||||||
}
|
|
||||||
text += "<br><br>";
|
|
||||||
|
|
||||||
ui->packDescription->setHtml(text + current.description);
|
|
||||||
|
|
||||||
if (current.versionsLoaded == false) {
|
if (current.versionsLoaded == false) {
|
||||||
qDebug() << "Loading flame modpack versions";
|
qDebug() << "Loading flame modpack versions";
|
||||||
@ -188,6 +165,8 @@ void FlamePage::onSelectionChanged(QModelIndex first, QModelIndex second)
|
|||||||
|
|
||||||
suggestCurrent();
|
suggestCurrent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateUi();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlamePage::suggestCurrent()
|
void FlamePage::suggestCurrent()
|
||||||
@ -217,3 +196,46 @@ void FlamePage::onVersionSelectionChanged(QString data)
|
|||||||
selectedVersion = ui->versionSelectionBox->currentData().toString();
|
selectedVersion = ui->versionSelectionBox->currentData().toString();
|
||||||
suggestCurrent();
|
suggestCurrent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlamePage::updateUi()
|
||||||
|
{
|
||||||
|
QString text = "";
|
||||||
|
QString name = current.name;
|
||||||
|
|
||||||
|
if (current.extra.websiteUrl.isEmpty())
|
||||||
|
text = name;
|
||||||
|
else
|
||||||
|
text = "<a href=\"" + current.extra.websiteUrl + "\">" + name + "</a>";
|
||||||
|
if (!current.authors.empty()) {
|
||||||
|
auto authorToStr = [](Flame::ModpackAuthor& author) {
|
||||||
|
if (author.url.isEmpty()) {
|
||||||
|
return author.name;
|
||||||
|
}
|
||||||
|
return QString("<a href=\"%1\">%2</a>").arg(author.url, author.name);
|
||||||
|
};
|
||||||
|
QStringList authorStrs;
|
||||||
|
for (auto& author : current.authors) {
|
||||||
|
authorStrs.push_back(authorToStr(author));
|
||||||
|
}
|
||||||
|
text += "<br>" + tr(" by ") + authorStrs.join(", ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(current.extraInfoLoaded) {
|
||||||
|
if (!current.extra.issuesUrl.isEmpty()
|
||||||
|
|| !current.extra.sourceUrl.isEmpty()
|
||||||
|
|| !current.extra.wikiUrl.isEmpty()) {
|
||||||
|
text += "<br><br>" + tr("External links:") + "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!current.extra.issuesUrl.isEmpty())
|
||||||
|
text += "- " + tr("Issues: <a href=%1>%1</a>").arg(current.extra.issuesUrl) + "<br>";
|
||||||
|
if (!current.extra.wikiUrl.isEmpty())
|
||||||
|
text += "- " + tr("Wiki: <a href=%1>%1</a>").arg(current.extra.wikiUrl) + "<br>";
|
||||||
|
if (!current.extra.sourceUrl.isEmpty())
|
||||||
|
text += "- " + tr("Source code: <a href=%1>%1</a>").arg(current.extra.sourceUrl) + "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
text += "<hr>";
|
||||||
|
|
||||||
|
ui->packDescription->setHtml(text + current.description);
|
||||||
|
}
|
||||||
|
@ -79,6 +79,8 @@ public:
|
|||||||
virtual bool shouldDisplay() const override;
|
virtual bool shouldDisplay() const override;
|
||||||
void retranslate() override;
|
void retranslate() override;
|
||||||
|
|
||||||
|
void updateUi();
|
||||||
|
|
||||||
void openedImpl() override;
|
void openedImpl() override;
|
||||||
|
|
||||||
bool eventFilter(QObject * watched, QEvent * event) override;
|
bool eventFilter(QObject * watched, QEvent * event) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user