17 #include "MediaSource.h" 18 #include "addons/Scraper.h" 19 #include "dbwrappers/Database.h" 20 #include "settings/LibExportSettings.h" 21 #include "utils/SortUtils.h" 33 typedef std::vector<field_value> sql_record;
42 #define ERROR_CANCEL 0 43 #define ERROR_DATABASE 315 44 #define ERROR_REORG_SONGS 319 45 #define ERROR_REORG_ARTIST 321 46 #define ERROR_REORG_OTHER 323 47 #define ERROR_REORG_PATH 325 48 #define ERROR_REORG_ALBUM 327 49 #define ERROR_WRITING_CHANGES 329 50 #define ERROR_COMPRESSING 332 52 #define NUM_SONGS_BEFORE_COMMIT 500 76 std::string mediaType;
107 bool Open()
override;
108 bool CommitTransaction()
override;
112 bool LookupCDDBInfo(
bool bRequery =
false);
113 void DeleteCDDBInfo();
146 int AddSong(
const int idSong,
149 const std::string& strTitle,
150 const std::string& strMusicBrainzTrackID,
151 const std::string& strPathAndFileName,
152 const std::string& strComment,
153 const std::string& strMood,
154 const std::string& strThumb,
155 const std::string& artistDisp,
156 const std::string& artistSort,
157 const std::vector<std::string>& genres,
160 const std::string& strReleaseDate,
161 const std::string& strOrigReleaseDate,
162 std::string& strDiscSubtitle,
163 const int iTimesPlayed,
175 bool GetSong(
int idSong,
CSong& song);
183 bool UpdateSong(
CSong& song,
bool bArtists =
true,
bool bArtistLinks =
true);
215 int UpdateSong(
int idSong,
216 const std::string& strTitle,
217 const std::string& strMusicBrainzTrackID,
218 const std::string& strPathAndFileName,
219 const std::string& strComment,
220 const std::string& strMood,
221 const std::string& strThumb,
222 const std::string& artistDisp,
223 const std::string& artistSort,
224 const std::vector<std::string>& genres,
227 const std::string& strReleaseDate,
228 const std::string& strOrigReleaseDate,
229 const std::string& strDiscSubtitle,
244 bool GetSongByFileName(
const std::string& strFileName,
CSong& song, int64_t startOffset = 0);
245 bool GetSongsByPath(
const std::string& strPath,
MAPSONGS& songmap,
bool bAppendToMap =
false);
246 bool Search(
const std::string& search,
CFileItemList& items);
247 bool RemoveSongsFromPath(
const std::string& path,
MAPSONGS& songmap,
bool exact =
true);
248 void CheckArtistLinksChanged();
249 bool SetSongUserrating(
const std::string& filePath,
int userrating);
250 bool SetSongUserrating(
int idSong,
int userrating);
251 bool SetSongVotes(
const std::string& filePath,
int votes);
252 int GetSongByArtistAndAlbumAndTitle(
const std::string& strArtist,
253 const std::string& strAlbum,
254 const std::string& strTitle);
264 bool AddAlbum(
CAlbum& album,
int idSource);
270 bool UpdateAlbum(
CAlbum& album);
288 int AddAlbum(
const std::string& strAlbum,
289 const std::string& strMusicBrainzAlbumID,
290 const std::string& strReleaseGroupMBID,
291 const std::string& strArtist,
292 const std::string& strArtistSort,
293 const std::string& strGenre,
294 const std::string& strReleaseDate,
295 const std::string& strOrigReleaseDate,
297 const std::string& strRecordLabel,
298 const std::string& strType,
299 const std::string& strReleaseStatus,
301 CAlbum::ReleaseType releaseType);
309 bool GetAlbum(
int idAlbum,
CAlbum& album,
bool getSongs =
true);
310 int UpdateAlbum(
int idAlbum,
311 const std::string& strAlbum,
312 const std::string& strMusicBrainzAlbumID,
313 const std::string& strReleaseGroupMBID,
314 const std::string& strArtist,
315 const std::string& strArtistSort,
316 const std::string& strGenre,
317 const std::string& strMoods,
318 const std::string& strStyles,
319 const std::string& strThemes,
320 const std::string& strReview,
321 const std::string& strImage,
322 const std::string& strLabel,
323 const std::string& strType,
324 const std::string& strReleaseStatus,
328 const std::string& strReleaseDate,
329 const std::string& strOrigReleaseDate,
332 CAlbum::ReleaseType releaseType,
334 bool ClearAlbumLastScrapedTime(
int idAlbum);
335 bool HasAlbumBeenScraped(
int idAlbum);
340 bool AddAudioBook(
const CFileItem& item);
341 bool SetResumeBookmarkForAudioBook(
const CFileItem& item,
int bookmark);
342 bool GetResumeBookmarkForAudioBook(
const CFileItem& item,
int& bookmark);
347 bool InsideScannedPath(
const std::string& path);
350 int GetAlbumIdByPath(
const std::string& path);
351 bool GetAlbumFromSong(
int idSong,
CAlbum& album);
352 int GetAlbumByName(
const std::string& strAlbum,
const std::string& strArtist =
"");
353 int GetAlbumByName(
const std::string& strAlbum,
const std::vector<std::string>& artist);
354 bool GetMatchingMusicVideoAlbum(
const std::string& strAlbum,
355 const std::string& strArtist,
357 std::string& strReview);
358 bool SearchAlbumsByArtistName(
const std::string& strArtist,
CFileItemList& items);
359 int GetAlbumByMatch(
const CAlbum& album);
360 std::string GetAlbumById(
int id);
361 std::string GetAlbumDiscTitle(
int idAlbum,
int idDisc);
362 bool SetAlbumUserrating(
const int idAlbum,
int userrating);
363 int GetAlbumDiscsCount(
int idAlbum);
368 bool UpdateArtist(
const CArtist& artist);
370 int AddArtist(
const std::string& strArtist,
371 const std::string& strMusicBrainzArtistID,
372 const std::string& strSortName,
373 bool bScrapedMBID =
false);
374 int AddArtist(
const std::string& strArtist,
375 const std::string& strMusicBrainzArtistID,
376 bool bScrapedMBID =
false);
377 bool GetArtist(
int idArtist,
CArtist& artist,
bool fetchAll =
false);
378 bool GetArtistExists(
int idArtist);
380 int GetArtistFromMBID(
const std::string& strMusicBrainzArtistID, std::string& artistname);
381 int UpdateArtist(
int idArtist,
382 const std::string& strArtist,
383 const std::string& strSortName,
384 const std::string& strMusicBrainzArtistID,
386 const std::string& strType,
387 const std::string& strGender,
388 const std::string& strDisambiguation,
389 const std::string& strBorn,
390 const std::string& strFormed,
391 const std::string& strGenres,
392 const std::string& strMoods,
393 const std::string& strStyles,
394 const std::string& strInstruments,
395 const std::string& strBiography,
396 const std::string& strDied,
397 const std::string& strDisbanded,
398 const std::string& strYearsActive,
399 const std::string& strImage);
400 bool UpdateArtistScrapedMBID(
int idArtist,
const std::string& strMusicBrainzArtistID);
401 bool GetTranslateBlankArtist() {
return m_translateBlankArtist; }
402 void SetTranslateBlankArtist(
bool translate) { m_translateBlankArtist = translate; }
403 bool HasArtistBeenScraped(
int idArtist);
404 bool ClearArtistLastScrapedTime(
int idArtist);
405 int AddArtistDiscography(
int idArtist,
const CDiscoAlbum& discoAlbum);
406 bool DeleteArtistDiscography(
int idArtist);
407 bool GetArtistDiscography(
int idArtist,
CFileItemList& items);
409 std::string GetArtistById(
int id);
410 int GetArtistByName(
const std::string& strArtist);
411 int GetArtistByMatch(
const CArtist& artist);
412 bool GetArtistFromSong(
int idSong,
CArtist& artist);
413 bool IsSongArtist(
int idSong,
int idArtist);
414 bool IsSongAlbumArtist(
int idSong,
int idArtist);
415 std::string GetRoleById(
int id);
421 bool UpdateArtistSortNames(
int idArtist = -1);
426 int AddPath(
const std::string& strPath);
428 bool GetPaths(std::set<std::string>& paths);
429 bool SetPathHash(
const std::string& path,
const std::string& hash);
430 bool GetPathHash(
const std::string& path, std::string& hash);
431 bool GetAlbumPaths(
int idAlbum, std::vector<std::pair<std::string, int>>& paths);
432 bool GetAlbumPath(
int idAlbum, std::string& basePath);
433 int GetDiscnumberForPathID(
int idPath);
434 bool GetOldArtistPath(
int idArtist, std::string& path);
435 bool GetArtistPath(
const CArtist& artist, std::string& path);
436 bool GetAlbumFolder(
const CAlbum& album,
const std::string& strAlbumPath, std::string& strFolder);
437 bool GetArtistFolderName(
const CArtist& artist, std::string& strFolder);
438 bool GetArtistFolderName(
const std::string& strArtist,
439 const std::string& strMusicBrainzArtistID,
440 std::string& strFolder);
445 bool UpdateSources();
446 int AddSource(
const std::string& strName,
447 const std::string& strMultipath,
448 const std::vector<std::string>& vecPaths,
450 int UpdateSource(
const std::string& strOldName,
451 const std::string& strName,
452 const std::string& strMultipath,
453 const std::vector<std::string>& vecPaths);
454 bool RemoveSource(
const std::string& strName);
455 int GetSourceFromPath(
const std::string& strPath);
456 bool AddAlbumSource(
int idAlbum,
int idSource);
457 bool AddAlbumSources(
int idAlbum,
const std::string& strPath);
458 bool DeleteAlbumSources(
int idAlbum);
461 bool GetSourcesByArtist(
int idArtist,
CFileItem* item);
462 bool GetSourcesByAlbum(
int idAlbum,
CFileItem* item);
463 bool GetSourcesBySong(
int idSong,
const std::string& strPath,
CFileItem* item);
464 int GetSourceByName(
const std::string& strSource);
465 std::string GetSourceById(
int id);
470 int AddGenre(std::string& strGenre);
471 std::string GetGenreById(
int id);
472 int GetGenreByName(
const std::string& strGenre);
477 bool AddAlbumArtist(
int idArtist,
int idAlbum,
const std::string& strArtist,
int iOrder);
478 bool GetAlbumsByArtist(
int idArtist, std::vector<int>& albums);
479 bool GetArtistsByAlbum(
int idAlbum,
CFileItem* item);
480 bool GetArtistsByAlbum(
int idAlbum, std::vector<std::string>& artistIDs);
481 bool DeleteAlbumArtistsByAlbum(
int idAlbum);
483 int AddRole(
const std::string& strRole);
484 bool AddSongArtist(
int idArtist,
486 const std::string& strRole,
487 const std::string& strArtist,
490 int idArtist,
int idSong,
int idRole,
const std::string& strArtist,
int iOrder);
491 int AddSongContributor(
int idSong,
492 const std::string& strRole,
493 const std::string& strArtist,
494 const std::string& strSort);
495 void AddSongContributors(
int idSong,
496 const VECMUSICROLES& contributors,
497 const std::string& strSort);
498 int GetRoleByName(
const std::string& strRole);
499 bool GetRolesByArtist(
int idArtist,
CFileItem* item);
500 bool GetSongsByArtist(
int idArtist, std::vector<int>& songs);
501 bool GetArtistsBySong(
int idSong, std::vector<int>& artists);
502 bool DeleteSongArtistsBySong(
int idSong);
504 bool AddSongGenres(
int idSong,
const std::vector<std::string>& genres);
505 bool GetGenresBySong(
int idSong, std::vector<int>& genres);
507 bool GetGenresByAlbum(
int idAlbum,
CFileItem* item);
509 bool GetGenresByArtist(
int idArtist,
CFileItem* item);
510 bool GetIsAlbumArtist(
int idArtist,
CFileItem* item);
515 bool GetTop100(
const std::string& strBaseDir,
CFileItemList& items);
516 bool GetTop100Albums(VECALBUMS& albums);
517 bool GetTop100AlbumSongs(
const std::string& strBaseDir,
CFileItemList& item);
522 bool GetRecentlyAddedAlbums(VECALBUMS& albums,
unsigned int limit = 0);
523 bool GetRecentlyAddedAlbumSongs(
const std::string& strBaseDir,
525 unsigned int limit = 0);
526 bool GetRecentlyPlayedAlbums(VECALBUMS& albums);
527 bool GetRecentlyPlayedAlbumSongs(
const std::string& strBaseDir,
CFileItemList& item);
532 int GetCompilationAlbumsCount();
537 bool IsAlbumBoxset(
int idAlbum);
538 int GetBoxsetsCount();
540 int GetSinglesCount();
542 int GetArtistCountForRole(
int role);
543 int GetArtistCountForRole(
const std::string& strRole);
549 void IncrementPlayCount(
const CFileItem& item);
550 bool CleanupOrphanedItems();
555 bool GetGenresNav(
const std::string& strBaseDir,
558 bool countOnly =
false);
559 bool GetSourcesNav(
const std::string& strBaseDir,
562 bool countOnly =
false);
563 bool GetYearsNav(
const std::string& strBaseDir,
566 bool GetRolesNav(
const std::string& strBaseDir,
569 bool GetArtistsNav(
const std::string& strBaseDir,
571 bool albumArtistsOnly =
false,
577 bool countOnly =
false);
578 bool GetCommonNav(
const std::string& strBaseDir,
579 const std::string& table,
580 const std::string& labelField,
584 bool GetAlbumTypesNav(
const std::string& strBaseDir,
587 bool countOnly =
false);
588 bool GetMusicLabelsNav(
const std::string& strBaseDir,
591 bool countOnly =
false);
592 bool GetAlbumsNav(
const std::string& strBaseDir,
598 bool countOnly =
false);
599 bool GetDiscsNav(
const std::string& strBaseDir,
604 bool countOnly =
false);
605 bool GetAlbumsByYear(
const std::string& strBaseDir,
CFileItemList& items,
int year);
606 bool GetSongsNav(
const std::string& strBaseDir,
612 bool GetSongsByYear(
const std::string& baseDir,
CFileItemList& items,
int year);
613 bool GetSongsByWhere(
const std::string& baseDir,
617 bool GetSongsFullByWhere(
const std::string& baseDir,
621 bool artistData =
false);
622 bool GetAlbumsByWhere(
const std::string& baseDir,
626 bool countOnly =
false);
627 bool GetDiscsByWhere(
const std::string& baseDir,
631 bool countOnly =
false);
636 bool countOnly =
false);
637 bool GetArtistsByWhere(
const std::string& strBaseDir,
641 bool countOnly =
false);
642 int GetDiscsCount(
const std::string& baseDir,
const Filter& filter =
Filter());
655 unsigned int GetRandomSongIDs(
const Filter& filter, std::vector<std::pair<int, int>>& songIDs);
660 bool GetGenresJSON(
CFileItemList& items,
bool bSources =
false);
661 bool GetArtistsByWhereJSON(
const std::set<std::string>& fields,
662 const std::string& baseDir,
666 bool GetAlbumsByWhereJSON(
const std::set<std::string>& fields,
667 const std::string& baseDir,
671 bool GetSongsByWhereJSON(
const std::set<std::string>& fields,
672 const std::string& baseDir,
680 bool SetScraper(
int id,
const CONTENT_TYPE& content,
const ADDON::ScraperPtr&
scraper);
681 bool SetScraperAll(
const std::string& strBaseDir,
const ADDON::ScraperPtr& scraper);
682 bool GetScraper(
int id,
const CONTENT_TYPE& content, ADDON::ScraperPtr& scraper);
688 bool ScraperInUse(
const std::string& scraperID)
const;
693 bool GetItems(
const std::string& strBaseDir,
697 bool GetItems(
const std::string& strBaseDir,
698 const std::string& itemType,
702 std::string GetItemById(
const std::string& itemType,
int id);
709 bool ExportSongHistory(TiXmlNode* pNode,
CGUIDialogProgress* progressDialog =
nullptr);
710 void ImportFromXML(
const std::string& xmlFile,
CGUIDialogProgress* progressDialog =
nullptr);
711 bool ImportSongHistory(
const std::string& xmlFile,
718 void SetPropertiesForFileItem(
CFileItem& item);
719 static void SetPropertiesFromArtist(
CFileItem& item,
const CArtist& artist);
720 static void SetPropertiesFromAlbum(
CFileItem& item,
const CAlbum& album);
721 void SetItemUpdated(
int mediaId,
const std::string& mediaType);
734 void SetArtForItem(
int mediaId,
735 const std::string& mediaType,
736 const std::string& artType,
737 const std::string& url);
746 void SetArtForItem(
int mediaId,
747 const std::string& mediaType,
748 const std::map<std::string, std::string>& art);
768 bool GetArtForItem(
int songId,
772 std::vector<ArtForThumbLoader>& art);
782 bool GetArtForItem(
int mediaId,
783 const std::string& mediaType,
784 std::map<std::string, std::string>& art);
794 std::string GetArtForItem(
int mediaId,
const std::string& mediaType,
const std::string& artType);
804 bool RemoveArtForItem(
int mediaId,
const MediaType& mediaType,
const std::string& artType);
814 bool RemoveArtForItem(
int mediaId,
815 const MediaType& mediaType,
816 const std::set<std::string>& artTypes);
823 bool GetArtTypes(
const MediaType& mediaType, std::vector<std::string>& artTypes);
831 std::vector<std::string> GetAvailableArtTypesForItem(
int mediaId,
const MediaType& mediaType);
840 std::vector<CScraperUrl::SUrlEntry> GetAvailableArtForItem(
int mediaId,
841 const MediaType& mediaType,
842 const std::string& artType);
852 virtual int GetMusicNeedsTagScan();
857 void SetMusicNeedsTagScan(
int version);
862 void SetMusicTagScanVersion(
int version = 0);
864 std::string GetLibraryLastUpdated();
865 void SetLibraryLastUpdated();
866 std::string GetLibraryLastCleaned();
867 void SetLibraryLastCleaned();
868 std::string GetArtistLinksUpdated();
869 void SetArtistLinksUpdated();
870 std::string GetGenresLastAdded();
871 std::string GetSongsLastAdded();
872 std::string GetAlbumsLastAdded();
873 std::string GetArtistsLastAdded();
874 std::string GetSongsLastModified();
875 std::string GetAlbumsLastModified();
876 std::string GetArtistsLastModified();
880 std::map<std::string, int> m_genreCache;
881 std::map<std::string, int> m_pathCache;
883 void CreateTables()
override;
884 void CreateAnalytics()
override;
885 int GetMinSchemaVersion()
const override {
return 32; }
886 int GetSchemaVersion()
const override;
888 const char* GetBaseDBName()
const override {
return "MyMusic"; }
893 virtual void CreateViews();
894 void CreateNativeDBFunctions();
895 void CreateRemovedLinkTriggers();
897 void SplitPath(
const std::string& strFileNameAndPath,
898 std::string& strPath,
899 std::string& strFileName);
901 CSong GetSongFromDataset();
902 CSong GetSongFromDataset(
const dbiplus::sql_record*
const record,
int offset = 0);
904 CArtist GetArtistFromDataset(
const dbiplus::sql_record*
const record,
906 bool needThumb =
true);
908 CAlbum GetAlbumFromDataset(
const dbiplus::sql_record*
const record,
910 bool imageURL =
false);
911 CArtistCredit GetArtistCreditFromDataset(
const dbiplus::sql_record*
const record,
int offset = 0);
912 CMusicRole GetArtistRoleFromDataset(
const dbiplus::sql_record*
const record,
int offset = 0);
913 std::string GetMediaDateFromFile(
const std::string& strFileNameAndPath);
915 void GetFileItemFromDataset(
const dbiplus::sql_record*
const record,
918 void GetFileItemFromArtistCredits(VECARTISTCREDITS& artistCredits,
CFileItem* item);
920 bool DeleteRemovedLinks();
923 bool CleanupSongsByIds(
const std::string& strSongIds);
925 bool CleanupAlbums();
926 bool CleanupArtists();
927 bool CleanupGenres();
928 bool CleanupInfoSettings();
930 void UpdateTables(
int version)
override;
931 bool SearchArtists(
const std::string& search,
CFileItemList& artists);
932 bool SearchAlbums(
const std::string& search,
CFileItemList& albums);
933 bool SearchSongs(
const std::string& strSearch,
CFileItemList& songs);
934 int GetSongIDFromPath(
const std::string& filePath);
935 void NormaliseSongDates(std::string& strRelease, std::string& strOriginal);
936 bool TrimImageURLs(std::string& strImage,
const size_t space);
942 std::string GetIgnoreArticleSQL(
const std::string& strField);
955 std::string SortnameBuildSQL(
const std::string& strAlias,
956 const SortAttribute& sortAttributes,
957 const std::string& strField,
958 const std::string& strSortField);
967 std::string AlphanumericSortSQL(
const std::string& strField,
const SortOrder& sortOrder);
972 bool CheckSources(VECSOURCES& sources);
978 bool MigrateSources();
980 bool m_translateBlankArtist;
984 static enum _SongFields {
993 song_strOrigReleaseDate,
994 song_strDiscSubtitle,
996 song_strMusicBrainzTrackID,
1008 song_strReleaseStatus,
1011 song_strAlbumArtists,
1012 song_strAlbumArtistSort,
1013 song_strAlbumReleaseType,
1020 song_iAlbumDuration,
1030 static enum _AlbumFields {
1033 album_strMusicBrainzAlbumID,
1034 album_strReleaseGroupMBID,
1036 album_strArtistSort,
1038 album_strReleaseDate,
1039 album_strOrigReleaseDate,
1047 album_strReleaseStatus,
1059 album_strReleaseType,
1062 album_iAlbumDuration,
1068 static enum _ArtistCreditFields {
1070 artistCredit_idEntity = 0,
1071 artistCredit_idArtist,
1072 artistCredit_idRole,
1073 artistCredit_strRole,
1074 artistCredit_strArtist,
1075 artistCredit_strSortName,
1076 artistCredit_strMusicBrainzArtistID,
1077 artistCredit_iOrder,
1078 artistCredit_enumCount
1079 } ArtistCreditFields;
1083 static enum _ArtistFields {
1084 artist_idArtist = 0,
1087 artist_strMusicBrainzArtistID,
1090 artist_strDisambiguation,
1096 artist_strInstruments,
1097 artist_strBiography,
1099 artist_strDisbanded,
1100 artist_strYearsActive,
1102 artist_bScrapedMBID,
1106 artist_dateModified,
1111 static enum _JoinToArtistFields {
1112 joinToArtist_isSong = 0,
1113 joinToArtist_idSourceAlbum,
1114 joinToArtist_idSourceSong,
1115 joinToArtist_idSongGenreAlbum,
1116 joinToArtist_idSongGenreSong,
1117 joinToArtist_strSongGenreAlbum,
1118 joinToArtist_strSongGenreSong,
1120 joinToArtist_artType,
1121 joinToArtist_artURL,
1122 joinToArtist_idRole,
1123 joinToArtist_strRole,
1124 joinToArtist_iOrderRole,
1125 joinToArtist_isalbumartist,
1126 joinToArtist_thumbnail,
1127 joinToArtist_fanart,
1128 joinToArtist_enumCount
1129 } JoinToArtistFields;
1132 static enum _JoinToAlbumFields {
1133 joinToAlbum_idArtist = 0,
1134 joinToAlbum_strArtist,
1135 joinToAlbum_strArtistMBID,
1136 joinToAlbum_enumCount
1137 } JoinToAlbumFields;
1140 static enum _JoinToSongFields {
1142 joinToSongs_idAlbumArtist = 0,
1143 joinToSongs_strAlbumArtist,
1144 joinToSongs_strAlbumArtistMBID,
1145 joinToSongs_iOrderAlbumArtist,
1146 joinToSongs_idArtist,
1147 joinToSongs_strArtist,
1148 joinToSongs_strArtistMBID,
1149 joinToSongs_iOrderArtist,
1151 joinToSongs_strRole,
1152 joinToSongs_iOrderRole,
1153 joinToSongs_idGenre,
1154 joinToSongs_iOrderGenre,
1155 joinToSongs_enumCount
Definition: ReplayGain.h:16
Definition: MusicDbUrl.h:17
std::map< std::string, VECSONGS > MAPSONGS
A map of a vector of CSong objects key by filename, used for CMusicDatabase.
Definition: Song.h:217
Class to store and read tag information.
Definition: MusicDatabase.h:98
Represents a list of files.
Definition: FileItem.h:713
Definition: Database.h:29
Definition: Database.h:11
Definition: TestNfsFile.cpp:22
Definition: LibExportSettings.h:38
std::set< std::string >::iterator ISETPATHS
The SETPATHS iterator.
Definition: MusicDatabase.h:66
Definition: Database.h:26
A structure used for fetching music art data.
Definition: MusicDatabase.h:74
Definition: DatabaseUtils.h:168
DateTime class, which uses FileTime as it's base.
Definition: XBDateTime.h:63
std::set< std::string > SETPATHS
A set of std::string objects, used for CMusicDatabase.
Definition: MusicDatabase.h:59
Definition: settings.py:1
Definition: TestDatabaseUtils.cpp:18
Definition: dataset.h:196
Definition: GUIDialogProgress.h:16
Definition: SortUtils.h:176
Class to store and read song information from CMusicDatabase.
Definition: Song.h:48
Represents a file on a share.
Definition: FileItem.h:102