39 void UnlistSong(
Song* song);
42 void Invalidate(
const Song* pStaleSong);
43 static auto GetPlaylists() -> std::map<std::string, Playlist>&;
44 static void SaveEnabledSongsToPref();
45 static void LoadEnabledSongsFromPref();
48 auto DifferentialReload() -> int;
49 auto DifferentialReloadDir(std::string dir) -> int;
51 auto IsGroupNeverCached(
const std::string& group)
const -> bool;
52 void SetFavoritedStatus(std::set<std::string>& favs);
53 void SetPermaMirroredStatus(std::set<std::string>& pmir);
54 void SetHasGoal(std::unordered_map<std::string, GoalsForChart>& goalmap);
56 auto GetSongGroupBannerPath(
const std::string& sSongGroup)
const
58 auto GetSongGroupBannerPaths()
const -> std::vector<std::string>
60 return m_sSongGroupBannerPaths;
63 void GetSongGroupNames(std::vector<std::string>& AddTo)
const;
64 auto GetSongGroupNames()
const ->
const std::vector<std::string>&;
65 auto DoesSongGroupExist(
const std::string& sSongGroup)
const -> bool;
66 auto GetSongGroupColor(
const std::string& sSongGroupName,
67 std::map<std::string, Playlist>& playlists =
73 auto GetStepsByChartkey(
const std::string& ck) ->
Steps*;
74 auto GetSongByChartkey(
const std::string& ck) ->
Song*;
75 void UnloadAllCalcDebugOutput();
76 auto IsChartLoaded(
const std::string& ck)
const ->
bool
78 return SongsByKey.count(ck) == 1 &&
79 StepsByKey.count(ck) ==
83 void ResetGroupColors();
85 static auto ShortenGroupName(
const std::string& sLongGroupName)
93 auto GetSongs(
const std::string& sGroupName)
const
94 ->
const std::vector<Song*>&;
95 void ForceReloadSongGroup(
const std::string& sGroupName)
const;
96 void GenerateCachefilesForGroup(
const std::string& sGroupName)
const;
112 return m_pPopularSongs;
115 void GetFavoriteSongs(std::vector<Song*>& songs)
const;
120 auto GetNumAdditionalSongs() const ->
int;
121 auto GetNumSongGroups() const ->
int;
123 auto GetSongGroupByIndex(const
unsigned index) -> std::
string
125 return m_sSongGroupNames[index];
128 static void DeleteSteps(
Steps* pSteps);
129 static auto WasLoadedFromAdditionalSongs(
const Song* pSong) -> bool;
131 auto GetSongFromDir(std::string sDir)
const ->
Song*;
136 void PushSelf(lua_State* L);
138 std::string activeplaylist =
"";
139 std::string playlistcourse =
"";
140 void ReconcileChartKeysForReloadedSong(
142 const std::vector<std::string>& oldChartkeys);
143 void MakeSongGroupsFromPlaylists(
144 std::map<std::string, Playlist>& playlists = GetPlaylists());
146 const std::string& pl,
147 std::map<std::string, Playlist>& playlists = GetPlaylists());
148 static void MakePlaylistFromFavorites(
149 std::set<std::string>& favs,
150 std::map<std::string, Playlist>& playlists = GetPlaylists());
152 std::map<std::string, std::vector<Song*>> groupderps;
153 std::vector<std::string> playlistGroups;
157 static void FinalizeSong(
Song* pNewSong,
const std::string& dir);
158 bool OpenSongFolder(
const Song* pSong);
161 auto SaveCalcTestCreateNode() const ->
XNode*;
162 static
void LoadCalcTestNode();
163 void SaveCalcTestXmlToDir() const;
165 std::unique_ptr<
Calc> calc;
168 void AddKeyedPointers(
Song* new_song);
169 std::unordered_map<std::
string,
Song*> SongsByKey;
170 std::unordered_map<std::
string,
Steps*> StepsByKey;
174 static
bool InstallSmzip(const std::
string& zipFile);
177 void LoadStepManiaSongDir(std::
string sDir,
LoadingWindow* ld);
178 static auto IsSongDir(const std::
string& sDir) ->
bool;
179 auto AddGroup(const std::
string& sDir, const std::
string& sGroupDirName)
182 void AddSongToList(
Song* new_song);
185 std::map<std::
string,
Song*> m_SongsByDir;
187 std::vector<std::pair<std::pair<std::
string,
unsigned int>,
Song*>*> cache;
189 std::set<std::
string> m_GroupsToNeverCache;
194 std::vector<
Song*> m_pPopularSongs;
196 std::vector<std::
string> m_sSongGroupNames;
197 std::vector<std::
string>
198 m_sSongGroupBannerPaths;
205 auto operator()(
const std::string& s,
const std::string& t)
const
208 return CompareStringsAsc(s, t);
211 using SongPointerVector = std::vector<Song*>;
212 std::map<std::string, SongPointerVector, Comp> m_mapSongGroupIndex;