diff --git a/Common/Data/Format/JSONReader.cpp b/Common/Data/Format/JSONReader.cpp index 6e7af3634f..3a4e947bb0 100644 --- a/Common/Data/Format/JSONReader.cpp +++ b/Common/Data/Format/JSONReader.cpp @@ -131,7 +131,7 @@ bool JsonGet::getBool(const char *child_name) const { return get(child_name)->value.getTag() == JSON_TRUE; } -bool JsonGet::getBool(const char *child_name, bool default_value) const { +bool JsonGet::getBoolOr(const char *child_name, bool default_value) const { const JsonNode *val = get(child_name); if (val) { JsonTag tag = val->value.getTag(); diff --git a/Common/Data/Format/JSONReader.h b/Common/Data/Format/JSONReader.h index 4cd849c52b..08bb555095 100644 --- a/Common/Data/Format/JSONReader.h +++ b/Common/Data/Format/JSONReader.h @@ -30,7 +30,7 @@ struct JsonGet { int getInt(const char *child_name) const; int getInt(const char *child_name, int default_value) const; bool getBool(const char *child_name) const; - bool getBool(const char *child_name, bool default_value) const; + bool getBoolOr(const char *child_name, bool default_value) const; bool hasChild(const char *child_name, JsonTag child_type) const { return get(child_name, child_type) != nullptr; diff --git a/Common/GhidraClient.cpp b/Common/GhidraClient.cpp index 815eaf63b7..26a95ff796 100644 --- a/Common/GhidraClient.cpp +++ b/Common/GhidraClient.cpp @@ -123,7 +123,7 @@ bool GhidraClient::FetchTypes() { type.pathName = entry.getStringOr("pathName", ""); type.length = entry.getInt("length", 0); type.alignedLength = entry.getInt("alignedLength", 0); - type.zeroLength = entry.getBool("zeroLength", false); + type.zeroLength = entry.getBoolOr("zeroLength", false); type.description = entry.getStringOr("description", ""); type.kind = ResolveTypeKind(entry.getStringOr("kind", "")); diff --git a/Core/HLE/sceNet.cpp b/Core/HLE/sceNet.cpp index 7e1b66d614..592f31db6b 100644 --- a/Core/HLE/sceNet.cpp +++ b/Core/HLE/sceNet.cpp @@ -228,7 +228,7 @@ bool LoadDNSForGameID(std::string_view gameID, std::string_view jsonStr, InfraDN dns->revivalTeamURL = revived.getStringOr("url", ""); } } - dns->connectAdHocForGrouping = def.getBool("connect_adhoc_for_grouping", false); + dns->connectAdHocForGrouping = def.getBoolOr("connect_adhoc_for_grouping", false); } const JsonNode *games = root.getArray("games"); @@ -290,7 +290,7 @@ bool LoadDNSForGameID(std::string_view gameID, std::string_view jsonStr, InfraDN dns->gameName = game.getStringOr("name", ""); dns->dns = game.getStringOr("dns", dns->dns.c_str()); dns->dyn_dns = game.getStringOr("dyn_dns", ""); - dns->connectAdHocForGrouping = game.getBool("connect_adhoc_for_grouping", dns->connectAdHocForGrouping); + dns->connectAdHocForGrouping = game.getBoolOr("connect_adhoc_for_grouping", dns->connectAdHocForGrouping); if (game.hasChild("domains", JSON_OBJECT)) { const JsonGet domains = game.getDict("domains"); for (const auto &iter : domains.value_) { diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 30542c2b0e..e22d328a34 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -142,6 +142,7 @@ static bool ParseServerListEntriesJSON(std::string_view json) { for (const JsonNode *iter : servers->value) { JsonGet server = iter->value; AdhocServerListEntry entry; + entry.hidden = server.getBoolOr("hidden", false); entry.name = server.getStringOr("name", ""); entry.discord = server.getStringOr("discord", ""); entry.host = server.getStringOr("host", ""); diff --git a/Core/HLE/sceNetAdhoc.h b/Core/HLE/sceNetAdhoc.h index ade0870b4c..ed627206a7 100644 --- a/Core/HLE/sceNetAdhoc.h +++ b/Core/HLE/sceNetAdhoc.h @@ -114,6 +114,7 @@ struct AdhocServerListEntry { std::string dataJsonUrl; std::string statusXmlUrl; std::string statusWebUrl; + bool hidden = false; AdhocDataMode mode = AdhocDataMode::P2P; }; diff --git a/UI/AdhocServerScreen.cpp b/UI/AdhocServerScreen.cpp index 7beb8ad91d..040d77d9d0 100644 --- a/UI/AdhocServerScreen.cpp +++ b/UI/AdhocServerScreen.cpp @@ -726,6 +726,8 @@ void AdhocServerScreen::CreatePopupContents(UI::ViewGroup *parent) { CollapsibleSection *publicSection = innerView->Add(new CollapsibleSection(n->T("Public server list"), new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT))); for (const auto &entry : entries) { + if (entry.hidden) + continue; AddButtonFromEntry(publicSection, entry, false); } diff --git a/Windows/PPSSPP.vcxproj b/Windows/PPSSPP.vcxproj index 8135b96df9..55cd42e4e1 100644 --- a/Windows/PPSSPP.vcxproj +++ b/Windows/PPSSPP.vcxproj @@ -1177,10 +1177,34 @@ + + true + true + true + true + true + true + + + true + true + true + true + true + true + + + true + true + true + true + true + true + @@ -1411,6 +1435,14 @@ + + true + true + true + true + true + true + @@ -1426,4 +1458,4 @@ - + \ No newline at end of file diff --git a/Windows/PPSSPP.vcxproj.filters b/Windows/PPSSPP.vcxproj.filters index 687e8ba4b0..07285507bc 100644 --- a/Windows/PPSSPP.vcxproj.filters +++ b/Windows/PPSSPP.vcxproj.filters @@ -68,6 +68,9 @@ {55d277d0-1afa-464d-9bde-672334ad73fe} + + {a5b85611-e50f-4179-814d-426816c1e04d} + @@ -830,6 +833,15 @@ Other Platforms + + assets + + + assets + + + assets + @@ -864,5 +876,8 @@ Other Platforms\SDL + + assets + - + \ No newline at end of file