feat(mod parsing): load extra mod details
- (image, license, issuetracker) Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
This commit is contained in:
@ -39,6 +39,7 @@
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QUrl>
|
||||
|
||||
#include "minecraft/mod/MetadataHandler.h"
|
||||
|
||||
@ -49,6 +50,77 @@ enum class ModStatus {
|
||||
Unknown, // Default status
|
||||
};
|
||||
|
||||
struct ModLicense {
|
||||
QString name = {};
|
||||
QString id = {};
|
||||
QString url = {};
|
||||
QString description = {};
|
||||
|
||||
ModLicense() {}
|
||||
|
||||
ModLicense(const QString license) {
|
||||
// FIXME: come up with a better license parseing.
|
||||
// handle SPDX identifiers? https://spdx.org/licenses/
|
||||
auto parts = license.split(' ');
|
||||
QStringList notNameParts = {};
|
||||
for (auto part : parts) {
|
||||
auto url = QUrl::fromUserInput(part);
|
||||
if (url.isValid()) {
|
||||
this->url = url.toString();
|
||||
notNameParts.append(part);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto part : notNameParts) {
|
||||
parts.removeOne(part);
|
||||
}
|
||||
|
||||
auto licensePart = parts.join(' ');
|
||||
this->name = licensePart;
|
||||
this->description = licensePart;
|
||||
|
||||
if (parts.size() == 1) {
|
||||
this->id = parts.first();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ModLicense(const QString name, const QString id, const QString url, const QString description) {
|
||||
this->name = name;
|
||||
this->id = id;
|
||||
this->url = url;
|
||||
this->description = description;
|
||||
}
|
||||
|
||||
ModLicense(const ModLicense& other)
|
||||
: name(other.name)
|
||||
, id(other.id)
|
||||
, url(other.url)
|
||||
, description(other.description)
|
||||
{}
|
||||
|
||||
ModLicense& operator=(const ModLicense& other)
|
||||
{
|
||||
this->name = other.name;
|
||||
this->id = other.id;
|
||||
this->url = other.url;
|
||||
this->description = other.description;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
ModLicense& operator=(const ModLicense&& other)
|
||||
{
|
||||
this->name = other.name;
|
||||
this->id = other.id;
|
||||
this->url = other.url;
|
||||
this->description = other.description;
|
||||
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
struct ModDetails
|
||||
{
|
||||
/* Mod ID as defined in the ModLoader-specific metadata */
|
||||
@ -72,6 +144,15 @@ struct ModDetails
|
||||
/* List of the author's names */
|
||||
QStringList authors = {};
|
||||
|
||||
/* Issue Tracker URL */
|
||||
QString issue_tracker = {};
|
||||
|
||||
/* License */
|
||||
QList<ModLicense> licenses = {};
|
||||
|
||||
/* Path of mod logo */
|
||||
QString icon_file = {};
|
||||
|
||||
/* Installation status of the mod */
|
||||
ModStatus status = ModStatus::Unknown;
|
||||
|
||||
@ -89,6 +170,9 @@ struct ModDetails
|
||||
, homeurl(other.homeurl)
|
||||
, description(other.description)
|
||||
, authors(other.authors)
|
||||
, issue_tracker(other.issue_tracker)
|
||||
, licenses(other.licenses)
|
||||
, icon_file(other.icon_file)
|
||||
, status(other.status)
|
||||
{}
|
||||
|
||||
@ -101,6 +185,9 @@ struct ModDetails
|
||||
this->homeurl = other.homeurl;
|
||||
this->description = other.description;
|
||||
this->authors = other.authors;
|
||||
this->issue_tracker = other.issue_tracker;
|
||||
this->licenses = other.licenses;
|
||||
this->icon_file = other.icon_file;
|
||||
this->status = other.status;
|
||||
|
||||
return *this;
|
||||
@ -115,6 +202,9 @@ struct ModDetails
|
||||
this->homeurl = other.homeurl;
|
||||
this->description = other.description;
|
||||
this->authors = other.authors;
|
||||
this->issue_tracker = other.issue_tracker;
|
||||
this->licenses = other.licenses;
|
||||
this->icon_file = other.icon_file;
|
||||
this->status = other.status;
|
||||
|
||||
return *this;
|
||||
|
Reference in New Issue
Block a user