File indexing completed on 2024-04-21 04:49:01
0001 /* 0002 SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #ifndef MODELDATALOADER_H 0008 #define MODELDATALOADER_H 0009 0010 #include "elisaLib_export.h" 0011 0012 #include "elisautils.h" 0013 #include "databaseinterface.h" 0014 #include "datatypes.h" 0015 #include "models/datamodel.h" 0016 0017 #include <QObject> 0018 0019 #include <memory> 0020 0021 class ModelDataLoaderPrivate; 0022 0023 class ELISALIB_EXPORT ModelDataLoader : public QObject 0024 { 0025 0026 Q_OBJECT 0027 0028 public: 0029 0030 using ListAlbumDataType = DataTypes::ListAlbumDataType; 0031 using ListArtistDataType = DataTypes::ListArtistDataType; 0032 using ListGenreDataType = DataTypes::ListGenreDataType; 0033 using ListTrackDataType = DataTypes::ListTrackDataType; 0034 using ListRadioDataType = DataTypes::ListRadioDataType; 0035 using TrackDataType = DataTypes::TrackDataType; 0036 using AlbumDataType = DataTypes::AlbumDataType; 0037 0038 using FilterType = ElisaUtils::FilterType; 0039 0040 explicit ModelDataLoader(QObject *parent = nullptr); 0041 0042 ~ModelDataLoader() override; 0043 0044 void setDatabase(DatabaseInterface *database); 0045 0046 Q_SIGNALS: 0047 0048 void allAlbumsData(const ModelDataLoader::ListAlbumDataType &allData); 0049 0050 void allArtistsData(const ModelDataLoader::ListArtistDataType &allData); 0051 0052 void allGenresData(const ModelDataLoader::ListGenreDataType &allData); 0053 0054 void allTracksData(const ModelDataLoader::ListTrackDataType &allData); 0055 0056 void allRadiosData(const ModelDataLoader::ListRadioDataType &radiosData); 0057 0058 void radioAdded(const ModelDataLoader::TrackDataType &radiosData); 0059 0060 void radioModified(const ModelDataLoader::TrackDataType &radiosData); 0061 0062 void allTrackData(const ModelDataLoader::TrackDataType &allData); 0063 0064 void allRadioData(const ModelDataLoader::TrackDataType &allData); 0065 0066 void tracksAdded(const ModelDataLoader::ListTrackDataType &newData); 0067 0068 void trackModified(const ModelDataLoader::TrackDataType &modifiedTrack); 0069 0070 void trackRemoved(qulonglong removedTrackId); 0071 0072 void genresAdded(const ModelDataLoader::ListGenreDataType &newData); 0073 0074 void artistsAdded(const ModelDataLoader::ListArtistDataType &newData); 0075 0076 void artistRemoved(qulonglong removedDatabaseId); 0077 0078 void albumsAdded(const ModelDataLoader::ListAlbumDataType &newData); 0079 0080 void albumRemoved(qulonglong removedDatabaseId); 0081 0082 void albumModified(const ModelDataLoader::AlbumDataType &modifiedAlbum); 0083 0084 void saveTrackModified(const ModelDataLoader::ListTrackDataType &trackDataType, const QHash<QString, QUrl> &covers); 0085 0086 void removeRadio(qulonglong radioId); 0087 0088 void radioRemoved(qulonglong radioId); 0089 0090 void clearedDatabase(); 0091 0092 public Q_SLOTS: 0093 0094 void loadData(ElisaUtils::PlayListEntryType dataType); 0095 0096 void loadDataByAlbumId(ElisaUtils::PlayListEntryType dataType, qulonglong databaseId); 0097 0098 void loadDataByGenre(ElisaUtils::PlayListEntryType dataType, 0099 const QString &genre); 0100 0101 void loadDataByArtist(ElisaUtils::PlayListEntryType dataType, 0102 const QString &artist); 0103 0104 void loadDataByGenreAndArtist(ElisaUtils::PlayListEntryType dataType, 0105 const QString &genre, const QString &artist); 0106 0107 void loadDataByDatabaseIdAndUrl(ElisaUtils::PlayListEntryType dataType, 0108 qulonglong databaseId, const QUrl &url); 0109 0110 void loadDataByUrl(ElisaUtils::PlayListEntryType dataType, 0111 const QUrl &url); 0112 0113 void loadRecentlyPlayedData(ElisaUtils::PlayListEntryType dataType); 0114 0115 void loadFrequentlyPlayedData(ElisaUtils::PlayListEntryType dataType); 0116 0117 void updateFileMetaData(const DataTypes::TrackDataType &trackDataType, const QUrl &url); 0118 0119 void updateSingleFileMetaData(const QUrl &url, DataTypes::ColumnsRoles role, const QVariant &data); 0120 0121 void trackHasBeenModified(ListTrackDataType trackDataType, const QHash<QString, QUrl> &covers); 0122 0123 private Q_SLOTS: 0124 0125 void databaseTracksAdded(const ModelDataLoader::ListTrackDataType &newData); 0126 0127 void databaseArtistsAdded(const ModelDataLoader::ListArtistDataType &newData); 0128 0129 void databaseAlbumsAdded(const ModelDataLoader::ListAlbumDataType &newData); 0130 0131 private: 0132 0133 std::unique_ptr<ModelDataLoaderPrivate> d; 0134 0135 }; 0136 0137 #endif // MODELDATALOADER_H