1
0
Fork 0
mirror of https://github.com/DarkMatterCore/nxdumptool.git synced 2025-02-16 21:45:39 +00:00

Fix building issues.

An unordered map is now being used to hold ListItem + TitleApplicationMetadata pairs.
This commit is contained in:
Pablo Curiel 2021-06-23 19:02:47 -04:00
parent cfe293af7c
commit b5507b38a6
4 changed files with 23 additions and 13 deletions

View file

@ -128,7 +128,7 @@ namespace nxdt::tasks
~TitleTask(void); ~TitleTask(void);
/* Intentionally left here to let system titles views retrieve metadata. */ /* Intentionally left here to let system titles views retrieve metadata. */
TitleApplicationMetadataVector* GetApplicationMetadata(bool is_system); const TitleApplicationMetadataVector* GetApplicationMetadata(bool is_system);
ALWAYS_INLINE TitleEvent::Subscription RegisterListener(TitleEvent::Callback cb) ALWAYS_INLINE TitleEvent::Subscription RegisterListener(TitleEvent::Callback cb)
{ {

View file

@ -33,10 +33,10 @@ namespace nxdt::views
{ {
private: private:
nxdt::tasks::TitleTask *title_task = nullptr; nxdt::tasks::TitleTask *title_task = nullptr;
nxdt::tasks::VoidEvent::Subscription title_task_sub; nxdt::tasks::TitleEvent::Subscription title_task_sub;
nxdt::tasks::TitleApplicationMetadataVector *user_app_metadata = nullptr; std::unordered_map<brls::ListItem*, TitleApplicationMetadata*> list_item_metadata;
void PopulateList(void); void PopulateList(const nxdt::tasks::TitleApplicationMetadataVector* user_app_metadata);
public: public:
UserTitlesTab(nxdt::tasks::TitleTask *title_task); UserTitlesTab(nxdt::tasks::TitleTask *title_task);

View file

@ -142,7 +142,7 @@ namespace nxdt::tasks
} }
} }
TitleApplicationMetadataVector* TitleTask::GetApplicationMetadata(bool is_system) const TitleApplicationMetadataVector* TitleTask::GetApplicationMetadata(bool is_system)
{ {
return (is_system ? &(this->system_metadata) : &(this->user_metadata)); return (is_system ? &(this->system_metadata) : &(this->user_metadata));
} }

View file

@ -29,12 +29,12 @@ namespace nxdt::views
UserTitlesTab::UserTitlesTab(nxdt::tasks::TitleTask *title_task) : LayeredErrorFrame("user_titles_tab/no_titles_available"_i18n), title_task(title_task) UserTitlesTab::UserTitlesTab(nxdt::tasks::TitleTask *title_task) : LayeredErrorFrame("user_titles_tab/no_titles_available"_i18n), title_task(title_task)
{ {
/* Populate list. */ /* Populate list. */
this->PopulateList(); this->PopulateList(this->title_task->GetApplicationMetadata(false));
/* Subscribe to title event. */ /* Subscribe to title event. */
this->title_task_sub = this->title_task->RegisterListener([this](void) { this->title_task_sub = this->title_task->RegisterListener([this](const nxdt::tasks::TitleApplicationMetadataVector* user_app_metadata) {
/* Update list. */ /* Update list. */
this->PopulateList(); this->PopulateList(user_app_metadata);
brls::Application::notify("user_titles_tab/notification"_i18n); brls::Application::notify("user_titles_tab/notification"_i18n);
}); });
} }
@ -43,14 +43,17 @@ namespace nxdt::views
{ {
/* Unregister task listener. */ /* Unregister task listener. */
this->title_task->UnregisterListener(this->title_task_sub); this->title_task->UnregisterListener(this->title_task_sub);
/* Clear user application metadata map. */
this->list_item_metadata.clear();
} }
void UserTitlesTab::PopulateList(void) void UserTitlesTab::PopulateList(const nxdt::tasks::TitleApplicationMetadataVector* user_app_metadata)
{ {
bool refocus = false; if (!user_app_metadata) return;
this->user_app_metadata = this->title_task->GetApplicationMetadata(false); bool refocus = false;
size_t user_app_metadata_count = this->user_app_metadata->size(); size_t user_app_metadata_count = user_app_metadata->size();
if (user_app_metadata_count) if (user_app_metadata_count)
{ {
@ -75,15 +78,22 @@ namespace nxdt::views
this->list->clear(); this->list->clear();
this->list->invalidate(true); this->list->invalidate(true);
/* Clear our private user application map. */
this->list_item_metadata.clear();
/* Immediately return if we have no user application metadata. */ /* Immediately return if we have no user application metadata. */
if (!user_app_metadata_count) return; if (!user_app_metadata_count) return;
/* Populate list. */ /* Populate list. */
for(TitleApplicationMetadata *cur_app_metadata : *(this->user_app_metadata)) for(TitleApplicationMetadata *cur_app_metadata : *user_app_metadata)
{ {
/* Add list item for this application metadata to our list. */
brls::ListItem *list_item = new brls::ListItem(std::string(cur_app_metadata->lang_entry.name), "", std::string(cur_app_metadata->lang_entry.author)); brls::ListItem *list_item = new brls::ListItem(std::string(cur_app_metadata->lang_entry.name), "", std::string(cur_app_metadata->lang_entry.author));
list_item->setThumbnail(cur_app_metadata->icon, cur_app_metadata->icon_size); list_item->setThumbnail(cur_app_metadata->icon, cur_app_metadata->icon_size);
this->list->addView(list_item); this->list->addView(list_item);
/* Update our private user application metadata map. */
this->list_item_metadata.insert(std::make_pair(list_item, cur_app_metadata));
} }
/* Switch to the list. */ /* Switch to the list. */