From 30cf4826f8641bf540fc99c30e962f1a61c94415 Mon Sep 17 00:00:00 2001 From: ITotalJustice <47043333+ITotalJustice@users.noreply.github.com> Date: Sat, 3 May 2025 15:30:40 +0100 Subject: [PATCH] add code for calculating games size, stubbed for now as the ns calls are too slow to be usable. --- sphaira/include/ui/menus/game_menu.hpp | 1 + sphaira/source/ui/menus/game_menu.cpp | 30 +++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/sphaira/include/ui/menus/game_menu.hpp b/sphaira/include/ui/menus/game_menu.hpp index 45bad0c..9d57af1 100644 --- a/sphaira/include/ui/menus/game_menu.hpp +++ b/sphaira/include/ui/menus/game_menu.hpp @@ -20,6 +20,7 @@ enum class NacpLoadStatus { struct Entry { u64 app_id{}; + s64 size{}; char display_version[0x10]{}; NacpLanguageEntry lang{}; int image{}; diff --git a/sphaira/source/ui/menus/game_menu.cpp b/sphaira/source/ui/menus/game_menu.cpp index 04ff129..519ee72 100644 --- a/sphaira/source/ui/menus/game_menu.cpp +++ b/sphaira/source/ui/menus/game_menu.cpp @@ -18,6 +18,21 @@ namespace sphaira::ui::menu::game { namespace { +// thank you Shchmue ^^ +struct ApplicationOccupiedSizeEntry { + u8 storageId; + u8 padding[0x7]; + u64 sizeApplication; + u64 sizePatch; + u64 sizeAddOnContent; +}; + +struct ApplicationOccupiedSize { + ApplicationOccupiedSizeEntry entry[4]; +}; + +static_assert(sizeof(ApplicationOccupiedSize) == sizeof(NsApplicationOccupiedSize)); + using MetaEntries = std::vector; Result Notify(Result rc, const std::string& error_message) { @@ -357,7 +372,20 @@ void Menu::ScanHomebrew() { continue; } - m_entries.emplace_back(e.application_id); + s64 size{}; + // code for sorting by size, it's too slow however... + #if 0 + ApplicationOccupiedSize occupied_size; + if (R_SUCCEEDED(nsCalculateApplicationOccupiedSize(e.application_id, (NsApplicationOccupiedSize*)&occupied_size))) { + for (auto& s : occupied_size.entry) { + size += s.sizeApplication; + size += s.sizePatch; + size += s.sizeAddOnContent; + } + } + #endif + + m_entries.emplace_back(e.application_id, size); } offset += record_count;