From fc806b62f00cab9192df976d3d2ed2f3470b856e Mon Sep 17 00:00:00 2001 From: Fleeym <61891787+Fleeym@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:34:48 +0300 Subject: [PATCH] attempts to fix "default fix" --- src/events/get_song_info_event.cpp | 4 ++-- src/hooks/custom_song_widget.cpp | 5 ++-- src/managers/nong_manager.cpp | 37 +++++++++++------------------- src/managers/nong_manager.hpp | 6 ++--- src/ui/nong_cell.cpp | 18 +++++---------- 5 files changed, 28 insertions(+), 42 deletions(-) diff --git a/src/events/get_song_info_event.cpp b/src/events/get_song_info_event.cpp index 96772e6..e742e68 100644 --- a/src/events/get_song_info_event.cpp +++ b/src/events/get_song_info_event.cpp @@ -5,12 +5,12 @@ ListenerResult GetSongInfoEventFilter::handle(MiniFunction fn, GetSongInfoEvent* event) { if (event->getObject() == nullptr) { - return ListenerResult::Stop; + return ListenerResult::Propagate; } if (event->getObject()->m_songID == m_songID) { fn(event->getObject()); - return ListenerResult::Stop; + return ListenerResult::Propagate; } return ListenerResult::Propagate; } \ No newline at end of file diff --git a/src/hooks/custom_song_widget.cpp b/src/hooks/custom_song_widget.cpp index e8a46cc..c0d5a6a 100644 --- a/src/hooks/custom_song_widget.cpp +++ b/src/hooks/custom_song_widget.cpp @@ -40,11 +40,9 @@ class $modify(JBSongWidget, CustomSongWidget) { bool unk, bool isMusicLibrary ) { - log::info("Calling init..."); if (!CustomSongWidget::init(songInfo, songDelegate, showSongSelect, showPlayMusic, showDownload, isRobtopSong, unk, isMusicLibrary)) { return false; } - log::info("Init called"); if (isRobtopSong) { return true; } @@ -146,6 +144,9 @@ class $modify(JBSongWidget, CustomSongWidget) { NongManager::get()->prepareCorrectDefault(id); this->template addEventListener( [this, id](SongInfoObject* obj) { + if (!NongManager::get()->isFixingDefault(id)) { + return ListenerResult::Propagate; + } log::info("update song object"); log::info("{}, {}, {}, {}, {}", obj->m_songName, obj->m_artistName, obj->m_songUrl, obj->m_isUnkownSong, obj->m_songID); NongManager::get()->fixDefault(obj); diff --git a/src/managers/nong_manager.cpp b/src/managers/nong_manager.cpp index be559e3..c23a97a 100644 --- a/src/managers/nong_manager.cpp +++ b/src/managers/nong_manager.cpp @@ -465,30 +465,23 @@ ListenerResult NongManager::onSongInfoFetched(GetSongInfoEvent* event) { } auto actions = res.value(); - for (auto const& action : actions) { - switch (action) { - case SongInfoGetAction::CreateDefault: { - if (obj == nullptr) { - this->createUnknownDefault(id); - } else { - this->createDefaultCallback(obj); - } - break; - } - case SongInfoGetAction::FixDefault: { - if (obj == nullptr) { - break; - } - this->fixDefault(obj); - break; - } + if (actions.contains(SongInfoGetAction::CreateDefault)) { + if (obj == nullptr) { + this->createUnknownDefault(id); + } else { + this->createDefaultCallback(obj); + } + } + if (actions.contains(SongInfoGetAction::FixDefault)) { + if (obj != nullptr) { + this->fixDefault(obj); } } m_getSongInfoActions.erase(id); return ListenerResult::Propagate; } -std::optional> NongManager::getSongIDActions(int songID) { +std::optional> NongManager::getSongIDActions(int songID) { if (!m_getSongInfoActions.contains(songID)) { return std::nullopt; } @@ -507,13 +500,11 @@ void NongManager::addSongIDAction(int songID, SongInfoGetAction action) { return; } - for (auto const& existingAction : m_getSongInfoActions[songID]) { - if (action == existingAction) { - return; - } + if (m_getSongInfoActions[songID].contains(action)) { + return; } - m_getSongInfoActions[songID].push_back(action); + m_getSongInfoActions[songID].insert(action); } } diff --git a/src/managers/nong_manager.hpp b/src/managers/nong_manager.hpp index afd4807..e0cb731 100644 --- a/src/managers/nong_manager.hpp +++ b/src/managers/nong_manager.hpp @@ -4,8 +4,8 @@ #include #include #include -#include #include +#include #include #include "../types/song_info.hpp" @@ -26,10 +26,10 @@ class NongManager : public CCObject { inline static NongManager* m_instance = nullptr; NongState m_state; std::unordered_map> m_getSongInfoCallbacks; - std::unordered_map> m_getSongInfoActions; + std::unordered_map> m_getSongInfoActions; EventListener> m_songInfoListener = { this, &NongManager::onSongInfoFetched }; - std::optional> getSongIDActions(int songID); + std::optional> getSongIDActions(int songID); void addSongIDAction(int songID, SongInfoGetAction action); void createDefaultCallback(SongInfoObject* obj); void setDefaultState(); diff --git a/src/ui/nong_cell.cpp b/src/ui/nong_cell.cpp index d96eba2..2640d99 100644 --- a/src/ui/nong_cell.cpp +++ b/src/ui/nong_cell.cpp @@ -130,24 +130,18 @@ void NongCell::onFixDefault(CCObject* target) { "No", "Yes", [this](FLAlertLayer* alert, bool btn2) { - if (btn2) { - NongManager::get()->markAsInvalidDefault(m_parentPopup->getSongID()); - - m_parentPopup->updateParentWidget(m_songInfo); - // TODO I swear to god I'll regret this some day - this->retain(); - m_parentPopup->retain(); - m_parentPopup->m_mainLayer->retain(); + if (btn2 && !NongManager::get()->isFixingDefault(m_parentPopup->getSongID())) { this->template addEventListener( [this](auto song) { - m_parentPopup->refreshList(); + if (m_parentPopup) { + m_parentPopup->refreshList(); + } FLAlertLayer::create("Success", "Default song data was refetched successfully!", "Ok")->show(); - this->release(); - m_parentPopup->release(); - m_parentPopup->m_mainLayer->release(); return ListenerResult::Propagate; }, m_parentPopup->getSongID() ); + NongManager::get()->markAsInvalidDefault(m_parentPopup->getSongID()); + NongManager::get()->prepareCorrectDefault(m_parentPopup->getSongID()); } } );