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