From 5caddb55a70bd1be64830d655ef5e567b51a5ffa Mon Sep 17 00:00:00 2001 From: Fleeym <61891787+Fleeym@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:18:03 +0300 Subject: [PATCH] fix weird daily bugs --- src/hooks/custom_song_widget.cpp | 44 ++++++++++++++++++---------- src/hooks/music_download_manager.cpp | 3 ++ src/managers/nong_manager.cpp | 23 +++++++++++---- src/managers/nong_manager.hpp | 14 +++++++++ 4 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/hooks/custom_song_widget.cpp b/src/hooks/custom_song_widget.cpp index 518d2ac..e8a46cc 100644 --- a/src/hooks/custom_song_widget.cpp +++ b/src/hooks/custom_song_widget.cpp @@ -40,9 +40,11 @@ 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; } @@ -123,10 +125,11 @@ class $modify(JBSongWidget, CustomSongWidget) { NongManager::get()->createUnknownDefault(obj->m_songID); } } - std::optional result = NongManager::get()->getNongs(obj->m_songID); + int id = obj->m_songID; + std::optional result = NongManager::get()->getNongs(id); if (!result.has_value()) { - NongManager::get()->createDefault(obj->m_songID); - result = NongManager::get()->getNongs(obj->m_songID); + NongManager::get()->createDefault(id); + result = NongManager::get()->getNongs(id); if (!result.has_value()) { return; } @@ -134,22 +137,29 @@ class $modify(JBSongWidget, CustomSongWidget) { NongData nongData = result.value(); - SongInfo active = NongManager::get()->getActiveNong(obj->m_songID).value(); - if (!nongData.defaultValid && active.path == nongData.defaultPath) { - NongManager::get()->fixDefault(obj); - m_sliderGroove->setVisible(false); - nongData = NongManager::get()->getNongs(obj->m_songID).value(); - } - if (!nongData.defaultValid && active.path == nongData.defaultPath) { - NongManager::get()->prepareCorrectDefault(obj->m_songID); + SongInfo active = NongManager::get()->getActiveNong(id).value(); + if ( + !nongData.defaultValid + && active.path == nongData.defaultPath + && !NongManager::get()->isFixingDefault(id) + ) { + NongManager::get()->prepareCorrectDefault(id); this->template addEventListener( - [this](SongInfoObject* obj) { + [this, id](SongInfoObject* obj) { + 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); + m_sliderGroove->setVisible(false); + m_fields->nongs = NongManager::get()->getNongs(id).value(); this->createSongLabels(); return ListenerResult::Propagate; }, - obj->m_songID + id ); - nongData = NongManager::get()->getNongs(obj->m_songID).value(); + auto result = NongManager::get()->getNongs(id); + if (result) { + nongData = result.value(); + } } m_fields->nongs = nongData; this->createSongLabels(); @@ -192,7 +202,11 @@ class $modify(JBSongWidget, CustomSongWidget) { void createSongLabels() { int songID = m_songInfoObject->m_songID; - auto active = NongManager::get()->getActiveNong(songID).value(); + auto res = NongManager::get()->getActiveNong(songID); + if (!res) { + return; + } + SongInfo active = res.value(); if (m_fields->menu != nullptr) { m_fields->menu->removeFromParent(); } diff --git a/src/hooks/music_download_manager.cpp b/src/hooks/music_download_manager.cpp index 9947cd0..8dc2cb9 100644 --- a/src/hooks/music_download_manager.cpp +++ b/src/hooks/music_download_manager.cpp @@ -30,6 +30,9 @@ class $modify(MusicDownloadManager) { if (og == nullptr) { return og; } + if (NongManager::get()->hasActions(id)) { + return og; + } auto active = NongManager::get()->getActiveNong(id); if (active.has_value()) { auto value = active.value(); diff --git a/src/managers/nong_manager.cpp b/src/managers/nong_manager.cpp index 9244405..be559e3 100644 --- a/src/managers/nong_manager.cpp +++ b/src/managers/nong_manager.cpp @@ -21,11 +21,6 @@ std::optional NongManager::getNongs(int songID) { return std::nullopt; } - auto actions = this->getSongIDActions(songID); - if (actions.has_value()) { - return std::nullopt; - } - return m_state.m_nongs[songID]; } @@ -53,6 +48,24 @@ std::optional NongManager::getActiveNong(int songID) { return std::nullopt; } +bool NongManager::hasActions(int songID) { + return m_getSongInfoActions.contains(songID); +} + +bool NongManager::isFixingDefault(int songID) { + if (!m_getSongInfoActions.contains(songID)) { + return false; + } + + for (auto action : m_getSongInfoActions[songID]) { + if (action == SongInfoGetAction::FixDefault) { + return true; + } + } + + return false; +} + std::optional NongManager::getDefaultNong(int songID) { auto nongs_res = this->getNongs(songID); if (!nongs_res.has_value()) { diff --git a/src/managers/nong_manager.hpp b/src/managers/nong_manager.hpp index 2497f2d..afd4807 100644 --- a/src/managers/nong_manager.hpp +++ b/src/managers/nong_manager.hpp @@ -157,6 +157,20 @@ class NongManager : public CCObject { */ void createUnknownDefault(int songID); + /** + * Checks if a song ID has actions associated to it + * + * @param songID the id of the song + */ + bool hasActions(int songID); + + /** + * Checks if the default song is being fixed for a song ID + * + * @param songID the id of the song + */ + bool isFixingDefault(int songID); + /** * Returns the savefile path *