mirror of
https://github.com/geode-sdk/geode.git
synced 2025-03-25 04:11:42 -04:00
ModList: check owner when displaying mod devs
This commit is contained in:
parent
170506e533
commit
e6e1d34694
5 changed files with 43 additions and 1 deletions
loader/src
|
@ -1,5 +1,7 @@
|
|||
#include "Server.hpp"
|
||||
#include <Geode/utils/JsonValidation.hpp>
|
||||
#include <Geode/utils/ranges.hpp>
|
||||
#include <fmt/core.h>
|
||||
#include <loader/ModMetadataImpl.hpp>
|
||||
#include <fmt/chrono.h>
|
||||
|
||||
|
@ -418,6 +420,7 @@ Result<ServerModMetadata> ServerModMetadata::parse(matjson::Value const& raw) {
|
|||
auto dev = ServerDeveloper();
|
||||
obj.needs("username").into(dev.username);
|
||||
obj.needs("display_name").into(dev.displayName);
|
||||
obj.needs("is_owner").into(dev.isOwner);
|
||||
res.developers.push_back(dev);
|
||||
developerNames.push_back(dev.displayName);
|
||||
}
|
||||
|
@ -454,6 +457,24 @@ Result<ServerModMetadata> ServerModMetadata::parse(matjson::Value const& raw) {
|
|||
return Ok(res);
|
||||
}
|
||||
|
||||
std::string ServerModMetadata::formatDevelopersToString() const {
|
||||
std::optional<ServerDeveloper> owner = ranges::find(developers, [] (auto item) {
|
||||
return item.isOwner;
|
||||
});
|
||||
switch (developers.size()) {
|
||||
case 0: return "Unknown"; break;
|
||||
case 1: return developers.front().displayName; break;
|
||||
case 2: return developers.front().displayName + " & " + developers.back().displayName; break;
|
||||
default: {
|
||||
if (owner) {
|
||||
return fmt::format("{} + {} More", owner->displayName, developers.size() - 1);
|
||||
} else {
|
||||
return fmt::format("{} + {} More", developers.front().displayName, developers.size() - 1);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
Result<ServerModsList> ServerModsList::parse(matjson::Value const& raw) {
|
||||
auto json = raw;
|
||||
JsonChecker checker(json);
|
||||
|
|
|
@ -21,6 +21,7 @@ namespace server {
|
|||
struct ServerDeveloper final {
|
||||
std::string username;
|
||||
std::string displayName;
|
||||
bool isOwner;
|
||||
};
|
||||
|
||||
struct ServerModVersion final {
|
||||
|
@ -60,6 +61,7 @@ namespace server {
|
|||
static Result<ServerModMetadata> parse(matjson::Value const& json);
|
||||
|
||||
ModMetadata latestVersion() const;
|
||||
std::string formatDevelopersToString() const;
|
||||
bool hasUpdateForInstalledMod() const;
|
||||
};
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ bool ModItem::init(ModSource&& source) {
|
|||
m_developers->ignoreAnchorPointForPosition(false);
|
||||
m_developers->setAnchorPoint({ .0f, .5f });
|
||||
|
||||
auto by = "By " + ModMetadata::formatDeveloperDisplayString(m_source.getMetadata().getDevelopers());
|
||||
auto by = "By " + m_source.formatDevelopers();
|
||||
m_developerLabel = CCLabelBMFont::create(by.c_str(), "goldFont.fnt");
|
||||
m_developerLabel->setID("developers-label");
|
||||
auto developersBtn = CCMenuItemSpriteExtra::create(
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#include "ModSource.hpp"
|
||||
|
||||
#include <Geode/loader/ModMetadata.hpp>
|
||||
#include <Geode/ui/GeodeUI.hpp>
|
||||
#include <server/DownloadManager.hpp>
|
||||
#include <Geode/binding/GameObject.hpp>
|
||||
|
@ -68,6 +70,22 @@ ModMetadata ModSource::getMetadata() const {
|
|||
},
|
||||
}, m_value);
|
||||
}
|
||||
|
||||
std::string ModSource::formatDevelopers() const {
|
||||
return std::visit(makeVisitor {
|
||||
[](Mod* mod) {
|
||||
return ModMetadata::formatDeveloperDisplayString(mod->getMetadata().getDevelopers());
|
||||
},
|
||||
[](server::ServerModMetadata const& metadata) {
|
||||
// Versions should be guaranteed to have at least one item
|
||||
return metadata.formatDevelopersToString();
|
||||
},
|
||||
[](ModSuggestion const& suggestion) {
|
||||
return ModMetadata::formatDeveloperDisplayString(suggestion.suggestion.getDevelopers());
|
||||
},
|
||||
}, m_value);
|
||||
}
|
||||
|
||||
CCNode* ModSource::createModLogo() const {
|
||||
return std::visit(makeVisitor {
|
||||
[](Mod* mod) {
|
||||
|
|
|
@ -44,6 +44,7 @@ public:
|
|||
server::ServerModMetadata const* asServer() const;
|
||||
ModSuggestion const* asSuggestion() const;
|
||||
|
||||
std::string formatDevelopers() const;
|
||||
server::ServerRequest<server::ServerModMetadata> fetchServerInfo() const;
|
||||
server::ServerRequest<std::optional<std::string>> fetchAbout() const;
|
||||
server::ServerRequest<std::optional<std::string>> fetchChangelog() const;
|
||||
|
|
Loading…
Add table
Reference in a new issue