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();
147 int AddSong(
const int idSong,
150 const std::string& strTitle,
151 const std::string& strMusicBrainzTrackID,
152 const std::string& strPathAndFileName,
153 const std::string& strComment,
154 const std::string& strMood,
155 const std::string& strThumb,
156 const std::string& artistDisp,
157 const std::string& artistSort,
158 const std::vector<std::string>& genres,
161 const std::string& strReleaseDate,
162 const std::string& strOrigReleaseDate,
163 std::string& strDiscSubtitle,
164 const int iTimesPlayed,
175 const std::string& songVideoURL,
177 bool GetSong(
int idSong,
CSong& song);
185 bool UpdateSong(
CSong& song,
bool bArtists =
true,
bool bArtistLinks =
true);
218 int UpdateSong(
int idSong,
219 const std::string& strTitle,
220 const std::string& strMusicBrainzTrackID,
221 const std::string& strPathAndFileName,
222 const std::string& strComment,
223 const std::string& strMood,
224 const std::string& strThumb,
225 const std::string& artistDisp,
226 const std::string& artistSort,
227 const std::vector<std::string>& genres,
230 const std::string& strReleaseDate,
231 const std::string& strOrigReleaseDate,
232 const std::string& strDiscSubtitle,
245 const std::string& songVideoURL);
248 bool GetSongByFileName(
const std::string& strFileName,
CSong& song, int64_t startOffset = 0);
249 bool GetSongsByPath(
const std::string& strPath,
MAPSONGS& songmap,
bool bAppendToMap =
false);
250 bool Search(
const std::string& search,
CFileItemList& items);
251 bool RemoveSongsFromPath(
const std::string& path,
MAPSONGS& songmap,
bool exact =
true);
252 void CheckArtistLinksChanged();
253 bool SetSongUserrating(
const std::string& filePath,
int userrating);
254 bool SetSongUserrating(
int idSong,
int userrating);
255 bool SetSongVotes(
const std::string& filePath,
int votes);
256 int GetSongByArtistAndAlbumAndTitle(
const std::string& strArtist,
257 const std::string& strAlbum,
258 const std::string& strTitle);
268 bool AddAlbum(
CAlbum& album,
int idSource);
274 bool UpdateAlbum(
CAlbum& album);
292 int AddAlbum(
const std::string& strAlbum,
293 const std::string& strMusicBrainzAlbumID,
294 const std::string& strReleaseGroupMBID,
295 const std::string& strArtist,
296 const std::string& strArtistSort,
297 const std::string& strGenre,
298 const std::string& strReleaseDate,
299 const std::string& strOrigReleaseDate,
301 const std::string& strRecordLabel,
302 const std::string& strType,
303 const std::string& strReleaseStatus,
305 CAlbum::ReleaseType releaseType);
313 bool GetAlbum(
int idAlbum,
CAlbum& album,
bool getSongs =
true);
314 int UpdateAlbum(
int idAlbum,
315 const std::string& strAlbum,
316 const std::string& strMusicBrainzAlbumID,
317 const std::string& strReleaseGroupMBID,
318 const std::string& strArtist,
319 const std::string& strArtistSort,
320 const std::string& strGenre,
321 const std::string& strMoods,
322 const std::string& strStyles,
323 const std::string& strThemes,
324 const std::string& strReview,
325 const std::string& strImage,
326 const std::string& strLabel,
327 const std::string& strType,
328 const std::string& strReleaseStatus,
332 const std::string& strReleaseDate,
333 const std::string& strOrigReleaseDate,
336 CAlbum::ReleaseType releaseType,
338 bool ClearAlbumLastScrapedTime(
int idAlbum);
339 bool HasAlbumBeenScraped(
int idAlbum);
344 bool AddAudioBook(
const CFileItem& item);
345 bool SetResumeBookmarkForAudioBook(
const CFileItem& item,
int bookmark);
346 bool GetResumeBookmarkForAudioBook(
const CFileItem& item,
int& bookmark);
351 bool InsideScannedPath(
const std::string& path);
354 int GetAlbumIdByPath(
const std::string& path);
355 bool GetAlbumFromSong(
int idSong,
CAlbum& album);
356 int GetAlbumByName(
const std::string& strAlbum,
const std::string& strArtist =
"");
357 int GetAlbumByName(
const std::string& strAlbum,
const std::vector<std::string>& artist);
358 bool GetMatchingMusicVideoAlbum(
const std::string& strAlbum,
359 const std::string& strArtist,
361 std::string& strReview);
362 bool SearchAlbumsByArtistName(
const std::string& strArtist,
CFileItemList& items);
363 int GetAlbumByMatch(
const CAlbum& album);
364 std::string GetAlbumById(
int id);
365 std::string GetAlbumDiscTitle(
int idAlbum,
int idDisc);
366 bool SetAlbumUserrating(
const int idAlbum,
int userrating);
367 int GetAlbumDiscsCount(
int idAlbum);
372 bool UpdateArtist(
const CArtist& artist);
374 int AddArtist(
const std::string& strArtist,
375 const std::string& strMusicBrainzArtistID,
376 const std::string& strSortName,
377 bool bScrapedMBID =
false);
378 int AddArtist(
const std::string& strArtist,
379 const std::string& strMusicBrainzArtistID,
380 bool bScrapedMBID =
false);
381 bool GetArtist(
int idArtist,
CArtist& artist,
bool fetchAll =
false);
382 bool GetArtistExists(
int idArtist);
384 int GetArtistFromMBID(
const std::string& strMusicBrainzArtistID, std::string& artistname);
385 int UpdateArtist(
int idArtist,
386 const std::string& strArtist,
387 const std::string& strSortName,
388 const std::string& strMusicBrainzArtistID,
390 const std::string& strType,
391 const std::string& strGender,
392 const std::string& strDisambiguation,
393 const std::string& strBorn,
394 const std::string& strFormed,
395 const std::string& strGenres,
396 const std::string& strMoods,
397 const std::string& strStyles,
398 const std::string& strInstruments,
399 const std::string& strBiography,
400 const std::string& strDied,
401 const std::string& strDisbanded,
402 const std::string& strYearsActive,
403 const std::string& strImage);
404 bool UpdateArtistScrapedMBID(
int idArtist,
const std::string& strMusicBrainzArtistID);
405 bool GetTranslateBlankArtist() {
return m_translateBlankArtist; }
406 void SetTranslateBlankArtist(
bool translate) { m_translateBlankArtist = translate; }
407 bool HasArtistBeenScraped(
int idArtist);
408 bool ClearArtistLastScrapedTime(
int idArtist);
409 int AddArtistDiscography(
int idArtist,
const CDiscoAlbum& discoAlbum);
410 bool DeleteArtistDiscography(
int idArtist);
411 bool GetArtistDiscography(
int idArtist,
CFileItemList& items);
412 bool AddArtistVideoLinks(
const CArtist& artist);
413 bool DeleteArtistVideoLinks(
const int idArtist);
415 std::string GetArtistById(
int id);
416 int GetArtistByName(
const std::string& strArtist);
417 int GetArtistByMatch(
const CArtist& artist);
418 bool GetArtistFromSong(
int idSong,
CArtist& artist);
419 bool IsSongArtist(
int idSong,
int idArtist);
420 bool IsSongAlbumArtist(
int idSong,
int idArtist);
421 std::string GetRoleById(
int id);
427 bool UpdateArtistSortNames(
int idArtist = -1);
432 int AddPath(
const std::string& strPath);
434 bool GetPaths(std::set<std::string>& paths);
435 bool SetPathHash(
const std::string& path,
const std::string& hash);
436 bool GetPathHash(
const std::string& path, std::string& hash);
437 bool GetAlbumPaths(
int idAlbum, std::vector<std::pair<std::string, int>>& paths);
438 bool GetAlbumPath(
int idAlbum, std::string& basePath);
439 int GetDiscnumberForPathID(
int idPath);
440 bool GetOldArtistPath(
int idArtist, std::string& path);
441 bool GetArtistPath(
const CArtist& artist, std::string& path);
442 bool GetAlbumFolder(
const CAlbum& album,
const std::string& strAlbumPath, std::string& strFolder);
443 bool GetArtistFolderName(
const CArtist& artist, std::string& strFolder);
444 bool GetArtistFolderName(
const std::string& strArtist,
445 const std::string& strMusicBrainzArtistID,
446 std::string& strFolder);
451 bool UpdateSources();
452 int AddSource(
const std::string& strName,
453 const std::string& strMultipath,
454 const std::vector<std::string>& vecPaths,
456 int UpdateSource(
const std::string& strOldName,
457 const std::string& strName,
458 const std::string& strMultipath,
459 const std::vector<std::string>& vecPaths);
460 bool RemoveSource(
const std::string& strName);
461 int GetSourceFromPath(
const std::string& strPath);
462 bool AddAlbumSource(
int idAlbum,
int idSource);
463 bool AddAlbumSources(
int idAlbum,
const std::string& strPath);
464 bool DeleteAlbumSources(
int idAlbum);
467 bool GetSourcesByArtist(
int idArtist,
CFileItem* item);
468 bool GetSourcesByAlbum(
int idAlbum,
CFileItem* item);
469 bool GetSourcesBySong(
int idSong,
const std::string& strPath,
CFileItem* item);
470 int GetSourceByName(
const std::string& strSource);
471 std::string GetSourceById(
int id);
476 int AddGenre(std::string& strGenre);
477 std::string GetGenreById(
int id);
478 int GetGenreByName(
const std::string& strGenre);
483 bool AddAlbumArtist(
int idArtist,
int idAlbum,
const std::string& strArtist,
int iOrder);
484 bool GetAlbumsByArtist(
int idArtist, std::vector<int>& albums);
485 bool GetArtistsByAlbum(
int idAlbum,
CFileItem* item);
486 bool GetArtistsByAlbum(
int idAlbum, std::vector<std::string>& artistIDs);
487 bool DeleteAlbumArtistsByAlbum(
int idAlbum);
489 int AddRole(
const std::string& strRole);
490 bool AddSongArtist(
int idArtist,
492 const std::string& strRole,
493 const std::string& strArtist,
496 int idArtist,
int idSong,
int idRole,
const std::string& strArtist,
int iOrder);
497 int AddSongContributor(
int idSong,
498 const std::string& strRole,
499 const std::string& strArtist,
500 const std::string& strSort);
501 void AddSongContributors(
int idSong,
502 const VECMUSICROLES& contributors,
503 const std::string& strSort);
504 int GetRoleByName(
const std::string& strRole);
505 bool GetRolesByArtist(
int idArtist,
CFileItem* item);
506 bool GetSongsByArtist(
int idArtist, std::vector<int>& songs);
507 bool GetArtistsBySong(
int idSong, std::vector<int>& artists);
508 bool DeleteSongArtistsBySong(
int idSong);
510 bool AddSongGenres(
int idSong,
const std::vector<std::string>& genres);
511 bool GetGenresBySong(
int idSong, std::vector<int>& genres);
513 bool GetGenresByAlbum(
int idAlbum,
CFileItem* item);
515 bool GetGenresByArtist(
int idArtist,
CFileItem* item);
516 bool GetIsAlbumArtist(
int idArtist,
CFileItem* item);
521 bool GetTop100(
const std::string& strBaseDir,
CFileItemList& items);
522 bool GetTop100Albums(VECALBUMS& albums);
523 bool GetTop100AlbumSongs(
const std::string& strBaseDir,
CFileItemList& item);
528 bool GetRecentlyAddedAlbums(VECALBUMS& albums,
unsigned int limit = 0);
529 bool GetRecentlyAddedAlbumSongs(
const std::string& strBaseDir,
531 unsigned int limit = 0);
532 bool GetRecentlyPlayedAlbums(VECALBUMS& albums);
533 bool GetRecentlyPlayedAlbumSongs(
const std::string& strBaseDir,
CFileItemList& item);
538 int GetCompilationAlbumsCount();
543 bool IsAlbumBoxset(
int idAlbum);
544 int GetBoxsetsCount();
546 int GetSinglesCount();
548 int GetArtistCountForRole(
int role);
549 int GetArtistCountForRole(
const std::string& strRole);
555 void IncrementPlayCount(
const CFileItem& item);
556 bool CleanupOrphanedItems();
561 bool GetGenresNav(
const std::string& strBaseDir,
564 bool countOnly =
false);
565 bool GetSourcesNav(
const std::string& strBaseDir,
568 bool countOnly =
false);
569 bool GetYearsNav(
const std::string& strBaseDir,
572 bool GetRolesNav(
const std::string& strBaseDir,
575 bool GetArtistsNav(
const std::string& strBaseDir,
577 bool albumArtistsOnly =
false,
583 bool countOnly =
false);
584 bool GetCommonNav(
const std::string& strBaseDir,
585 const std::string& table,
586 const std::string& labelField,
590 bool GetAlbumTypesNav(
const std::string& strBaseDir,
593 bool countOnly =
false);
594 bool GetMusicLabelsNav(
const std::string& strBaseDir,
597 bool countOnly =
false);
598 bool GetAlbumsNav(
const std::string& strBaseDir,
604 bool countOnly =
false);
605 bool GetDiscsNav(
const std::string& strBaseDir,
610 bool countOnly =
false);
611 bool GetAlbumsByYear(
const std::string& strBaseDir,
CFileItemList& items,
int year);
612 bool GetSongsNav(
const std::string& strBaseDir,
618 bool GetSongsByYear(
const std::string& baseDir,
CFileItemList& items,
int year);
619 bool GetSongsByWhere(
const std::string& baseDir,
623 bool GetSongsFullByWhere(
const std::string& baseDir,
627 bool artistData =
false);
628 bool GetAlbumsByWhere(
const std::string& baseDir,
632 bool countOnly =
false);
633 bool GetDiscsByWhere(
const std::string& baseDir,
637 bool countOnly =
false);
642 bool countOnly =
false);
643 bool GetArtistsByWhere(
const std::string& strBaseDir,
647 bool countOnly =
false);
648 int GetDiscsCount(
const std::string& baseDir,
const Filter& filter =
Filter());
661 unsigned int GetRandomSongIDs(
const Filter& filter, std::vector<std::pair<int, int>>& songIDs);
666 bool GetGenresJSON(
CFileItemList& items,
bool bSources =
false);
667 bool GetArtistsByWhereJSON(
const std::set<std::string>& fields,
668 const std::string& baseDir,
672 bool GetAlbumsByWhereJSON(
const std::set<std::string>& fields,
673 const std::string& baseDir,
677 bool GetSongsByWhereJSON(
const std::set<std::string>& fields,
678 const std::string& baseDir,
686 bool SetScraper(
int id,
const CONTENT_TYPE& content,
const ADDON::ScraperPtr&
scraper);
687 bool SetScraperAll(
const std::string& strBaseDir,
const ADDON::ScraperPtr& scraper);
688 bool GetScraper(
int id,
const CONTENT_TYPE& content, ADDON::ScraperPtr& scraper);
694 bool ScraperInUse(
const std::string& scraperID)
const;
699 bool GetItems(
const std::string& strBaseDir,
703 bool GetItems(
const std::string& strBaseDir,
704 const std::string& itemType,
708 std::string GetItemById(
const std::string& itemType,
int id);
715 bool ExportSongHistory(TiXmlNode* pNode,
CGUIDialogProgress* progressDialog =
nullptr);
716 void ImportFromXML(
const std::string& xmlFile,
CGUIDialogProgress* progressDialog =
nullptr);
717 bool ImportSongHistory(
const std::string& xmlFile,
724 void SetPropertiesForFileItem(
CFileItem& item);
725 static void SetPropertiesFromArtist(
CFileItem& item,
const CArtist& artist);
726 static void SetPropertiesFromAlbum(
CFileItem& item,
const CAlbum& album);
727 void SetItemUpdated(
int mediaId,
const std::string& mediaType);
740 void SetArtForItem(
int mediaId,
741 const std::string& mediaType,
742 const std::string& artType,
743 const std::string& url);
752 void SetArtForItem(
int mediaId,
753 const std::string& mediaType,
754 const std::map<std::string, std::string>& art);
774 bool GetArtForItem(
int songId,
778 std::vector<ArtForThumbLoader>& art);
788 bool GetArtForItem(
int mediaId,
789 const std::string& mediaType,
790 std::map<std::string, std::string>& art);
800 std::string GetArtForItem(
int mediaId,
const std::string& mediaType,
const std::string& artType);
810 bool RemoveArtForItem(
int mediaId,
const MediaType& mediaType,
const std::string& artType);
820 bool RemoveArtForItem(
int mediaId,
821 const MediaType& mediaType,
822 const std::set<std::string>& artTypes);
829 bool GetArtTypes(
const MediaType& mediaType, std::vector<std::string>& artTypes);
837 std::vector<std::string> GetAvailableArtTypesForItem(
int mediaId,
const MediaType& mediaType);
846 std::vector<CScraperUrl::SUrlEntry> GetAvailableArtForItem(
int mediaId,
847 const MediaType& mediaType,
848 const std::string& artType);
858 virtual int GetMusicNeedsTagScan();
863 void SetMusicNeedsTagScan(
int version);
868 void SetMusicTagScanVersion(
int version = 0);
870 std::string GetLibraryLastUpdated();
871 void SetLibraryLastUpdated();
872 std::string GetLibraryLastCleaned();
873 void SetLibraryLastCleaned();
874 std::string GetArtistLinksUpdated();
875 void SetArtistLinksUpdated();
876 std::string GetGenresLastAdded();
877 std::string GetSongsLastAdded();
878 std::string GetAlbumsLastAdded();
879 std::string GetArtistsLastAdded();
880 std::string GetSongsLastModified();
881 std::string GetAlbumsLastModified();
882 std::string GetArtistsLastModified();
886 std::map<std::string, int> m_genreCache;
887 std::map<std::string, int> m_pathCache;
889 void CreateTables()
override;
890 void CreateAnalytics()
override;
891 int GetMinSchemaVersion()
const override {
return 32; }
892 int GetSchemaVersion()
const override;
894 const char* GetBaseDBName()
const override {
return "MyMusic"; }
899 virtual void CreateViews();
900 void CreateNativeDBFunctions();
901 void CreateRemovedLinkTriggers();
903 void SplitPath(
const std::string& strFileNameAndPath,
904 std::string& strPath,
905 std::string& strFileName);
907 CSong GetSongFromDataset();
908 CSong GetSongFromDataset(
const dbiplus::sql_record*
const record,
int offset = 0);
910 CArtist GetArtistFromDataset(
const dbiplus::sql_record*
const record,
912 bool needThumb =
true);
914 CAlbum GetAlbumFromDataset(
const dbiplus::sql_record*
const record,
916 bool imageURL =
false);
917 CArtistCredit GetArtistCreditFromDataset(
const dbiplus::sql_record*
const record,
int offset = 0);
918 CMusicRole GetArtistRoleFromDataset(
const dbiplus::sql_record*
const record,
int offset = 0);
919 std::string GetMediaDateFromFile(
const std::string& strFileNameAndPath);
921 void GetFileItemFromDataset(
const dbiplus::sql_record*
const record,
924 void GetFileItemFromArtistCredits(VECARTISTCREDITS& artistCredits,
CFileItem* item);
926 bool DeleteRemovedLinks();
929 bool CleanupSongsByIds(
const std::string& strSongIds);
931 bool CleanupAlbums();
932 bool CleanupArtists();
933 bool CleanupGenres();
934 bool CleanupInfoSettings();
936 void UpdateTables(
int version)
override;
937 bool SearchArtists(
const std::string& search,
CFileItemList& artists);
938 bool SearchAlbums(
const std::string& search,
CFileItemList& albums);
939 bool SearchSongs(
const std::string& strSearch,
CFileItemList& songs);
940 int GetSongIDFromPath(
const std::string& filePath);
941 void NormaliseSongDates(std::string& strRelease, std::string& strOriginal);
942 bool TrimImageURLs(std::string& strImage,
const size_t space);
948 std::string GetIgnoreArticleSQL(
const std::string& strField);
961 std::string SortnameBuildSQL(
const std::string& strAlias,
962 const SortAttribute& sortAttributes,
963 const std::string& strField,
964 const std::string& strSortField);
973 std::string AlphanumericSortSQL(
const std::string& strField,
const SortOrder& sortOrder);
978 bool CheckSources(VECSOURCES& sources);
984 bool MigrateSources();
986 bool m_translateBlankArtist;
990 static enum _SongFields {
999 song_strOrigReleaseDate,
1000 song_strDiscSubtitle,
1002 song_strMusicBrainzTrackID,
1014 song_strReleaseStatus,
1017 song_strAlbumArtists,
1018 song_strAlbumArtistSort,
1019 song_strAlbumReleaseType,
1027 song_iAlbumDuration,
1037 static enum _AlbumFields {
1040 album_strMusicBrainzAlbumID,
1041 album_strReleaseGroupMBID,
1043 album_strArtistSort,
1045 album_strReleaseDate,
1046 album_strOrigReleaseDate,
1054 album_strReleaseStatus,
1066 album_strReleaseType,
1069 album_iAlbumDuration,
1075 static enum _ArtistCreditFields {
1077 artistCredit_idEntity = 0,
1078 artistCredit_idArtist,
1079 artistCredit_idRole,
1080 artistCredit_strRole,
1081 artistCredit_strArtist,
1082 artistCredit_strSortName,
1083 artistCredit_strMusicBrainzArtistID,
1084 artistCredit_iOrder,
1085 artistCredit_enumCount
1086 } ArtistCreditFields;
1090 static enum _ArtistFields {
1091 artist_idArtist = 0,
1094 artist_strMusicBrainzArtistID,
1097 artist_strDisambiguation,
1103 artist_strInstruments,
1104 artist_strBiography,
1106 artist_strDisbanded,
1107 artist_strYearsActive,
1109 artist_bScrapedMBID,
1113 artist_dateModified,
1118 static enum _JoinToArtistFields {
1119 joinToArtist_isSong = 0,
1120 joinToArtist_idSourceAlbum,
1121 joinToArtist_idSourceSong,
1122 joinToArtist_idSongGenreAlbum,
1123 joinToArtist_idSongGenreSong,
1124 joinToArtist_strSongGenreAlbum,
1125 joinToArtist_strSongGenreSong,
1127 joinToArtist_artType,
1128 joinToArtist_artURL,
1129 joinToArtist_idRole,
1130 joinToArtist_strRole,
1131 joinToArtist_iOrderRole,
1132 joinToArtist_isalbumartist,
1133 joinToArtist_thumbnail,
1134 joinToArtist_fanart,
1135 joinToArtist_enumCount
1136 } JoinToArtistFields;
1139 static enum _JoinToAlbumFields {
1140 joinToAlbum_idArtist = 0,
1141 joinToAlbum_strArtist,
1142 joinToAlbum_strArtistMBID,
1143 joinToAlbum_enumCount
1144 } JoinToAlbumFields;
1147 static enum _JoinToSongFields {
1149 joinToSongs_idAlbumArtist = 0,
1150 joinToSongs_strAlbumArtist,
1151 joinToSongs_strAlbumArtistMBID,
1152 joinToSongs_iOrderAlbumArtist,
1153 joinToSongs_idArtist,
1154 joinToSongs_strArtist,
1155 joinToSongs_strArtistMBID,
1156 joinToSongs_iOrderArtist,
1158 joinToSongs_strRole,
1159 joinToSongs_iOrderRole,
1160 joinToSongs_idGenre,
1161 joinToSongs_iOrderGenre,
1162 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:218
Class to store and read tag information.
Definition: MusicDatabase.h:98
Represents a list of files.
Definition: FileItem.h:721
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