@@ -46,6 +46,8 @@ void SongListLayer::addSongsToScrollLayer(geode::ScrollLayer* scrollLayer, SongM
4646 const std::vector<std::string>& songsVector = songManager.getSongs ();
4747 float desiredContentHeight = SEARCH_BAR_ENABLED ? 36 .f : 0 .f ; // always start with the height of the blank song cell, which is guaranteed to be 36.f units
4848
49+ const SongToSongData& songToSongData = songManager.getSongToSongDataEntries ();
50+
4951 for (const std::string& song : songsVector) {
5052 if (std::ranges::find (alreadyAdded.begin (), alreadyAdded.end (), song) != alreadyAdded.end ()) continue ;
5153
@@ -55,19 +57,27 @@ void SongListLayer::addSongsToScrollLayer(geode::ScrollLayer* scrollLayer, SongM
5557
5658 if (songListFavoritesOnlyMode && songType != SongType::Favorited) continue ;
5759
60+ SongData songData {};
61+ bool songDataFromTheMap = false ;
5862 const std::filesystem::path& songFilePath = Utils::toProblematicString (song);
59- SongData songData = {
60- .actualFilePath = Utils::toNormalizedString (songFilePath),
61- .fileExtension = Utils::toNormalizedString (songFilePath.extension ()),
62- .fileName = Utils::toNormalizedString (songFilePath.filename ()),
63- .type = songType,
64- .isFromConfigOrAltDir = Utils::isFromConfigOrAlternateDir (songFilePath.parent_path ()),
65- .isEmpty = false
66- };
63+ auto songDataIterator = songToSongData.find (songFilePath);
64+ if (songDataIterator != songToSongData.end ()) {
65+ songData = songDataIterator->second ;
66+ songDataFromTheMap = true ;
67+ } else {
68+ songData = {
69+ .actualFilePath = Utils::toNormalizedString (songFilePath),
70+ .fileExtension = Utils::toNormalizedString (songFilePath.extension ()),
71+ .fileName = Utils::toNormalizedString (songFilePath.filename ()),
72+ .type = songType,
73+ .isFromConfigOrAltDir = Utils::isFromConfigOrAlternateDir (songFilePath.parent_path ()),
74+ .isEmpty = false
75+ };
76+ }
6777
6878 songData.displayName = SongListLayer::generateDisplayName (songData);
6979
70- if (SONG_SORTING_ENABLED && SAVED (" songListSortSongLength" )) songData.songLength = SongListLayer::getLength (songData.actualFilePath , reverse);
80+ if (SONG_SORTING_ENABLED && SAVED (" songListSortSongLength" ) && !songDataFromTheMap ) songData.songLength = SongListLayer::getLength (songData.actualFilePath , reverse);
7181
7282 if (SEARCH_BAR_ENABLED && !queryString.empty ()) {
7383 const bool contains = geode::utils::string::contains (geode::utils::string::toLower (songData.displayName ), geode::utils::string::toLower (queryString));
0 commit comments