diff --git a/autotests/alltracksproxymodeltest.cpp b/autotests/alltracksproxymodeltest.cpp --- a/autotests/alltracksproxymodeltest.cpp +++ b/autotests/alltracksproxymodeltest.cpp @@ -106,7 +106,7 @@ auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -175,10 +175,10 @@ QStringLiteral("album3"), 3, 1); auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl() + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl() , - secondTrack[DatabaseInterface::ResourceRole].toUrl(), - thirdTrack[DatabaseInterface::ResourceRole].toUrl()}); + secondTrack[DataTypes::ResourceRole].toUrl(), + thirdTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -412,8 +412,8 @@ auto changedIndex = dataChangedSignal.constFirst().toModelIndex(); - QCOMPARE(proxyTracksModel.data(changedIndex, DatabaseInterface::ColumnsRoles::RatingRole).isValid(), true); - QCOMPARE(proxyTracksModel.data(changedIndex, DatabaseInterface::ColumnsRoles::RatingRole).toInt(), 5); + QCOMPARE(proxyTracksModel.data(changedIndex, DataTypes::ColumnsRoles::RatingRole).isValid(), true); + QCOMPARE(proxyTracksModel.data(changedIndex, DataTypes::ColumnsRoles::RatingRole).toInt(), 5); } void addEmptyTracksList() diff --git a/autotests/databaseinterfacetest.cpp b/autotests/databaseinterfacetest.cpp --- a/autotests/databaseinterfacetest.cpp +++ b/autotests/databaseinterfacetest.cpp @@ -18,6 +18,7 @@ #include "databasetestdata.h" #include "databaseinterface.h" +#include "datatypes.h" #include "musicaudiotrack.h" #include "config-upnp-qt.h" @@ -56,14 +57,14 @@ qRegisterMetaType>("QVector"); qRegisterMetaType>("QHash"); qRegisterMetaType>("QHash"); - qRegisterMetaType("ListTrackDataType"); - qRegisterMetaType("ListAlbumDataType"); - qRegisterMetaType("ListArtistDataType"); - qRegisterMetaType("ListGenreDataType"); - qRegisterMetaType("TrackDataType"); - qRegisterMetaType("AlbumDataType"); - qRegisterMetaType("ArtistDataType"); - qRegisterMetaType("GenreDataType"); + qRegisterMetaType("ListTrackDataType"); + qRegisterMetaType("ListAlbumDataType"); + qRegisterMetaType("ListArtistDataType"); + qRegisterMetaType("ListGenreDataType"); + qRegisterMetaType("TrackDataType"); + qRegisterMetaType("AlbumDataType"); + qRegisterMetaType("ArtistDataType"); + qRegisterMetaType("GenreDataType"); } void avoidCrashInTrackIdFromTitleAlbumArtist() @@ -174,7 +175,7 @@ QCOMPARE(albumData.count(), 1); QCOMPARE(album.title(), QStringLiteral("album3")); QCOMPARE(album.artist(), QStringLiteral("artist2")); - QCOMPARE(album[DatabaseInterface::ColumnsRoles::SecondaryTextRole], QStringLiteral("artist2")); + QCOMPARE(album[DataTypes::ColumnsRoles::SecondaryTextRole], QStringLiteral("artist2")); QVERIFY(album.isValidArtist()); QCOMPARE(album.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("album3"))); QCOMPARE(album.isSingleDiscAlbum(), true); @@ -2215,7 +2216,7 @@ QStringLiteral("album1"), 1, 1); QCOMPARE(removedTrackId, qulonglong(0)); - firstTrack[DatabaseInterface::DatabaseIdRole] = 0; + firstTrack[DataTypes::DatabaseIdRole] = 0; musicDb.insertTracksList({MusicAudioTrack::trackFromData(firstTrack)}, mNewCovers); @@ -4291,7 +4292,7 @@ const auto &modifiedTrackSignal = musicDbTrackModifiedSpy.at(0); QCOMPARE(modifiedTrackSignal.count(), 1); - const auto &modifiedTrack = modifiedTrackSignal.at(0).value(); + const auto &modifiedTrack = modifiedTrackSignal.at(0).value(); auto modifiedTrackTitle = modifiedTrack.title(); auto modifiedTrackArtist = modifiedTrack.artist(); @@ -5163,17 +5164,17 @@ const auto newAlbumSignal = musicDbAlbumAddedSpy.at(0); QCOMPARE(newAlbumSignal.size(), 1); - const auto newAlbums = newAlbumSignal.at(0).value(); + const auto newAlbums = newAlbumSignal.at(0).value(); QCOMPARE(newAlbums.size(), 1); const auto newAlbum = newAlbums.at(0); QCOMPARE(newAlbum.title(), QStringLiteral("album3")); QCOMPARE(newAlbum.artist(), QStringLiteral("Various Artists")); - QCOMPARE(newAlbum[DatabaseInterface::ColumnsRoles::SecondaryTextRole], QStringLiteral("Various Artists")); + QCOMPARE(newAlbum[DataTypes::ColumnsRoles::SecondaryTextRole], QStringLiteral("Various Artists")); const auto oneAlbum = musicDb.allAlbumsData().at(0); QCOMPARE(oneAlbum.title(), QStringLiteral("album3")); QCOMPARE(oneAlbum.artist(), QStringLiteral("Various Artists")); - QCOMPARE(oneAlbum[DatabaseInterface::ColumnsRoles::SecondaryTextRole], QStringLiteral("Various Artists")); + QCOMPARE(oneAlbum[DataTypes::ColumnsRoles::SecondaryTextRole], QStringLiteral("Various Artists")); } void testAlbumFromGenreAndArtistWithoutAlbumArtist() diff --git a/autotests/datamodeltest.cpp b/autotests/datamodeltest.cpp --- a/autotests/datamodeltest.cpp +++ b/autotests/datamodeltest.cpp @@ -19,6 +19,7 @@ #include "musicaudiotrack.h" #include "databaseinterface.h" +#include "datatypes.h" #include "models/datamodel.h" #include @@ -109,7 +110,7 @@ auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(albumsModel.rowCount(), 3); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -182,9 +183,9 @@ QStringLiteral("album3"), 3, 1); auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl(), - secondTrack[DatabaseInterface::ResourceRole].toUrl(), - thirdTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl(), + secondTrack[DataTypes::ResourceRole].toUrl(), + thirdTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(albumsModel.rowCount(), 0); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -279,7 +280,7 @@ QCOMPARE(beginInsertRowsSpy.at(1).at(1).toInt(), 4); QCOMPARE(beginInsertRowsSpy.at(1).at(2).toInt(), 4); - QCOMPARE(albumsModel.data(albumsModel.index(4, 0), DatabaseInterface::ColumnsRoles::TitleRole).toString(), QStringLiteral("track6")); + QCOMPARE(albumsModel.data(albumsModel.index(4, 0), DataTypes::ColumnsRoles::TitleRole).toString(), QStringLiteral("track6")); auto secondNewTrack = MusicAudioTrack{true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track5"), QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 5, 1, @@ -307,7 +308,7 @@ QCOMPARE(beginInsertRowsSpy.at(2).at(1).toInt(), 4); QCOMPARE(beginInsertRowsSpy.at(2).at(2).toInt(), 4); - QCOMPARE(albumsModel.data(albumsModel.index(4, 0), DatabaseInterface::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); + QCOMPARE(albumsModel.data(albumsModel.index(4, 0), DataTypes::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); } void modifyOneTrack() @@ -389,7 +390,7 @@ QCOMPARE(dataChangedSpy.at(0).at(0).toModelIndex(), albumsModel.index(2, 0)); QCOMPARE(dataChangedSpy.at(0).at(1).toModelIndex(), albumsModel.index(2, 0)); - QCOMPARE(albumsModel.data(albumsModel.index(2, 0), DatabaseInterface::ColumnsRoles::TrackNumberRole).toInt(), 5); + QCOMPARE(albumsModel.data(albumsModel.index(2, 0), DataTypes::ColumnsRoles::TrackNumberRole).toInt(), 5); } @@ -443,7 +444,7 @@ auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -509,9 +510,9 @@ QStringLiteral("album3"), 3, 1); auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl(), - secondTrack[DatabaseInterface::ResourceRole].toUrl(), - thirdTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl(), + secondTrack[DataTypes::ResourceRole].toUrl(), + thirdTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -737,8 +738,8 @@ auto changedIndex = dataChangedSignal.constFirst().toModelIndex(); - QCOMPARE(tracksModel.data(changedIndex, DatabaseInterface::ColumnsRoles::RatingRole).isValid(), true); - QCOMPARE(tracksModel.data(changedIndex, DatabaseInterface::ColumnsRoles::RatingRole).toInt(), 5); + QCOMPARE(tracksModel.data(changedIndex, DataTypes::ColumnsRoles::RatingRole).isValid(), true); + QCOMPARE(tracksModel.data(changedIndex, DataTypes::ColumnsRoles::RatingRole).toInt(), 5); } void addEmptyTracksListAllTracks() @@ -887,7 +888,7 @@ QVERIFY(!firstTrack.isEmpty()); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(albumsModel.rowCount(), 5); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -952,9 +953,9 @@ QStringLiteral("album3"), 3, 1); auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl(), - secondTrack[DatabaseInterface::ResourceRole].toUrl(), - thirdTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl(), + secondTrack[DataTypes::ResourceRole].toUrl(), + thirdTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(albumsModel.rowCount(), 4); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -1145,7 +1146,7 @@ auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); - musicDb.removeTracksList({firstTrack[DatabaseInterface::ResourceRole].toUrl()}); + musicDb.removeTracksList({firstTrack[DataTypes::ResourceRole].toUrl()}); QCOMPARE(artistsModel.rowCount(), 6); QCOMPARE(beginInsertRowsSpy.count(), 1); diff --git a/autotests/mediaplaylisttest.cpp b/autotests/mediaplaylisttest.cpp --- a/autotests/mediaplaylisttest.cpp +++ b/autotests/mediaplaylisttest.cpp @@ -4442,7 +4442,7 @@ QVERIFY(!removedTrack.isEmpty()); - myPlayList.trackRemoved(removedTrack[DatabaseInterface::DatabaseIdRole].toULongLong()); + myPlayList.trackRemoved(removedTrack[DataTypes::DatabaseIdRole].toULongLong()); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); diff --git a/autotests/trackmetadatamodeltest.cpp b/autotests/trackmetadatamodeltest.cpp --- a/autotests/trackmetadatamodeltest.cpp +++ b/autotests/trackmetadatamodeltest.cpp @@ -56,9 +56,9 @@ QCOMPARE(endRemovedRowsSpy.count(), 0); QCOMPARE(myModel.rowCount(), 0); - auto trackData = TrackMetadataModel::TrackDataType{{DatabaseInterface::DatabaseIdRole, 1}, - {DatabaseInterface::TitleRole, QStringLiteral("title")}, - {DatabaseInterface::AlbumRole, QStringLiteral("album")}}; + auto trackData = TrackMetadataModel::TrackDataType{{DataTypes::DatabaseIdRole, 1}, + {DataTypes::TitleRole, QStringLiteral("title")}, + {DataTypes::AlbumRole, QStringLiteral("album")}}; myModel.trackData(trackData); QCOMPARE(beginResetSpy.count(), 1); diff --git a/autotests/trackslistenertest.cpp b/autotests/trackslistenertest.cpp --- a/autotests/trackslistenertest.cpp +++ b/autotests/trackslistenertest.cpp @@ -20,6 +20,7 @@ #include "trackslistener.h" #include "mediaplaylist.h" #include "databaseinterface.h" +#include "datatypes.h" #include "config-upnp-qt.h" @@ -58,14 +59,14 @@ qRegisterMetaType>("QVector"); qRegisterMetaType>("QHash"); qRegisterMetaType>("QList"); - qRegisterMetaType("ListTrackDataType"); - qRegisterMetaType("ListAlbumDataType"); - qRegisterMetaType("ListArtistDataType"); - qRegisterMetaType("ListGenreDataType"); - qRegisterMetaType("TrackDataType"); - qRegisterMetaType("AlbumDataType"); - qRegisterMetaType("ArtistDataType"); - qRegisterMetaType("GenreDataType"); + qRegisterMetaType("ListTrackDataType"); + qRegisterMetaType("ListAlbumDataType"); + qRegisterMetaType("ListArtistDataType"); + qRegisterMetaType("ListGenreDataType"); + qRegisterMetaType("TrackDataType"); + qRegisterMetaType("AlbumDataType"); + qRegisterMetaType("ArtistDataType"); + qRegisterMetaType("GenreDataType"); qRegisterMetaType("PlayListEntryType"); } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,6 +5,7 @@ musicaudiotrack.cpp progressindicator.cpp databaseinterface.cpp + datatypes.cpp musiclistenersmanager.cpp managemediaplayercontrol.cpp manageheaderbar.cpp diff --git a/src/databaseinterface.h b/src/databaseinterface.h --- a/src/databaseinterface.h +++ b/src/databaseinterface.h @@ -21,6 +21,7 @@ #include "elisaLib_export.h" #include "elisautils.h" +#include "datatypes.h" #include #include @@ -46,348 +47,45 @@ public: - enum ColumnsRoles { - TitleRole = Qt::UserRole + 1, - SecondaryTextRole, - ImageUrlRole, - ShadowForImageRole, - ChildModelRole, - DurationRole, - StringDurationRole, - MilliSecondsDurationRole, - ArtistRole, - AllArtistsRole, - HighestTrackRating, - AlbumRole, - AlbumArtistRole, - IsValidAlbumArtistRole, - TrackNumberRole, - DiscNumberRole, - RatingRole, - GenreRole, - LyricistRole, - ComposerRole, - CommentRole, - YearRole, - ChannelsRole, - BitRateRole, - SampleRateRole, - ResourceRole, - IdRole, - DatabaseIdRole, - IsSingleDiscAlbumRole, - ContainerDataRole, - IsPartialDataRole, - AlbumIdRole, - HasEmbeddedCover, - FileModificationTime, - FirstPlayDate, - LastPlayDate, - PlayCounter, - PlayFrequency, - ElementTypeRole, - LyricsRole, - }; - - Q_ENUM(ColumnsRoles) - -private: - - using DataType = QMap; - -public: - - class TrackDataType : public DataType - { - public: - - using DataType::DataType; - - bool isValid() const - { - return !isEmpty(); - } - - qulonglong databaseId() const - { - return operator[](key_type::DatabaseIdRole).toULongLong(); - } - - QString title() const - { - return operator[](key_type::TitleRole).toString(); - } - - QString artist() const - { - return operator[](key_type::ArtistRole).toString(); - } - - qulonglong albumId() const - { - return operator[](key_type::AlbumIdRole).toULongLong(); - } - - bool hasAlbum() const - { - return find(key_type::AlbumRole) != end(); - } - - QString album() const - { - return operator[](key_type::AlbumRole).toString(); - } - - QString albumArtist() const - { - return operator[](key_type::AlbumArtistRole).toString(); - } - - bool hasTrackNumber() const - { - return find(key_type::TrackNumberRole) != end(); - } - - int trackNumber() const - { - return operator[](key_type::TrackNumberRole).toInt(); - } - - bool hasDiscNumber() const - { - return find(key_type::DiscNumberRole) != end(); - } - - int discNumber() const - { - return operator[](key_type::DiscNumberRole).toInt(); - } - - QTime duration() const - { - return operator[](key_type::DurationRole).toTime(); - } - - QUrl resourceURI() const - { - return operator[](key_type::ResourceRole).toUrl(); - } - - QUrl albumCover() const - { - return operator[](key_type::ImageUrlRole).toUrl(); - } - - bool isSingleDiscAlbum() const - { - return operator[](key_type::IsSingleDiscAlbumRole).toBool(); - } - - int rating() const - { - return operator[](key_type::RatingRole).toInt(); - } - - QString genre() const - { - return operator[](key_type::GenreRole).toString(); - } - - QString composer() const - { - return operator[](key_type::ComposerRole).toString(); - } - - QString lyricist() const - { - return operator[](key_type::LyricistRole).toString(); - } - - QString lyrics() const - { - return operator[](key_type::LyricsRole).toString(); - } - - QString comment() const - { - return operator[](key_type::CommentRole).toString(); - } - - int year() const - { - return operator[](key_type::YearRole).toInt(); - } - - int channels() const - { - return operator[](key_type::ChannelsRole).toInt(); - } - - int bitRate() const - { - return operator[](key_type::BitRateRole).toInt(); - } - - int sampleRate() const - { - return operator[](key_type::SampleRateRole).toInt(); - } - - bool hasEmbeddedCover() const - { - return operator[](key_type::HasEmbeddedCover).toBool(); - } - - QDateTime fileModificationTime() const - { - return operator[](key_type::FileModificationTime).toDateTime(); - } - }; - - using ListTrackDataType = QList; - - using ListRadioDataType = QList; - - class AlbumDataType : public DataType - { - public: - - using DataType::DataType; - - qulonglong databaseId() const - { - return operator[](key_type::DatabaseIdRole).toULongLong(); - } - - QString title() const - { - return operator[](key_type::TitleRole).toString(); - } - - QString artist() const - { - return operator[](key_type::ArtistRole).toString(); - } - - bool isValidArtist() const - { - const auto &artistData = operator[](key_type::ArtistRole); - return artistData.isValid() && !artistData.toString().isEmpty(); - } - - QStringList genres() const - { - return operator[](key_type::GenreRole).toStringList(); - } - - QUrl albumArtURI() const - { - return operator[](key_type::ImageUrlRole).toUrl(); - } - - bool isSingleDiscAlbum() const - { - return operator[](key_type::IsSingleDiscAlbumRole).toBool(); - } - - bool isValid() const - { - return !isEmpty(); - } - - }; - - using ListAlbumDataType = QList; - - class ArtistDataType : public DataType - { - public: - - using DataType::DataType; - - qulonglong databaseId() const - { - return operator[](key_type::DatabaseIdRole).toULongLong(); - } - - }; - - using ListArtistDataType = QList; - - class GenreDataType : public DataType - { - public: - - using DataType::DataType; - - qulonglong databaseId() const - { - return operator[](key_type::DatabaseIdRole).toULongLong(); - } - - QString title() const - { - return operator[](key_type::TitleRole).toString(); - } - - }; - - using ListGenreDataType = QList; - - enum PropertyType { - DatabaseId, - DisplayRole, - SecondaryRole, - }; - - Q_ENUM(PropertyType) - - enum AlbumDiscsCount { - SingleDiscAlbum, - MultipleDiscsAlbum, - }; - - Q_ENUM(AlbumDiscsCount) - explicit DatabaseInterface(QObject *parent = nullptr); ~DatabaseInterface() override; Q_INVOKABLE void init(const QString &dbName, const QString &databaseFileName = {}); qulonglong albumIdFromTitleAndArtist(const QString &title, const QString &artist, const QString &albumPath); - ListTrackDataType allTracksData(); + DataTypes::ListTrackDataType allTracksData(); - ListRadioDataType allRadiosData(); + DataTypes::ListRadioDataType allRadiosData(); - ListTrackDataType recentlyPlayedTracksData(int count); + DataTypes::ListTrackDataType recentlyPlayedTracksData(int count); - ListTrackDataType frequentlyPlayedTracksData(int count); + DataTypes::ListTrackDataType frequentlyPlayedTracksData(int count); - ListAlbumDataType allAlbumsData(); + DataTypes::ListAlbumDataType allAlbumsData(); - ListAlbumDataType allAlbumsDataByGenreAndArtist(const QString &genre, const QString &artist); + DataTypes::ListAlbumDataType allAlbumsDataByGenreAndArtist(const QString &genre, const QString &artist); - ListAlbumDataType allAlbumsDataByArtist(const QString &artist); + DataTypes::ListAlbumDataType allAlbumsDataByArtist(const QString &artist); - AlbumDataType albumDataFromDatabaseId(qulonglong id); + DataTypes::AlbumDataType albumDataFromDatabaseId(qulonglong id); - ListTrackDataType albumData(qulonglong databaseId); + DataTypes::ListTrackDataType albumData(qulonglong databaseId); - ListArtistDataType allArtistsData(); + DataTypes::ListArtistDataType allArtistsData(); - ListArtistDataType allArtistsDataByGenre(const QString &genre); + DataTypes::ListArtistDataType allArtistsDataByGenre(const QString &genre); - ListGenreDataType allGenresData(); + DataTypes::ListGenreDataType allGenresData(); bool internalArtistMatchGenre(qulonglong databaseId, const QString &genre); - ListTrackDataType tracksDataFromAuthor(const QString &artistName); + DataTypes::ListTrackDataType tracksDataFromAuthor(const QString &artistName); - TrackDataType trackDataFromDatabaseId(qulonglong id); + DataTypes::TrackDataType trackDataFromDatabaseId(qulonglong id); - TrackDataType radioDataFromDatabaseId(qulonglong id); + DataTypes::TrackDataType radioDataFromDatabaseId(qulonglong id); qulonglong trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional &album, std::optional trackNumber, std::optional discNumber); @@ -397,27 +95,27 @@ Q_SIGNALS: - void artistsAdded(const DatabaseInterface::ListArtistDataType &newArtists); + void artistsAdded(const DataTypes::ListArtistDataType &newArtists); - void composersAdded(const DatabaseInterface::ListArtistDataType &newComposers); + void composersAdded(const DataTypes::ListArtistDataType &newComposers); - void lyricistsAdded(const DatabaseInterface::ListArtistDataType &newLyricists); + void lyricistsAdded(const DataTypes::ListArtistDataType &newLyricists); - void albumsAdded(const DatabaseInterface::ListAlbumDataType &newAlbums); + void albumsAdded(const DataTypes::ListAlbumDataType &newAlbums); - void tracksAdded(const DatabaseInterface::ListTrackDataType &allTracks); + void tracksAdded(const DataTypes::ListTrackDataType &allTracks); - void genresAdded(const DatabaseInterface::ListGenreDataType &allGenres); + void genresAdded(const DataTypes::ListGenreDataType &allGenres); void artistRemoved(qulonglong removedArtistId); void albumRemoved(qulonglong removedAlbumId); void trackRemoved(qulonglong id); - void albumModified(const DatabaseInterface::AlbumDataType &modifiedAlbum, qulonglong modifiedAlbumId); + void albumModified(const DataTypes::AlbumDataType &modifiedAlbum, qulonglong modifiedAlbumId); - void trackModified(const DatabaseInterface::TrackDataType &modifiedTrack); + void trackModified(const DataTypes::TrackDataType &modifiedTrack); void requestsInitDone(); @@ -431,9 +129,9 @@ void finishRemovingTracksList(); - void radioAdded(const DatabaseInterface::TrackDataType &radio); + void radioAdded(const DataTypes::TrackDataType &radio); - void radioModified(const DatabaseInterface::TrackDataType &radio); + void radioModified(const DataTypes::TrackDataType &radio); void radioRemoved(qulonglong radioId); @@ -449,7 +147,7 @@ void clearData(); - void insertRadio(const DatabaseInterface::TrackDataType &oneTrack); + void insertRadio(const DataTypes::TrackDataType &oneTrack); void removeRadio(qulonglong radioId); @@ -489,7 +187,7 @@ qulonglong internalRadioIdFromHttpAddress(const QString &httpAddress); - ListTrackDataType internalTracksFromAuthor(const QString &artistName); + DataTypes::ListTrackDataType internalTracksFromAuthor(const QString &artistName); QList internalAlbumIdsFromAuthor(const QString &artistName); @@ -530,9 +228,9 @@ MusicAudioTrack buildTrackFromDatabaseRecord(const QSqlRecord &trackRecord) const; - TrackDataType buildTrackDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; + DataTypes::TrackDataType buildTrackDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; - TrackDataType buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; + DataTypes::TrackDataType buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const; void internalRemoveTracksList(const QList &removedTracks); @@ -550,29 +248,29 @@ bool internalGenericPartialData(QSqlQuery &query); - ListArtistDataType internalAllArtistsPartialData(QSqlQuery &artistsQuery); + DataTypes::ListArtistDataType internalAllArtistsPartialData(QSqlQuery &artistsQuery); - ListAlbumDataType internalAllAlbumsPartialData(QSqlQuery &query); + DataTypes::ListAlbumDataType internalAllAlbumsPartialData(QSqlQuery &query); - AlbumDataType internalOneAlbumPartialData(qulonglong databaseId); + DataTypes::AlbumDataType internalOneAlbumPartialData(qulonglong databaseId); - ListTrackDataType internalAllTracksPartialData(); + DataTypes::ListTrackDataType internalAllTracksPartialData(); - ListRadioDataType internalAllRadiosPartialData(); + DataTypes::ListRadioDataType internalAllRadiosPartialData(); - ListTrackDataType internalRecentlyPlayedTracksData(int count); + DataTypes::ListTrackDataType internalRecentlyPlayedTracksData(int count); - ListTrackDataType internalFrequentlyPlayedTracksData(int count); + DataTypes::ListTrackDataType internalFrequentlyPlayedTracksData(int count); - TrackDataType internalOneTrackPartialData(qulonglong databaseId); + DataTypes::TrackDataType internalOneTrackPartialData(qulonglong databaseId); - TrackDataType internalOneRadioPartialData(qulonglong databaseId); + DataTypes::TrackDataType internalOneRadioPartialData(qulonglong databaseId); - ListGenreDataType internalAllGenresPartialData(); + DataTypes::ListGenreDataType internalAllGenresPartialData(); - ListArtistDataType internalAllComposersPartialData(); + DataTypes::ListArtistDataType internalAllComposersPartialData(); - ListArtistDataType internalAllLyricistsPartialData(); + DataTypes::ListArtistDataType internalAllLyricistsPartialData(); bool prepareQuery(QSqlQuery &query, const QString &queryText) const; @@ -619,14 +317,4 @@ }; -Q_DECLARE_METATYPE(DatabaseInterface::TrackDataType) -Q_DECLARE_METATYPE(DatabaseInterface::AlbumDataType) -Q_DECLARE_METATYPE(DatabaseInterface::ArtistDataType) -Q_DECLARE_METATYPE(DatabaseInterface::GenreDataType) - -Q_DECLARE_METATYPE(DatabaseInterface::ListTrackDataType) -Q_DECLARE_METATYPE(DatabaseInterface::ListAlbumDataType) -Q_DECLARE_METATYPE(DatabaseInterface::ListArtistDataType) -Q_DECLARE_METATYPE(DatabaseInterface::ListGenreDataType) - #endif // DATABASEINTERFACE_H diff --git a/src/databaseinterface.cpp b/src/databaseinterface.cpp --- a/src/databaseinterface.cpp +++ b/src/databaseinterface.cpp @@ -358,9 +358,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::allTracksData() +DataTypes::ListTrackDataType DatabaseInterface::allTracksData() { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; if (!d) { return result; @@ -381,9 +381,9 @@ return result; } -DatabaseInterface::ListRadioDataType DatabaseInterface::allRadiosData() +DataTypes::ListRadioDataType DatabaseInterface::allRadiosData() { - auto result = ListRadioDataType{}; + auto result = DataTypes::ListRadioDataType{}; if (!d) { return result; @@ -404,9 +404,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::recentlyPlayedTracksData(int count) +DataTypes::ListTrackDataType DatabaseInterface::recentlyPlayedTracksData(int count) { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; if (!d) { return result; @@ -427,9 +427,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::frequentlyPlayedTracksData(int count) +DataTypes::ListTrackDataType DatabaseInterface::frequentlyPlayedTracksData(int count) { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; if (!d) { return result; @@ -450,9 +450,9 @@ return result; } -DatabaseInterface::ListAlbumDataType DatabaseInterface::allAlbumsData() +DataTypes::ListAlbumDataType DatabaseInterface::allAlbumsData() { - auto result = ListAlbumDataType{}; + auto result = DataTypes::ListAlbumDataType{}; if (!d) { return result; @@ -473,9 +473,9 @@ return result; } -DatabaseInterface::ListAlbumDataType DatabaseInterface::allAlbumsDataByGenreAndArtist(const QString &genre, const QString &artist) +DataTypes::ListAlbumDataType DatabaseInterface::allAlbumsDataByGenreAndArtist(const QString &genre, const QString &artist) { - auto result = ListAlbumDataType{}; + auto result = DataTypes::ListAlbumDataType{}; if (!d) { return result; @@ -499,9 +499,9 @@ return result; } -DatabaseInterface::ListAlbumDataType DatabaseInterface::allAlbumsDataByArtist(const QString &artist) +DataTypes::ListAlbumDataType DatabaseInterface::allAlbumsDataByArtist(const QString &artist) { - auto result = ListAlbumDataType{}; + auto result = DataTypes::ListAlbumDataType{}; if (!d) { return result; @@ -524,9 +524,9 @@ return result; } -DatabaseInterface::AlbumDataType DatabaseInterface::albumDataFromDatabaseId(qulonglong id) +DataTypes::AlbumDataType DatabaseInterface::albumDataFromDatabaseId(qulonglong id) { - auto result = DatabaseInterface::AlbumDataType{}; + auto result = DataTypes::AlbumDataType{}; if (!d) { return result; @@ -547,9 +547,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::albumData(qulonglong databaseId) +DataTypes::ListTrackDataType DatabaseInterface::albumData(qulonglong databaseId) { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; if (!d) { return result; @@ -588,9 +588,9 @@ return result; } -DatabaseInterface::ListArtistDataType DatabaseInterface::allArtistsData() +DataTypes::ListArtistDataType DatabaseInterface::allArtistsData() { - auto result = ListArtistDataType{}; + auto result = DataTypes::ListArtistDataType{}; if (!d) { return result; @@ -611,11 +611,11 @@ return result; } -DatabaseInterface::ListArtistDataType DatabaseInterface::allArtistsDataByGenre(const QString &genre) +DataTypes::ListArtistDataType DatabaseInterface::allArtistsDataByGenre(const QString &genre) { qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::allArtistsDataByGenre" << genre; - auto result = ListArtistDataType{}; + auto result = DataTypes::ListArtistDataType{}; if (!d) { return result; @@ -638,9 +638,9 @@ return result; } -DatabaseInterface::ListGenreDataType DatabaseInterface::allGenresData() +DataTypes::ListGenreDataType DatabaseInterface::allGenresData() { - auto result = ListGenreDataType{}; + auto result = DataTypes::ListGenreDataType{}; if (!d) { return result; @@ -700,9 +700,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::tracksDataFromAuthor(const QString &ArtistName) +DataTypes::ListTrackDataType DatabaseInterface::tracksDataFromAuthor(const QString &ArtistName) { - auto allTracks = ListTrackDataType{}; + auto allTracks = DataTypes::ListTrackDataType{}; auto transactionResult = startTransaction(); if (!transactionResult) { @@ -719,9 +719,9 @@ return allTracks; } -DatabaseInterface::TrackDataType DatabaseInterface::trackDataFromDatabaseId(qulonglong id) +DataTypes::TrackDataType DatabaseInterface::trackDataFromDatabaseId(qulonglong id) { - auto result = TrackDataType(); + auto result = DataTypes::TrackDataType(); if (!d) { return result; @@ -742,9 +742,9 @@ return result; } -DatabaseInterface::TrackDataType DatabaseInterface::radioDataFromDatabaseId(qulonglong id) +DataTypes::TrackDataType DatabaseInterface::radioDataFromDatabaseId(qulonglong id) { - auto result = TrackDataType(); + auto result = DataTypes::TrackDataType(); if (!d) { return result; @@ -1026,17 +1026,17 @@ } if (!d->mInsertedArtists.isEmpty()) { - ListArtistDataType newArtists; + DataTypes::ListArtistDataType newArtists; for (auto artistId : qAsConst(d->mInsertedArtists)) { - newArtists.push_back({{DatabaseIdRole, artistId}}); + newArtists.push_back({{DataTypes::DatabaseIdRole, artistId}}); } qCInfo(orgKdeElisaDatabase) << "artistsAdded" << newArtists.size(); Q_EMIT artistsAdded(newArtists); } if (!d->mInsertedAlbums.isEmpty()) { - ListAlbumDataType newAlbums; + DataTypes::ListAlbumDataType newAlbums; for (auto albumId : qAsConst(d->mInsertedAlbums)) { d->mModifiedAlbumIds.remove(albumId); @@ -1048,11 +1048,11 @@ } for (auto albumId : qAsConst(d->mModifiedAlbumIds)) { - Q_EMIT albumModified({{DatabaseIdRole, albumId}}, albumId); + Q_EMIT albumModified({{DataTypes::DatabaseIdRole, albumId}}, albumId); } if (!d->mInsertedTracks.isEmpty()) { - ListTrackDataType newTracks; + DataTypes::ListTrackDataType newTracks; for (auto trackId : qAsConst(d->mInsertedTracks)) { newTracks.push_back(internalOneTrackPartialData(trackId)); @@ -1088,9 +1088,9 @@ internalRemoveTracksList(removedTracks); if (!d->mInsertedArtists.isEmpty()) { - ListArtistDataType newArtists; + DataTypes::ListArtistDataType newArtists; for (auto artistId : qAsConst(d->mInsertedArtists)) { - newArtists.push_back({{DatabaseIdRole, artistId}}); + newArtists.push_back({{DataTypes::DatabaseIdRole, artistId}}); } Q_EMIT artistsAdded(newArtists); } @@ -5976,7 +5976,7 @@ d->mInsertGenreQuery.finish(); - Q_EMIT genresAdded({{{DatabaseIdRole, result}}}); + Q_EMIT genresAdded({{{DataTypes::DatabaseIdRole, result}}}); return result; } @@ -6324,104 +6324,104 @@ return result; } -DatabaseInterface::TrackDataType DatabaseInterface::buildTrackDataFromDatabaseRecord(const QSqlRecord &trackRecord) const +DataTypes::TrackDataType DatabaseInterface::buildTrackDataFromDatabaseRecord(const QSqlRecord &trackRecord) const { - TrackDataType result; + DataTypes::TrackDataType result; - result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); - result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); + result[DataTypes::TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); + result[DataTypes::TrackDataType::key_type::TitleRole] = trackRecord.value(1); if (!trackRecord.value(12).isNull()) { - result[TrackDataType::key_type::AlbumRole] = trackRecord.value(12); - result[TrackDataType::key_type::AlbumIdRole] = trackRecord.value(2); + result[DataTypes::TrackDataType::key_type::AlbumRole] = trackRecord.value(12); + result[DataTypes::TrackDataType::key_type::AlbumIdRole] = trackRecord.value(2); } if (!trackRecord.value(3).isNull()) { - result[TrackDataType::key_type::ArtistRole] = trackRecord.value(3); + result[DataTypes::TrackDataType::key_type::ArtistRole] = trackRecord.value(3); } if (!trackRecord.value(6).isNull()) { - result[TrackDataType::key_type::IsValidAlbumArtistRole] = true; - result[TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(6); + result[DataTypes::TrackDataType::key_type::IsValidAlbumArtistRole] = true; + result[DataTypes::TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(6); } else { - result[TrackDataType::key_type::IsValidAlbumArtistRole] = false; + result[DataTypes::TrackDataType::key_type::IsValidAlbumArtistRole] = false; if (trackRecord.value(4).toInt() == 1) { - result[TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(3); + result[DataTypes::TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(3); } else if (trackRecord.value(4).toInt() > 1) { - result[TrackDataType::key_type::AlbumArtistRole] = i18n("Various Artists"); + result[DataTypes::TrackDataType::key_type::AlbumArtistRole] = i18n("Various Artists"); } } - result[TrackDataType::key_type::ResourceRole] = trackRecord.value(7); + result[DataTypes::TrackDataType::key_type::ResourceRole] = trackRecord.value(7); if (!trackRecord.value(9).isNull()) { - result[TrackDataType::key_type::TrackNumberRole] = trackRecord.value(9); + result[DataTypes::TrackDataType::key_type::TrackNumberRole] = trackRecord.value(9); } if (!trackRecord.value(10).isNull()) { - result[TrackDataType::key_type::DiscNumberRole] = trackRecord.value(10); + result[DataTypes::TrackDataType::key_type::DiscNumberRole] = trackRecord.value(10); } - result[TrackDataType::key_type::DurationRole] = QTime::fromMSecsSinceStartOfDay(trackRecord.value(11).toInt()); - result[TrackDataType::key_type::MilliSecondsDurationRole] = trackRecord.value(11).toInt(); - result[TrackDataType::key_type::RatingRole] = trackRecord.value(13); + result[DataTypes::TrackDataType::key_type::DurationRole] = QTime::fromMSecsSinceStartOfDay(trackRecord.value(11).toInt()); + result[DataTypes::TrackDataType::key_type::MilliSecondsDurationRole] = trackRecord.value(11).toInt(); + result[DataTypes::TrackDataType::key_type::RatingRole] = trackRecord.value(13); if (!trackRecord.value(14).toString().isEmpty()) { - result[TrackDataType::key_type::ImageUrlRole] = QUrl(trackRecord.value(14).toString()); + result[DataTypes::TrackDataType::key_type::ImageUrlRole] = QUrl(trackRecord.value(14).toString()); } else if (!trackRecord.value(30).toString().isEmpty()) { - result[TrackDataType::key_type::ImageUrlRole] = QVariant{QLatin1String("image://cover/") + trackRecord.value(30).toUrl().toLocalFile()}; + result[DataTypes::TrackDataType::key_type::ImageUrlRole] = QVariant{QLatin1String("image://cover/") + trackRecord.value(30).toUrl().toLocalFile()}; } - result[TrackDataType::key_type::IsSingleDiscAlbumRole] = trackRecord.value(15); + result[DataTypes::TrackDataType::key_type::IsSingleDiscAlbumRole] = trackRecord.value(15); if (!trackRecord.value(16).isNull()) { - result[TrackDataType::key_type::GenreRole] = trackRecord.value(16); + result[DataTypes::TrackDataType::key_type::GenreRole] = trackRecord.value(16); } if (!trackRecord.value(17).isNull()) { - result[TrackDataType::key_type::ComposerRole] = trackRecord.value(17); + result[DataTypes::TrackDataType::key_type::ComposerRole] = trackRecord.value(17); } if (!trackRecord.value(18).isNull()) { - result[TrackDataType::key_type::LyricistRole] = trackRecord.value(18); + result[DataTypes::TrackDataType::key_type::LyricistRole] = trackRecord.value(18); } if (!trackRecord.value(19).isNull()) { - result[TrackDataType::key_type::CommentRole] = trackRecord.value(19); + result[DataTypes::TrackDataType::key_type::CommentRole] = trackRecord.value(19); } if (!trackRecord.value(20).isNull()) { - result[TrackDataType::key_type::YearRole] = trackRecord.value(20); + result[DataTypes::TrackDataType::key_type::YearRole] = trackRecord.value(20); } if (!trackRecord.value(21).isNull()) { - result[TrackDataType::key_type::ChannelsRole] = trackRecord.value(21); + result[DataTypes::TrackDataType::key_type::ChannelsRole] = trackRecord.value(21); } if (!trackRecord.value(22).isNull()) { - result[TrackDataType::key_type::BitRateRole] = trackRecord.value(22); + result[DataTypes::TrackDataType::key_type::BitRateRole] = trackRecord.value(22); } if (!trackRecord.value(23).isNull()) { - result[TrackDataType::key_type::SampleRateRole] = trackRecord.value(23); + result[DataTypes::TrackDataType::key_type::SampleRateRole] = trackRecord.value(23); } - result[TrackDataType::key_type::HasEmbeddedCover] = trackRecord.value(24); - result[TrackDataType::key_type::FileModificationTime] = trackRecord.value(8); + result[DataTypes::TrackDataType::key_type::HasEmbeddedCover] = trackRecord.value(24); + result[DataTypes::TrackDataType::key_type::FileModificationTime] = trackRecord.value(8); if (!trackRecord.value(26).isNull()) { - result[TrackDataType::key_type::FirstPlayDate] = trackRecord.value(26); + result[DataTypes::TrackDataType::key_type::FirstPlayDate] = trackRecord.value(26); } if (!trackRecord.value(27).isNull()) { - result[TrackDataType::key_type::LastPlayDate] = trackRecord.value(27); + result[DataTypes::TrackDataType::key_type::LastPlayDate] = trackRecord.value(27); } - result[TrackDataType::key_type::PlayCounter] = trackRecord.value(28); - result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(29); - result[TrackDataType::key_type::ElementTypeRole] = ElisaUtils::Track; + result[DataTypes::TrackDataType::key_type::PlayCounter] = trackRecord.value(28); + result[DataTypes::TrackDataType::key_type::PlayFrequency] = trackRecord.value(29); + result[DataTypes::TrackDataType::key_type::ElementTypeRole] = ElisaUtils::Track; return result; } -DatabaseInterface::TrackDataType DatabaseInterface::buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const +DataTypes::TrackDataType DatabaseInterface::buildRadioDataFromDatabaseRecord(const QSqlRecord &trackRecord) const { - TrackDataType result; + DataTypes::TrackDataType result; - result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); - result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); + result[DataTypes::TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); + result[DataTypes::TrackDataType::key_type::TitleRole] = trackRecord.value(1); - result[TrackDataType::key_type::AlbumRole] = i18n("Radios"); - result[TrackDataType::key_type::ArtistRole] = trackRecord.value(1); + result[DataTypes::TrackDataType::key_type::AlbumRole] = i18n("Radios"); + result[DataTypes::TrackDataType::key_type::ArtistRole] = trackRecord.value(1); - result[TrackDataType::key_type::ResourceRole] = trackRecord.value(2); - result[TrackDataType::key_type::RatingRole] = trackRecord.value(3); + result[DataTypes::TrackDataType::key_type::ResourceRole] = trackRecord.value(2); + result[DataTypes::TrackDataType::key_type::RatingRole] = trackRecord.value(3); if (!trackRecord.value(4).isNull()) { - result[TrackDataType::key_type::GenreRole] = trackRecord.value(4); + result[DataTypes::TrackDataType::key_type::GenreRole] = trackRecord.value(4); } - result[TrackDataType::key_type::CommentRole] = trackRecord.value(5); - result[TrackDataType::key_type::ElementTypeRole] = ElisaUtils::Radio; + result[DataTypes::TrackDataType::key_type::CommentRole] = trackRecord.value(5); + result[DataTypes::TrackDataType::key_type::ElementTypeRole] = ElisaUtils::Radio; return result; } @@ -6484,14 +6484,14 @@ auto tracksCount = fetchTrackIds(modifiedAlbumId).count(); if (!modifiedAlbumData.isEmpty() && tracksCount) { - Q_EMIT albumModified({{DatabaseIdRole, modifiedAlbumId}}, modifiedAlbumId); + Q_EMIT albumModified({{DataTypes::DatabaseIdRole, modifiedAlbumId}}, modifiedAlbumId); } else { removeAlbumInDatabase(modifiedAlbumId); Q_EMIT albumRemoved(modifiedAlbumId); - const auto &allTracksFromArtist = internalTracksFromAuthor(modifiedAlbumData[AlbumDataType::key_type::ArtistRole].toString()); - const auto &allAlbumsFromArtist = internalAlbumIdsFromAuthor(modifiedAlbumData[AlbumDataType::key_type::ArtistRole].toString()); - const auto &removedArtistId = internalArtistIdFromName(modifiedAlbumData[AlbumDataType::key_type::ArtistRole].toString()); + const auto &allTracksFromArtist = internalTracksFromAuthor(modifiedAlbumData[DataTypes::AlbumDataType::key_type::ArtistRole].toString()); + const auto &allAlbumsFromArtist = internalAlbumIdsFromAuthor(modifiedAlbumData[DataTypes::AlbumDataType::key_type::ArtistRole].toString()); + const auto &removedArtistId = internalArtistIdFromName(modifiedAlbumData[DataTypes::AlbumDataType::key_type::ArtistRole].toString()); if (removedArtistId != 0 && allTracksFromArtist.isEmpty() && allAlbumsFromArtist.isEmpty()) { removeArtistInDatabase(removedArtistId); @@ -6813,7 +6813,7 @@ d->mUpdateTrackQuery.finish(); } -void DatabaseInterface::insertRadio(const TrackDataType &oneTrack) +void DatabaseInterface::insertRadio(const DataTypes::TrackDataType &oneTrack) { QSqlQuery query = d->mUpdateRadioQuery; @@ -6836,7 +6836,7 @@ qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.boundValues(); qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << query.lastError(); } else { - if (oneTrack[TrackDataType::key_type::DatabaseIdRole] == -1) { + if (oneTrack[DataTypes::TrackDataType::key_type::DatabaseIdRole] == -1) { auto radio = internalOneRadioPartialData(internalRadioIdFromHttpAddress(oneTrack.resourceURI().toString())); Q_EMIT radioAdded(radio); @@ -7249,9 +7249,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) +DataTypes::ListTrackDataType DatabaseInterface::internalTracksFromAuthor(const QString &ArtistName) { - auto allTracks = ListTrackDataType{}; + auto allTracks = DataTypes::ListTrackDataType{}; d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); @@ -7307,23 +7307,23 @@ return allAlbumIds; } -DatabaseInterface::ListArtistDataType DatabaseInterface::internalAllArtistsPartialData(QSqlQuery &artistsQuery) +DataTypes::ListArtistDataType DatabaseInterface::internalAllArtistsPartialData(QSqlQuery &artistsQuery) { - auto result = ListArtistDataType{}; + auto result = DataTypes::ListArtistDataType{}; if (!internalGenericPartialData(artistsQuery)) { return result; } while(artistsQuery.next()) { - auto newData = ArtistDataType{}; + auto newData = DataTypes::ArtistDataType{}; const auto ¤tRecord = artistsQuery.record(); - newData[DataType::key_type::DatabaseIdRole] = currentRecord.value(0); - newData[DataType::key_type::TitleRole] = currentRecord.value(1); - newData[DataType::key_type::GenreRole] = QVariant::fromValue(currentRecord.value(2).toString().split(QStringLiteral(", "))); - newData[DataType::key_type::ElementTypeRole] = ElisaUtils::Artist; + newData[DataTypes::DatabaseIdRole] = currentRecord.value(0); + newData[DataTypes::TitleRole] = currentRecord.value(1); + newData[DataTypes::GenreRole] = QVariant::fromValue(currentRecord.value(2).toString().split(QStringLiteral(", "))); + newData[DataTypes::ElementTypeRole] = ElisaUtils::Artist; result.push_back(newData); } @@ -7333,45 +7333,45 @@ return result; } -DatabaseInterface::ListAlbumDataType DatabaseInterface::internalAllAlbumsPartialData(QSqlQuery &query) +DataTypes::ListAlbumDataType DatabaseInterface::internalAllAlbumsPartialData(QSqlQuery &query) { - auto result = ListAlbumDataType{}; + auto result = DataTypes::ListAlbumDataType{}; if (!internalGenericPartialData(query)) { return result; } while(query.next()) { - auto newData = AlbumDataType{}; + auto newData = DataTypes::AlbumDataType{}; const auto ¤tRecord = query.record(); - newData[DataType::key_type::DatabaseIdRole] = currentRecord.value(0); - newData[DataType::key_type::TitleRole] = currentRecord.value(1); + newData[DataTypes::DatabaseIdRole] = currentRecord.value(0); + newData[DataTypes::TitleRole] = currentRecord.value(1); if (!currentRecord.value(3).toString().isEmpty()) { - newData[DataType::key_type::ImageUrlRole] = currentRecord.value(3); + newData[DataTypes::ImageUrlRole] = currentRecord.value(3); } else if (!currentRecord.value(10).toString().isEmpty()) { - newData[DataType::key_type::ImageUrlRole] = QVariant{QLatin1String("image://cover/") + currentRecord.value(10).toUrl().toLocalFile()}; + newData[DataTypes::ImageUrlRole] = QVariant{QLatin1String("image://cover/") + currentRecord.value(10).toUrl().toLocalFile()}; } auto allArtists = currentRecord.value(6).toString().split(QStringLiteral(", ")); allArtists.removeDuplicates(); - newData[DataType::key_type::AllArtistsRole] = QVariant::fromValue(allArtists); + newData[DataTypes::AllArtistsRole] = QVariant::fromValue(allArtists); if (!currentRecord.value(4).isNull()) { - newData[DataType::key_type::IsValidAlbumArtistRole] = true; - newData[DataType::key_type::SecondaryTextRole] = currentRecord.value(4); + newData[DataTypes::IsValidAlbumArtistRole] = true; + newData[DataTypes::SecondaryTextRole] = currentRecord.value(4); } else { - newData[DataType::key_type::IsValidAlbumArtistRole] = false; + newData[DataTypes::IsValidAlbumArtistRole] = false; if (currentRecord.value(5).toInt() == 1) { - newData[DataType::key_type::SecondaryTextRole] = allArtists.first(); + newData[DataTypes::SecondaryTextRole] = allArtists.first(); } else if (currentRecord.value(5).toInt() > 1) { - newData[DataType::key_type::SecondaryTextRole] = i18n("Various Artists"); + newData[DataTypes::SecondaryTextRole] = i18n("Various Artists"); } } - newData[DataType::key_type::ArtistRole] = newData[DataType::key_type::SecondaryTextRole]; - newData[DataType::key_type::HighestTrackRating] = currentRecord.value(7); - newData[DataType::key_type::IsSingleDiscAlbumRole] = currentRecord.value(9); - newData[DataType::key_type::GenreRole] = QVariant::fromValue(currentRecord.value(8).toString().split(QStringLiteral(", "))); - newData[DataType::key_type::ElementTypeRole] = ElisaUtils::Album; + newData[DataTypes::ArtistRole] = newData[DataTypes::SecondaryTextRole]; + newData[DataTypes::HighestTrackRating] = currentRecord.value(7); + newData[DataTypes::IsSingleDiscAlbumRole] = currentRecord.value(9); + newData[DataTypes::GenreRole] = QVariant::fromValue(currentRecord.value(8).toString().split(QStringLiteral(", "))); + newData[DataTypes::ElementTypeRole] = ElisaUtils::Album; result.push_back(newData); } @@ -7381,9 +7381,9 @@ return result; } -DatabaseInterface::AlbumDataType DatabaseInterface::internalOneAlbumPartialData(qulonglong databaseId) +DataTypes::AlbumDataType DatabaseInterface::internalOneAlbumPartialData(qulonglong databaseId) { - auto result = AlbumDataType{}; + auto result = DataTypes::AlbumDataType{}; d->mSelectAlbumQuery.bindValue(QStringLiteral(":albumId"), databaseId); @@ -7394,44 +7394,45 @@ if (d->mSelectAlbumQuery.next()) { const auto ¤tRecord = d->mSelectAlbumQuery.record(); - result[DataType::key_type::DatabaseIdRole] = currentRecord.value(0); - result[DataType::key_type::TitleRole] = currentRecord.value(1); + result[DataTypes::DatabaseIdRole] = currentRecord.value(0); + result[DataTypes::TitleRole] = currentRecord.value(1); if (!currentRecord.value(4).toString().isEmpty()) { - result[DataType::key_type::ImageUrlRole] = currentRecord.value(4); + result[DataTypes::ImageUrlRole] = currentRecord.value(4); } else if (!currentRecord.value(11).toString().isEmpty()) { - result[DataType::key_type::ImageUrlRole] = QVariant{QLatin1String("image://cover/") + currentRecord.value(11).toUrl().toLocalFile()}; + result[DataTypes::ImageUrlRole] = QVariant{QLatin1String("image://cover/") + currentRecord.value(11).toUrl().toLocalFile()}; } auto allArtists = currentRecord.value(8).toString().split(QStringLiteral(", ")); allArtists.removeDuplicates(); - result[DataType::key_type::AllArtistsRole] = QVariant::fromValue(allArtists); + result[DataTypes::AllArtistsRole] = QVariant::fromValue(allArtists); if (!currentRecord.value(2).isNull()) { - result[DataType::key_type::IsValidAlbumArtistRole] = true; - result[DataType::key_type::SecondaryTextRole] = currentRecord.value(2); + result[DataTypes::IsValidAlbumArtistRole] = true; + result[DataTypes::SecondaryTextRole] = currentRecord.value(2); } else { - result[DataType::key_type::IsValidAlbumArtistRole] = false; + result[DataTypes::IsValidAlbumArtistRole] = false; if (currentRecord.value(7).toInt() == 1) { - result[DataType::key_type::SecondaryTextRole] = allArtists.first(); + result[DataTypes::SecondaryTextRole] = allArtists.first(); } else if (currentRecord.value(7).toInt() > 1) { - result[DataType::key_type::SecondaryTextRole] = i18n("Various Artists"); + result[DataTypes::SecondaryTextRole] = i18n("Various Artists"); } } - result[DataType::key_type::ArtistRole] = result[DataType::key_type::SecondaryTextRole]; - result[DataType::key_type::HighestTrackRating] = currentRecord.value(9); - result[DataType::key_type::IsSingleDiscAlbumRole] = currentRecord.value(6); - result[DataType::key_type::GenreRole] = QVariant::fromValue(currentRecord.value(10).toString().split(QStringLiteral(", "))); - result[DataType::key_type::ElementTypeRole] = ElisaUtils::Album; + result[DataTypes::ArtistRole] = result[DataTypes::SecondaryTextRole]; + result[DataTypes::HighestTrackRating] = currentRecord.value(9); + result[DataTypes::IsSingleDiscAlbumRole] = currentRecord.value(6); + result[DataTypes::GenreRole] = QVariant::fromValue(currentRecord.value(10).toString().split(QStringLiteral(", "))); + result[DataTypes::ElementTypeRole] = ElisaUtils::Album; + } d->mSelectAlbumQuery.finish(); return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::internalAllTracksPartialData() +DataTypes::ListTrackDataType DatabaseInterface::internalAllTracksPartialData() { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; if (!internalGenericPartialData(d->mSelectAllTracksQuery)) { return result; @@ -7450,9 +7451,9 @@ return result; } -DatabaseInterface::ListRadioDataType DatabaseInterface::internalAllRadiosPartialData() +DataTypes::ListRadioDataType DatabaseInterface::internalAllRadiosPartialData() { - auto result = ListRadioDataType{}; + auto result = DataTypes::ListRadioDataType{}; if (!internalGenericPartialData(d->mSelectAllRadiosQuery)) { return result; @@ -7471,9 +7472,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) +DataTypes::ListTrackDataType DatabaseInterface::internalRecentlyPlayedTracksData(int count) { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; d->mSelectAllRecentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); @@ -7494,9 +7495,9 @@ return result; } -DatabaseInterface::ListTrackDataType DatabaseInterface::internalFrequentlyPlayedTracksData(int count) +DataTypes::ListTrackDataType DatabaseInterface::internalFrequentlyPlayedTracksData(int count) { - auto result = ListTrackDataType{}; + auto result = DataTypes::ListTrackDataType{}; d->mSelectAllFrequentlyPlayedTracksQuery.bindValue(QStringLiteral(":maximumResults"), count); @@ -7517,9 +7518,9 @@ return result; } -DatabaseInterface::TrackDataType DatabaseInterface::internalOneTrackPartialData(qulonglong databaseId) +DataTypes::TrackDataType DatabaseInterface::internalOneTrackPartialData(qulonglong databaseId) { - auto result = TrackDataType{}; + auto result = DataTypes::TrackDataType{}; d->mSelectTrackFromIdQuery.bindValue(QStringLiteral(":trackId"), databaseId); @@ -7538,9 +7539,9 @@ return result; } -DatabaseInterface::TrackDataType DatabaseInterface::internalOneRadioPartialData(qulonglong databaseId) +DataTypes::TrackDataType DatabaseInterface::internalOneRadioPartialData(qulonglong databaseId) { - auto result = TrackDataType{}; + auto result = DataTypes::TrackDataType{}; d->mSelectRadioFromIdQuery.bindValue(QStringLiteral(":radioId"), databaseId); @@ -7559,22 +7560,22 @@ return result; } -DatabaseInterface::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() +DataTypes::ListGenreDataType DatabaseInterface::internalAllGenresPartialData() { - ListGenreDataType result; + DataTypes::ListGenreDataType result; if (!internalGenericPartialData(d->mSelectAllGenresQuery)) { return result; } while(d->mSelectAllGenresQuery.next()) { - auto newData = GenreDataType{}; + auto newData = DataTypes::GenreDataType{}; const auto ¤tRecord = d->mSelectAllGenresQuery.record(); - newData[DataType::key_type::DatabaseIdRole] = currentRecord.value(0); - newData[DataType::key_type::TitleRole] = currentRecord.value(1); - newData[DataType::key_type::ElementTypeRole] = ElisaUtils::Genre; + newData[DataTypes::DatabaseIdRole] = currentRecord.value(0); + newData[DataTypes::TitleRole] = currentRecord.value(1); + newData[DataTypes::ElementTypeRole] = ElisaUtils::Genre; result.push_back(newData); } @@ -7584,22 +7585,22 @@ return result; } -DatabaseInterface::ListArtistDataType DatabaseInterface::internalAllComposersPartialData() +DataTypes::ListArtistDataType DatabaseInterface::internalAllComposersPartialData() { - ListArtistDataType result; + DataTypes::ListArtistDataType result; if (!internalGenericPartialData(d->mSelectAllComposersQuery)) { return result; } while(d->mSelectAllComposersQuery.next()) { - auto newData = ArtistDataType{}; + auto newData = DataTypes::ArtistDataType{}; const auto ¤tRecord = d->mSelectAllComposersQuery.record(); - newData[DataType::key_type::DatabaseIdRole] = currentRecord.value(0); - newData[DataType::key_type::TitleRole] = currentRecord.value(1); - newData[DataType::key_type::ElementTypeRole] = ElisaUtils::Composer; + newData[DataTypes::DatabaseIdRole] = currentRecord.value(0); + newData[DataTypes::TitleRole] = currentRecord.value(1); + newData[DataTypes::ElementTypeRole] = ElisaUtils::Composer; result.push_back(newData); } @@ -7609,22 +7610,22 @@ return result; } -DatabaseInterface::ListArtistDataType DatabaseInterface::internalAllLyricistsPartialData() +DataTypes::ListArtistDataType DatabaseInterface::internalAllLyricistsPartialData() { - ListArtistDataType result; + DataTypes::ListArtistDataType result; if (!internalGenericPartialData(d->mSelectAllLyricistsQuery)) { return result; } while(d->mSelectAllLyricistsQuery.next()) { - auto newData = ArtistDataType{}; + auto newData = DataTypes::ArtistDataType{}; const auto ¤tRecord = d->mSelectAllLyricistsQuery.record(); - newData[DataType::key_type::DatabaseIdRole] = currentRecord.value(0); - newData[DataType::key_type::TitleRole] = currentRecord.value(1); - newData[DataType::key_type::ElementTypeRole] = ElisaUtils::Lyricist; + newData[DataTypes::DatabaseIdRole] = currentRecord.value(0); + newData[DataTypes::TitleRole] = currentRecord.value(1); + newData[DataTypes::ElementTypeRole] = ElisaUtils::Lyricist; result.push_back(newData); } diff --git a/src/datatypes.h b/src/datatypes.h new file mode 100644 --- /dev/null +++ b/src/datatypes.h @@ -0,0 +1,338 @@ +/* + * Copyright 2016-2017 Matthieu Gallien + * Copyright 2019 Alexander Stippich + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#ifndef DATATYPES_H +#define DATATYPES_H + +#include "elisaLib_export.h" + +#include +#include +#include +#include +#include +#include +#include + +class ELISALIB_EXPORT DataTypes : public QObject +{ + Q_OBJECT + +public: + + enum ColumnsRoles { + TitleRole = Qt::UserRole + 1, + SecondaryTextRole, + ImageUrlRole, + ShadowForImageRole, + ChildModelRole, + DurationRole, + StringDurationRole, + MilliSecondsDurationRole, + ArtistRole, + AllArtistsRole, + HighestTrackRating, + AlbumRole, + AlbumArtistRole, + IsValidAlbumArtistRole, + TrackNumberRole, + DiscNumberRole, + RatingRole, + GenreRole, + LyricistRole, + ComposerRole, + CommentRole, + YearRole, + ChannelsRole, + BitRateRole, + SampleRateRole, + ResourceRole, + IdRole, + DatabaseIdRole, + IsSingleDiscAlbumRole, + ContainerDataRole, + IsPartialDataRole, + AlbumIdRole, + HasEmbeddedCover, + FileModificationTime, + FirstPlayDate, + LastPlayDate, + PlayCounter, + PlayFrequency, + ElementTypeRole, + LyricsRole, + }; + + Q_ENUM(ColumnsRoles) + +private: + + using DataType = QMap; + +public: + + class TrackDataType : public DataType + { + public: + + using DataType::DataType; + + bool isValid() const + { + return !isEmpty(); + } + + qulonglong databaseId() const + { + return operator[](key_type::DatabaseIdRole).toULongLong(); + } + + QString title() const + { + return operator[](key_type::TitleRole).toString(); + } + + QString artist() const + { + return operator[](key_type::ArtistRole).toString(); + } + + qulonglong albumId() const + { + return operator[](key_type::AlbumIdRole).toULongLong(); + } + + bool hasAlbum() const + { + return find(key_type::AlbumRole) != end(); + } + + QString album() const + { + return operator[](key_type::AlbumRole).toString(); + } + + QString albumArtist() const + { + return operator[](key_type::AlbumArtistRole).toString(); + } + + bool hasTrackNumber() const + { + return find(key_type::TrackNumberRole) != end(); + } + + int trackNumber() const + { + return operator[](key_type::TrackNumberRole).toInt(); + } + + bool hasDiscNumber() const + { + return find(key_type::DiscNumberRole) != end(); + } + + int discNumber() const + { + return operator[](key_type::DiscNumberRole).toInt(); + } + + QTime duration() const + { + return operator[](key_type::DurationRole).toTime(); + } + + QUrl resourceURI() const + { + return operator[](key_type::ResourceRole).toUrl(); + } + + QUrl albumCover() const + { + return operator[](key_type::ImageUrlRole).toUrl(); + } + + bool isSingleDiscAlbum() const + { + return operator[](key_type::IsSingleDiscAlbumRole).toBool(); + } + + int rating() const + { + return operator[](key_type::RatingRole).toInt(); + } + + QString genre() const + { + return operator[](key_type::GenreRole).toString(); + } + + QString composer() const + { + return operator[](key_type::ComposerRole).toString(); + } + + QString lyricist() const + { + return operator[](key_type::LyricistRole).toString(); + } + + QString lyrics() const + { + return operator[](key_type::LyricsRole).toString(); + } + + QString comment() const + { + return operator[](key_type::CommentRole).toString(); + } + + int year() const + { + return operator[](key_type::YearRole).toInt(); + } + + int channels() const + { + return operator[](key_type::ChannelsRole).toInt(); + } + + int bitRate() const + { + return operator[](key_type::BitRateRole).toInt(); + } + + int sampleRate() const + { + return operator[](key_type::SampleRateRole).toInt(); + } + + bool hasEmbeddedCover() const + { + return operator[](key_type::HasEmbeddedCover).toBool(); + } + + QDateTime fileModificationTime() const + { + return operator[](key_type::FileModificationTime).toDateTime(); + } + }; + + using ListTrackDataType = QList; + + using ListRadioDataType = QList; + + class AlbumDataType : public DataType + { + public: + + using DataType::DataType; + + qulonglong databaseId() const + { + return operator[](key_type::DatabaseIdRole).toULongLong(); + } + + QString title() const + { + return operator[](key_type::TitleRole).toString(); + } + + QString artist() const + { + return operator[](key_type::ArtistRole).toString(); + } + + bool isValidArtist() const + { + const auto &artistData = operator[](key_type::ArtistRole); + return artistData.isValid() && !artistData.toString().isEmpty(); + } + + QStringList genres() const + { + return operator[](key_type::GenreRole).toStringList(); + } + + QUrl albumArtURI() const + { + return operator[](key_type::ImageUrlRole).toUrl(); + } + + bool isSingleDiscAlbum() const + { + return operator[](key_type::IsSingleDiscAlbumRole).toBool(); + } + + bool isValid() const + { + return !isEmpty(); + } + + }; + + using ListAlbumDataType = QList; + + class ArtistDataType : public DataType + { + public: + + using DataType::DataType; + + qulonglong databaseId() const + { + return operator[](key_type::DatabaseIdRole).toULongLong(); + } + + }; + + using ListArtistDataType = QList; + + class GenreDataType : public DataType + { + public: + + using DataType::DataType; + + qulonglong databaseId() const + { + return operator[](key_type::DatabaseIdRole).toULongLong(); + } + + QString title() const + { + return operator[](key_type::TitleRole).toString(); + } + + }; + + using ListGenreDataType = QList; + +}; + +Q_DECLARE_METATYPE(DataTypes::TrackDataType) +Q_DECLARE_METATYPE(DataTypes::AlbumDataType) +Q_DECLARE_METATYPE(DataTypes::ArtistDataType) +Q_DECLARE_METATYPE(DataTypes::GenreDataType) + +Q_DECLARE_METATYPE(DataTypes::ListTrackDataType) +Q_DECLARE_METATYPE(DataTypes::ListAlbumDataType) +Q_DECLARE_METATYPE(DataTypes::ListArtistDataType) +Q_DECLARE_METATYPE(DataTypes::ListGenreDataType) + +#endif // DATABASEINTERFACE_H diff --git a/src/datatypes.cpp b/src/datatypes.cpp new file mode 100644 --- /dev/null +++ b/src/datatypes.cpp @@ -0,0 +1,22 @@ +/* + * Copyright 2016-2017 Matthieu Gallien + * Copyright 2019 Alexander Stippich + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#include "datatypes.h" + + +#include "moc_datatypes.cpp" diff --git a/src/elisaapplication.cpp b/src/elisaapplication.cpp --- a/src/elisaapplication.cpp +++ b/src/elisaapplication.cpp @@ -25,6 +25,7 @@ #include "manageaudioplayer.h" #include "managemediaplayercontrol.h" #include "manageheaderbar.h" +#include "databaseinterface.h" #include "elisa_settings.h" #include diff --git a/src/elisaqmlplugin.cpp b/src/elisaqmlplugin.cpp --- a/src/elisaqmlplugin.cpp +++ b/src/elisaqmlplugin.cpp @@ -45,6 +45,7 @@ #include "trackslistener.h" #include "viewmanager.h" #include "databaseinterface.h" +#include "datatypes.h" #include "models/datamodel.h" #include "models/trackmetadatamodel.h" #include "models/trackcontextmetadatamodel.h" @@ -145,11 +146,11 @@ qRegisterMetaType>("QVector"); qRegisterMetaType>("QVector"); qRegisterMetaType>("QHash"); - qRegisterMetaType("DatabaseInterface::ListTrackDataType"); - qRegisterMetaType("DatabaseInterface::ListRadioDataType"); - qRegisterMetaType("DatabaseInterface::ListAlbumDataType"); - qRegisterMetaType("DatabaseInterface::ListArtistDataType"); - qRegisterMetaType("DatabaseInterface::ListGenreDataType"); + qRegisterMetaType("DataTypes::ListTrackDataType"); + qRegisterMetaType("DataTypes::ListRadioDataType"); + qRegisterMetaType("DataTypes::ListAlbumDataType"); + qRegisterMetaType("DataTypes::ListArtistDataType"); + qRegisterMetaType("DataTypes::ListGenreDataType"); qRegisterMetaType("ModelDataLoader::ListTrackDataType"); qRegisterMetaType("ModelDataLoader::ListRadioDataType"); qRegisterMetaType("ModelDataLoader::ListAlbumDataType"); @@ -166,10 +167,10 @@ qRegisterMetaType("ElisaUtils::EntryData"); qRegisterMetaType("ElisaUtils::EntryDataList"); qRegisterMetaType("ElisaUtils::FilterType"); - qRegisterMetaType("DatabaseInterface::TrackDataType"); - qRegisterMetaType("DatabaseInterface::AlbumDataType"); - qRegisterMetaType("DatabaseInterface::ArtistDataType"); - qRegisterMetaType("DatabaseInterface::GenreDataType"); + qRegisterMetaType("DataTypes::TrackDataType"); + qRegisterMetaType("DataTypes::AlbumDataType"); + qRegisterMetaType("DataTypes::ArtistDataType"); + qRegisterMetaType("DataTypes::GenreDataType"); qRegisterMetaType("ModelDataLoader::TrackDataType"); qRegisterMetaType("TracksListener::TrackDataType"); qRegisterMetaType("ViewManager::ViewsType"); diff --git a/src/mediaplaylist.h b/src/mediaplaylist.h --- a/src/mediaplaylist.h +++ b/src/mediaplaylist.h @@ -22,7 +22,7 @@ #include "musicaudiotrack.h" #include "elisautils.h" -#include "databaseinterface.h" +#include "datatypes.h" #include #include @@ -87,7 +87,7 @@ public: enum ColumnsRoles { - TitleRole = DatabaseInterface::TitleRole, + TitleRole = DataTypes::TitleRole, SecondaryTextRole, ImageUrlRole, ShadowForImageRole, @@ -144,9 +144,9 @@ Q_ENUM(PlayState) - using ListTrackDataType = DatabaseInterface::ListTrackDataType; + using ListTrackDataType = DataTypes::ListTrackDataType; - using TrackDataType = DatabaseInterface::TrackDataType; + using TrackDataType = DataTypes::TrackDataType; explicit MediaPlayList(QObject *parent = nullptr); @@ -362,11 +362,11 @@ } explicit MediaPlayListEntry(const MediaPlayList::TrackDataType &track) - : mTitle(track[DatabaseInterface::TitleRole]), - mAlbum(track[DatabaseInterface::AlbumRole]), - mTrackNumber(track[DatabaseInterface::TrackNumberRole]), - mDiscNumber(track[DatabaseInterface::DiscNumberRole]), - mId(track[DatabaseInterface::DatabaseIdRole].toULongLong()), + : mTitle(track[DataTypes::TitleRole]), + mAlbum(track[DataTypes::AlbumRole]), + mTrackNumber(track[DataTypes::TrackNumberRole]), + mDiscNumber(track[DataTypes::DiscNumberRole]), + mId(track[DataTypes::DatabaseIdRole].toULongLong()), mIsValid(true) { } diff --git a/src/mediaplaylist.cpp b/src/mediaplaylist.cpp --- a/src/mediaplaylist.cpp +++ b/src/mediaplaylist.cpp @@ -16,7 +16,7 @@ */ #include "mediaplaylist.h" -#include "databaseinterface.h" +#include "datatypes.h" #include "musicaudiotrack.h" #include "musiclistenersmanager.h" @@ -38,7 +38,7 @@ QList mData; - QList mTrackData; + QList mTrackData; MusicListenersManager* mMusicListenersManager = nullptr; diff --git a/src/modeldataloader.h b/src/modeldataloader.h --- a/src/modeldataloader.h +++ b/src/modeldataloader.h @@ -22,6 +22,7 @@ #include "elisautils.h" #include "databaseinterface.h" +#include "datatypes.h" #include "models/datamodel.h" #include @@ -37,13 +38,13 @@ public: - using ListAlbumDataType = DatabaseInterface::ListAlbumDataType; - using ListArtistDataType = DatabaseInterface::ListArtistDataType; - using ListGenreDataType = DatabaseInterface::ListGenreDataType; - using ListTrackDataType = DatabaseInterface::ListTrackDataType; - using ListRadioDataType = DatabaseInterface::ListRadioDataType; - using TrackDataType = DatabaseInterface::TrackDataType; - using AlbumDataType = DatabaseInterface::AlbumDataType; + using ListAlbumDataType = DataTypes::ListAlbumDataType; + using ListArtistDataType = DataTypes::ListArtistDataType; + using ListGenreDataType = DataTypes::ListGenreDataType; + using ListTrackDataType = DataTypes::ListTrackDataType; + using ListRadioDataType = DataTypes::ListRadioDataType; + using TrackDataType = DataTypes::TrackDataType; + using AlbumDataType = DataTypes::AlbumDataType; using FilterType = ElisaUtils::FilterType; diff --git a/src/models/alltracksproxymodel.cpp b/src/models/alltracksproxymodel.cpp --- a/src/models/alltracksproxymodel.cpp +++ b/src/models/alltracksproxymodel.cpp @@ -17,7 +17,7 @@ #include "alltracksproxymodel.h" -#include "databaseinterface.h" +#include "datatypes.h" #include #include @@ -36,8 +36,8 @@ auto currentIndex = sourceModel()->index(source_row, 0, source_parent); const auto &titleValue = sourceModel()->data(currentIndex, Qt::DisplayRole).toString(); - const auto &artistValue = sourceModel()->data(currentIndex, DatabaseInterface::ColumnsRoles::ArtistRole).toString(); - const auto maximumRatingValue = sourceModel()->data(currentIndex, DatabaseInterface::ColumnsRoles::RatingRole).toInt(); + const auto &artistValue = sourceModel()->data(currentIndex, DataTypes::ColumnsRoles::ArtistRole).toString(); + const auto maximumRatingValue = sourceModel()->data(currentIndex, DataTypes::ColumnsRoles::RatingRole).toInt(); if (maximumRatingValue < mFilterRating) { return result; @@ -63,8 +63,8 @@ allTracks.reserve(rowCount()); for (int rowIndex = 0, maxRowCount = rowCount(); rowIndex < maxRowCount; ++rowIndex) { auto currentIndex = index(rowIndex, 0); - allTracks.push_back(ElisaUtils::EntryData{data(currentIndex, DatabaseInterface::ColumnsRoles::DatabaseIdRole).toULongLong(), - data(currentIndex, DatabaseInterface::ColumnsRoles::TitleRole).toString()}); + allTracks.push_back(ElisaUtils::EntryData{data(currentIndex, DataTypes::ColumnsRoles::DatabaseIdRole).toULongLong(), + data(currentIndex, DataTypes::ColumnsRoles::TitleRole).toString()}); } Q_EMIT entriesToEnqueue(allTracks, ElisaUtils::Track, enqueueMode, triggerPlay); }); diff --git a/src/models/datamodel.h b/src/models/datamodel.h --- a/src/models/datamodel.h +++ b/src/models/datamodel.h @@ -21,7 +21,7 @@ #include "elisaLib_export.h" #include "elisautils.h" -#include "databaseinterface.h" +#include "datatypes.h" #include #include @@ -50,23 +50,23 @@ public: - using ListRadioDataType = DatabaseInterface::ListRadioDataType; + using ListRadioDataType = DataTypes::ListRadioDataType; - using ListTrackDataType = DatabaseInterface::ListTrackDataType; + using ListTrackDataType = DataTypes::ListTrackDataType; - using TrackDataType = DatabaseInterface::TrackDataType; + using TrackDataType = DataTypes::TrackDataType; - using ListAlbumDataType = DatabaseInterface::ListAlbumDataType; + using ListAlbumDataType = DataTypes::ListAlbumDataType; - using AlbumDataType = DatabaseInterface::AlbumDataType; + using AlbumDataType = DataTypes::AlbumDataType; - using ListArtistDataType = DatabaseInterface::ListArtistDataType; + using ListArtistDataType = DataTypes::ListArtistDataType; - using ArtistDataType = DatabaseInterface::ArtistDataType; + using ArtistDataType = DataTypes::ArtistDataType; - using ListGenreDataType = DatabaseInterface::ListGenreDataType; + using ListGenreDataType = DataTypes::ListGenreDataType; - using GenreDataType = DatabaseInterface::GenreDataType; + using GenreDataType = DataTypes::GenreDataType; using FilterType = ElisaUtils::FilterType; diff --git a/src/models/datamodel.cpp b/src/models/datamodel.cpp --- a/src/models/datamodel.cpp +++ b/src/models/datamodel.cpp @@ -86,24 +86,24 @@ { auto roles = QAbstractListModel::roleNames(); - roles[static_cast(DatabaseInterface::ColumnsRoles::TitleRole)] = "title"; - roles[static_cast(DatabaseInterface::ColumnsRoles::SecondaryTextRole)] = "secondaryText"; - roles[static_cast(DatabaseInterface::ColumnsRoles::ImageUrlRole)] = "imageUrl"; - roles[static_cast(DatabaseInterface::ColumnsRoles::DatabaseIdRole)] = "databaseId"; - roles[static_cast(DatabaseInterface::ColumnsRoles::ElementTypeRole)] = "dataType"; - - roles[static_cast(DatabaseInterface::ColumnsRoles::ArtistRole)] = "artist"; - roles[static_cast(DatabaseInterface::ColumnsRoles::AllArtistsRole)] = "allArtists"; - roles[static_cast(DatabaseInterface::ColumnsRoles::HighestTrackRating)] = "highestTrackRating"; - roles[static_cast(DatabaseInterface::ColumnsRoles::GenreRole)] = "genre"; - - roles[static_cast(DatabaseInterface::ColumnsRoles::AlbumRole)] = "album"; - roles[static_cast(DatabaseInterface::ColumnsRoles::AlbumArtistRole)] = "albumArtist"; - roles[static_cast(DatabaseInterface::ColumnsRoles::DurationRole)] = "duration"; - roles[static_cast(DatabaseInterface::ColumnsRoles::TrackNumberRole)] = "trackNumber"; - roles[static_cast(DatabaseInterface::ColumnsRoles::DiscNumberRole)] = "discNumber"; - roles[static_cast(DatabaseInterface::ColumnsRoles::RatingRole)] = "rating"; - roles[static_cast(DatabaseInterface::ColumnsRoles::IsSingleDiscAlbumRole)] = "isSingleDiscAlbum"; + roles[static_cast(DataTypes::ColumnsRoles::TitleRole)] = "title"; + roles[static_cast(DataTypes::ColumnsRoles::SecondaryTextRole)] = "secondaryText"; + roles[static_cast(DataTypes::ColumnsRoles::ImageUrlRole)] = "imageUrl"; + roles[static_cast(DataTypes::ColumnsRoles::DatabaseIdRole)] = "databaseId"; + roles[static_cast(DataTypes::ColumnsRoles::ElementTypeRole)] = "dataType"; + + roles[static_cast(DataTypes::ColumnsRoles::ArtistRole)] = "artist"; + roles[static_cast(DataTypes::ColumnsRoles::AllArtistsRole)] = "allArtists"; + roles[static_cast(DataTypes::ColumnsRoles::HighestTrackRating)] = "highestTrackRating"; + roles[static_cast(DataTypes::ColumnsRoles::GenreRole)] = "genre"; + + roles[static_cast(DataTypes::ColumnsRoles::AlbumRole)] = "album"; + roles[static_cast(DataTypes::ColumnsRoles::AlbumArtistRole)] = "albumArtist"; + roles[static_cast(DataTypes::ColumnsRoles::DurationRole)] = "duration"; + roles[static_cast(DataTypes::ColumnsRoles::TrackNumberRole)] = "trackNumber"; + roles[static_cast(DataTypes::ColumnsRoles::DiscNumberRole)] = "discNumber"; + roles[static_cast(DataTypes::ColumnsRoles::RatingRole)] = "rating"; + roles[static_cast(DataTypes::ColumnsRoles::IsSingleDiscAlbumRole)] = "isSingleDiscAlbum"; return roles; } @@ -161,7 +161,7 @@ break; } break; - case DatabaseInterface::ColumnsRoles::DurationRole: + case DataTypes::ColumnsRoles::DurationRole: { switch (d->mModelType) { @@ -187,7 +187,7 @@ } break; } - case DatabaseInterface::ColumnsRoles::IsSingleDiscAlbumRole: + case DataTypes::ColumnsRoles::IsSingleDiscAlbumRole: { switch (d->mModelType) { diff --git a/src/models/gridviewproxymodel.cpp b/src/models/gridviewproxymodel.cpp --- a/src/models/gridviewproxymodel.cpp +++ b/src/models/gridviewproxymodel.cpp @@ -18,7 +18,7 @@ #include "gridviewproxymodel.h" -#include "databaseinterface.h" +#include "datatypes.h" #include "elisautils.h" #include @@ -46,9 +46,9 @@ auto currentIndex = sourceModel()->index(source_row, 0, source_parent); const auto &mainValue = sourceModel()->data(currentIndex, Qt::DisplayRole).toString(); - const auto &artistValue = sourceModel()->data(currentIndex, DatabaseInterface::ArtistRole).toString(); - const auto &allArtistsValue = sourceModel()->data(currentIndex, DatabaseInterface::AllArtistsRole).toStringList(); - const auto maximumRatingValue = sourceModel()->data(currentIndex, DatabaseInterface::HighestTrackRating).toInt(); + const auto &artistValue = sourceModel()->data(currentIndex, DataTypes::ArtistRole).toString(); + const auto &allArtistsValue = sourceModel()->data(currentIndex, DataTypes::AllArtistsRole).toStringList(); + const auto maximumRatingValue = sourceModel()->data(currentIndex, DataTypes::HighestTrackRating).toInt(); if (maximumRatingValue < mFilterRating) { result = false; @@ -84,7 +84,7 @@ allData.reserve(rowCount()); for (int rowIndex = 0, maxRowCount = rowCount(); rowIndex < maxRowCount; ++rowIndex) { auto currentIndex = index(rowIndex, 0); - allData.push_back(ElisaUtils::EntryData{data(currentIndex, DatabaseInterface::DatabaseIdRole).toULongLong(), + allData.push_back(ElisaUtils::EntryData{data(currentIndex, DataTypes::DatabaseIdRole).toULongLong(), data(currentIndex, Qt::DisplayRole).toString()}); } Q_EMIT entriesToEnqueue(allData, mDataType, enqueueMode, triggerPlay); diff --git a/src/models/singlealbumproxymodel.cpp b/src/models/singlealbumproxymodel.cpp --- a/src/models/singlealbumproxymodel.cpp +++ b/src/models/singlealbumproxymodel.cpp @@ -17,7 +17,7 @@ #include "singlealbumproxymodel.h" -#include "databaseinterface.h" +#include "datatypes.h" #include #include @@ -34,8 +34,8 @@ auto currentIndex = sourceModel()->index(source_row, 0, source_parent); - const auto &titleValue = sourceModel()->data(currentIndex, DatabaseInterface::ColumnsRoles::TitleRole).toString(); - const auto maximumRatingValue = sourceModel()->data(currentIndex, DatabaseInterface::ColumnsRoles::RatingRole).toInt(); + const auto &titleValue = sourceModel()->data(currentIndex, DataTypes::ColumnsRoles::TitleRole).toString(); + const auto maximumRatingValue = sourceModel()->data(currentIndex, DataTypes::ColumnsRoles::RatingRole).toInt(); if (maximumRatingValue < mFilterRating) { return result; @@ -56,8 +56,8 @@ allTracks.reserve(rowCount()); for (int rowIndex = 0, maxRowCount = rowCount(); rowIndex < maxRowCount; ++rowIndex) { auto currentIndex = index(rowIndex, 0); - allTracks.push_back(ElisaUtils::EntryData{data(currentIndex, DatabaseInterface::ColumnsRoles::DatabaseIdRole).toULongLong(), - data(currentIndex, DatabaseInterface::ColumnsRoles::TitleRole).toString()}); + allTracks.push_back(ElisaUtils::EntryData{data(currentIndex, DataTypes::ColumnsRoles::DatabaseIdRole).toULongLong(), + data(currentIndex, DataTypes::ColumnsRoles::TitleRole).toString()}); } Q_EMIT entriesToEnqueue(allTracks, ElisaUtils::Track, enqueueMode, triggerPlay); }); diff --git a/src/models/trackcontextmetadatamodel.cpp b/src/models/trackcontextmetadatamodel.cpp --- a/src/models/trackcontextmetadatamodel.cpp +++ b/src/models/trackcontextmetadatamodel.cpp @@ -23,14 +23,14 @@ void TrackContextMetaDataModel::filterDataFromTrackData() { - removeMetaData(DatabaseInterface::TitleRole); - removeMetaData(DatabaseInterface::ArtistRole); - removeMetaData(DatabaseInterface::AlbumRole); - removeMetaData(DatabaseInterface::AlbumArtistRole); + removeMetaData(DataTypes::TitleRole); + removeMetaData(DataTypes::ArtistRole); + removeMetaData(DataTypes::AlbumRole); + removeMetaData(DataTypes::AlbumArtistRole); - if (dataFromType(DatabaseInterface::IsSingleDiscAlbumRole).toBool() && - dataFromType(DatabaseInterface::DiscNumberRole).toInt() == 1) { - removeMetaData(DatabaseInterface::DiscNumberRole); + if (dataFromType(DataTypes::IsSingleDiscAlbumRole).toBool() && + dataFromType(DataTypes::DiscNumberRole).toInt() == 1) { + removeMetaData(DataTypes::DiscNumberRole); } } diff --git a/src/models/trackmetadatamodel.h b/src/models/trackmetadatamodel.h --- a/src/models/trackmetadatamodel.h +++ b/src/models/trackmetadatamodel.h @@ -21,7 +21,7 @@ #include "elisaLib_export.h" #include "elisautils.h" -#include "databaseinterface.h" +#include "datatypes.h" #include "modeldataloader.h" #include "filescanner.h" @@ -76,7 +76,7 @@ Q_ENUM(ItemType) - using TrackDataType = DatabaseInterface::TrackDataType; + using TrackDataType = DataTypes::TrackDataType; explicit TrackMetadataModel(QObject *parent = nullptr); @@ -115,7 +115,7 @@ void lyricsChanged(); - void saveRadioData(const DatabaseInterface::TrackDataType &trackDataType); + void saveRadioData(const DataTypes::TrackDataType &trackDataType); void deleteRadioData(qulonglong radioId); @@ -144,13 +144,13 @@ protected: void fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData, - const QList &fieldsForTrack); + const QList &fieldsForTrack); void fillDataForNewRadio(); virtual void filterDataFromTrackData(); - void removeMetaData(DatabaseInterface::ColumnsRoles metaData); + void removeMetaData(DataTypes::ColumnsRoles metaData); TrackDataType::mapped_type dataFromType(TrackDataType::key_type metaData) const; diff --git a/src/models/trackmetadatamodel.cpp b/src/models/trackmetadatamodel.cpp --- a/src/models/trackmetadatamodel.cpp +++ b/src/models/trackmetadatamodel.cpp @@ -57,39 +57,39 @@ case Qt::DisplayRole: switch (currentKey) { - case DatabaseInterface::TrackNumberRole: + case DataTypes::TrackNumberRole: { auto trackNumber = mTrackData.trackNumber(); if (trackNumber > 0) { result = trackNumber; } break; } - case DatabaseInterface::DiscNumberRole: + case DataTypes::DiscNumberRole: { auto discNumber = mTrackData.discNumber(); if (discNumber > 0) { result = discNumber; } break; } - case DatabaseInterface::ChannelsRole: + case DataTypes::ChannelsRole: { auto channels = mTrackData.channels(); if (channels > 0) { result = channels; } break; } - case DatabaseInterface::BitRateRole: + case DataTypes::BitRateRole: { auto bitRate = mTrackData.bitRate(); if (bitRate > 0) { result = bitRate; } break; } - case DatabaseInterface::SampleRateRole: + case DataTypes::SampleRateRole: { auto sampleRate = mTrackData.sampleRate(); if (sampleRate > 0) { @@ -105,164 +105,164 @@ case ItemNameRole: switch (currentKey) { - case DatabaseInterface::TitleRole: + case DataTypes::TitleRole: result = i18nc("Track title for track metadata view", "Title"); break; - case DatabaseInterface::DurationRole: + case DataTypes::DurationRole: result = i18nc("Duration label for track metadata view", "Duration"); break; - case DatabaseInterface::ArtistRole: + case DataTypes::ArtistRole: result = i18nc("Track artist for track metadata view", "Artist"); break; - case DatabaseInterface::AlbumRole: + case DataTypes::AlbumRole: result = i18nc("Album name for track metadata view", "Album"); break; - case DatabaseInterface::AlbumArtistRole: + case DataTypes::AlbumArtistRole: result = i18nc("Album artist for track metadata view", "Album Artist"); break; - case DatabaseInterface::TrackNumberRole: + case DataTypes::TrackNumberRole: result = i18nc("Track number for track metadata view", "Track Number"); break; - case DatabaseInterface::DiscNumberRole: + case DataTypes::DiscNumberRole: result = i18nc("Disc number for track metadata view", "Disc Number"); break; - case DatabaseInterface::RatingRole: + case DataTypes::RatingRole: result = i18nc("Rating label for information panel", "Rating"); break; - case DatabaseInterface::GenreRole: + case DataTypes::GenreRole: result = i18nc("Genre label for track metadata view", "Genre"); break; - case DatabaseInterface::LyricistRole: + case DataTypes::LyricistRole: result = i18nc("Lyricist label for track metadata view", "Lyricist"); break; - case DatabaseInterface::ComposerRole: + case DataTypes::ComposerRole: result = i18nc("Composer name for track metadata view", "Composer"); break; - case DatabaseInterface::CommentRole: + case DataTypes::CommentRole: result = i18nc("Comment label for track metadata view", "Comment"); break; - case DatabaseInterface::YearRole: + case DataTypes::YearRole: result = i18nc("Year label for track metadata view", "Year"); break; - case DatabaseInterface::ChannelsRole: + case DataTypes::ChannelsRole: result = i18nc("Channels label for track metadata view", "Channels"); break; - case DatabaseInterface::BitRateRole: + case DataTypes::BitRateRole: result = i18nc("Bit rate label for track metadata view", "Bit Rate"); break; - case DatabaseInterface::SampleRateRole: + case DataTypes::SampleRateRole: result = i18nc("Sample Rate label for track metadata view", "Sample Rate"); break; - case DatabaseInterface::LastPlayDate: + case DataTypes::LastPlayDate: result = i18nc("Last play date label for track metadata view", "Last played"); break; - case DatabaseInterface::PlayCounter: + case DataTypes::PlayCounter: result = i18nc("Play counter label for track metadata view", "Play count"); break; - case DatabaseInterface::LyricsRole: + case DataTypes::LyricsRole: result = i18nc("Lyrics label for track metadata view", "Lyrics"); break; - case DatabaseInterface::ResourceRole: + case DataTypes::ResourceRole: result = i18nc("Radio HTTP address for radio metadata view", "Stream Http Address"); break; - case DatabaseInterface::SecondaryTextRole: - case DatabaseInterface::ImageUrlRole: - case DatabaseInterface::ShadowForImageRole: - case DatabaseInterface::ChildModelRole: - case DatabaseInterface::StringDurationRole: - case DatabaseInterface::MilliSecondsDurationRole: - case DatabaseInterface::IsValidAlbumArtistRole: - case DatabaseInterface::AllArtistsRole: - case DatabaseInterface::HighestTrackRating: - case DatabaseInterface::IdRole: - case DatabaseInterface::DatabaseIdRole: - case DatabaseInterface::IsSingleDiscAlbumRole: - case DatabaseInterface::ContainerDataRole: - case DatabaseInterface::IsPartialDataRole: - case DatabaseInterface::AlbumIdRole: - case DatabaseInterface::HasEmbeddedCover: - case DatabaseInterface::FileModificationTime: - case DatabaseInterface::FirstPlayDate: - case DatabaseInterface::PlayFrequency: - case DatabaseInterface::ElementTypeRole: + case DataTypes::SecondaryTextRole: + case DataTypes::ImageUrlRole: + case DataTypes::ShadowForImageRole: + case DataTypes::ChildModelRole: + case DataTypes::StringDurationRole: + case DataTypes::MilliSecondsDurationRole: + case DataTypes::IsValidAlbumArtistRole: + case DataTypes::AllArtistsRole: + case DataTypes::HighestTrackRating: + case DataTypes::IdRole: + case DataTypes::DatabaseIdRole: + case DataTypes::IsSingleDiscAlbumRole: + case DataTypes::ContainerDataRole: + case DataTypes::IsPartialDataRole: + case DataTypes::AlbumIdRole: + case DataTypes::HasEmbeddedCover: + case DataTypes::FileModificationTime: + case DataTypes::FirstPlayDate: + case DataTypes::PlayFrequency: + case DataTypes::ElementTypeRole: break; } break; case ItemTypeRole: switch (currentKey) { - case DatabaseInterface::TitleRole: + case DataTypes::TitleRole: result = TextEntry; break; - case DatabaseInterface::ResourceRole: + case DataTypes::ResourceRole: result = TextEntry; break; - case DatabaseInterface::ArtistRole: + case DataTypes::ArtistRole: result = TextEntry; break; - case DatabaseInterface::AlbumRole: + case DataTypes::AlbumRole: result = TextEntry; break; - case DatabaseInterface::AlbumArtistRole: + case DataTypes::AlbumArtistRole: result = TextEntry; break; - case DatabaseInterface::TrackNumberRole: + case DataTypes::TrackNumberRole: result = IntegerEntry; break; - case DatabaseInterface::DiscNumberRole: + case DataTypes::DiscNumberRole: result = IntegerEntry; break; - case DatabaseInterface::RatingRole: + case DataTypes::RatingRole: result = RatingEntry; break; - case DatabaseInterface::GenreRole: + case DataTypes::GenreRole: result = TextEntry; break; - case DatabaseInterface::LyricistRole: + case DataTypes::LyricistRole: result = TextEntry; break; - case DatabaseInterface::ComposerRole: + case DataTypes::ComposerRole: result = TextEntry; break; - case DatabaseInterface::CommentRole: + case DataTypes::CommentRole: result = TextEntry; break; - case DatabaseInterface::YearRole: + case DataTypes::YearRole: result = IntegerEntry; break; - case DatabaseInterface::LastPlayDate: + case DataTypes::LastPlayDate: result = DateEntry; break; - case DatabaseInterface::PlayCounter: + case DataTypes::PlayCounter: result = IntegerEntry; break; - case DatabaseInterface::LyricsRole: + case DataTypes::LyricsRole: result = LongTextEntry; break; - case DatabaseInterface::DurationRole: - case DatabaseInterface::SampleRateRole: - case DatabaseInterface::BitRateRole: - case DatabaseInterface::ChannelsRole: - case DatabaseInterface::SecondaryTextRole: - case DatabaseInterface::ImageUrlRole: - case DatabaseInterface::ShadowForImageRole: - case DatabaseInterface::ChildModelRole: - case DatabaseInterface::StringDurationRole: - case DatabaseInterface::MilliSecondsDurationRole: - case DatabaseInterface::IsValidAlbumArtistRole: - case DatabaseInterface::AllArtistsRole: - case DatabaseInterface::HighestTrackRating: - case DatabaseInterface::IdRole: - case DatabaseInterface::DatabaseIdRole: - case DatabaseInterface::IsSingleDiscAlbumRole: - case DatabaseInterface::ContainerDataRole: - case DatabaseInterface::IsPartialDataRole: - case DatabaseInterface::AlbumIdRole: - case DatabaseInterface::HasEmbeddedCover: - case DatabaseInterface::FileModificationTime: - case DatabaseInterface::FirstPlayDate: - case DatabaseInterface::PlayFrequency: - case DatabaseInterface::ElementTypeRole: + case DataTypes::DurationRole: + case DataTypes::SampleRateRole: + case DataTypes::BitRateRole: + case DataTypes::ChannelsRole: + case DataTypes::SecondaryTextRole: + case DataTypes::ImageUrlRole: + case DataTypes::ShadowForImageRole: + case DataTypes::ChildModelRole: + case DataTypes::StringDurationRole: + case DataTypes::MilliSecondsDurationRole: + case DataTypes::IsValidAlbumArtistRole: + case DataTypes::AllArtistsRole: + case DataTypes::HighestTrackRating: + case DataTypes::IdRole: + case DataTypes::DatabaseIdRole: + case DataTypes::IsSingleDiscAlbumRole: + case DataTypes::ContainerDataRole: + case DataTypes::IsPartialDataRole: + case DataTypes::AlbumIdRole: + case DataTypes::HasEmbeddedCover: + case DataTypes::FileModificationTime: + case DataTypes::FirstPlayDate: + case DataTypes::PlayFrequency: + case DataTypes::ElementTypeRole: break; } break; @@ -327,28 +327,28 @@ return; } - const QList fieldsForTrack({DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, - DatabaseInterface::AlbumRole, DatabaseInterface::AlbumArtistRole, - DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, - DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, - DatabaseInterface::LyricistRole, DatabaseInterface::ComposerRole, - DatabaseInterface::CommentRole, DatabaseInterface::YearRole, - DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter}); + const QList fieldsForTrack({DataTypes::TitleRole, DataTypes::ArtistRole, + DataTypes::AlbumRole, DataTypes::AlbumArtistRole, + DataTypes::TrackNumberRole, DataTypes::DiscNumberRole, + DataTypes::RatingRole, DataTypes::GenreRole, + DataTypes::LyricistRole, DataTypes::ComposerRole, + DataTypes::CommentRole, DataTypes::YearRole, + DataTypes::LastPlayDate, DataTypes::PlayCounter}); fillDataFromTrackData(trackData, fieldsForTrack); } void TrackMetadataModel::fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData, - const QList &fieldsForTrack) + const QList &fieldsForTrack) { beginResetModel(); mFullData = trackData; mTrackData.clear(); mTrackKeys.clear(); - for (DatabaseInterface::ColumnsRoles role : fieldsForTrack) { + for (DataTypes::ColumnsRoles role : fieldsForTrack) { if (trackData.constFind(role) != trackData.constEnd()) { - if (role == DatabaseInterface::RatingRole) { + if (role == DataTypes::RatingRole) { if (trackData[role].toInt() == 0) { continue; } @@ -363,13 +363,13 @@ fetchLyrics(); - mDatabaseId = trackData[DatabaseInterface::DatabaseIdRole].toULongLong(); + mDatabaseId = trackData[DataTypes::DatabaseIdRole].toULongLong(); Q_EMIT databaseIdChanged(); - mCoverImage = trackData[DatabaseInterface::ImageUrlRole].toUrl(); + mCoverImage = trackData[DataTypes::ImageUrlRole].toUrl(); Q_EMIT coverUrlChanged(); - auto rawFileUrl = trackData[DatabaseInterface::ResourceRole].toUrl(); + auto rawFileUrl = trackData[DataTypes::ResourceRole].toUrl(); if (rawFileUrl.isLocalFile()) { mFileUrl = rawFileUrl.toLocalFile(); @@ -383,7 +383,7 @@ { } -void TrackMetadataModel::removeMetaData(DatabaseInterface::ColumnsRoles metaData) +void TrackMetadataModel::removeMetaData(DataTypes::ColumnsRoles metaData) { auto itMetaData = std::find(mTrackKeys.begin(), mTrackKeys.end(), metaData); if (itMetaData == mTrackKeys.end()) { @@ -402,17 +402,17 @@ void TrackMetadataModel::fillLyricsDataFromTrack() { beginInsertRows({}, mTrackData.size(), mTrackData.size()); - mTrackKeys.push_back(DatabaseInterface::LyricsRole); - mTrackData[DatabaseInterface::LyricsRole] = mLyricsValueWatcher.result(); + mTrackKeys.push_back(DataTypes::LyricsRole); + mTrackData[DataTypes::LyricsRole] = mLyricsValueWatcher.result(); endInsertRows(); } void TrackMetadataModel::lyricsValueIsReady() { if (!mLyricsValueWatcher.result().isEmpty()) { fillLyricsDataFromTrack(); - mFullData[DatabaseInterface::LyricsRole] = mLyricsValueWatcher.result(); + mFullData[DataTypes::LyricsRole] = mLyricsValueWatcher.result(); Q_EMIT lyricsChanged(); } @@ -468,7 +468,7 @@ void TrackMetadataModel::fetchLyrics() { auto lyricicsValue = QtConcurrent::run(QThreadPool::globalInstance(), [=]() { - auto trackData = mFileScanner.scanOneFile(mFullData[DatabaseInterface::ResourceRole].toUrl(), mMimeDatabase); + auto trackData = mFileScanner.scanOneFile(mFullData[DataTypes::ResourceRole].toUrl(), mMimeDatabase); if (!trackData.lyrics().isEmpty()) { return trackData.lyrics(); } @@ -493,14 +493,14 @@ mTrackKeys.clear(); for (auto role : { - DatabaseInterface::TitleRole, - DatabaseInterface::ResourceRole, - DatabaseInterface::CommentRole, - DatabaseInterface::DatabaseIdRole + DataTypes::TitleRole, + DataTypes::ResourceRole, + DataTypes::CommentRole, + DataTypes::DatabaseIdRole }) { mTrackKeys.push_back(role); - if (role == DatabaseInterface::DatabaseIdRole) { + if (role == DataTypes::DatabaseIdRole) { mTrackData[role] = -1; } else { mTrackData[role] = QString(); @@ -540,20 +540,20 @@ void TrackMetadataModel::deleteRadio() { - if (mTrackData[DatabaseInterface::DatabaseIdRole]>=0) { - Q_EMIT deleteRadioData(mTrackData[DatabaseInterface::DatabaseIdRole].toULongLong()); + if (mTrackData[DataTypes::DatabaseIdRole]>=0) { + Q_EMIT deleteRadioData(mTrackData[DataTypes::DatabaseIdRole].toULongLong()); } } void TrackMetadataModel::radioData(const TrackDataType &radiosData) { - if (!mFullData.isEmpty() && mFullData[DatabaseInterface::DatabaseIdRole].toInt() != -1 && + if (!mFullData.isEmpty() && mFullData[DataTypes::DatabaseIdRole].toInt() != -1 && mFullData.databaseId() != radiosData.databaseId()) { return; } - const QList fieldsForTrack({DatabaseInterface::TitleRole, DatabaseInterface::ResourceRole, - DatabaseInterface::CommentRole, DatabaseInterface::DatabaseIdRole}); + const QList fieldsForTrack({DataTypes::TitleRole, DataTypes::ResourceRole, + DataTypes::CommentRole, DataTypes::DatabaseIdRole}); fillDataFromTrackData(radiosData, fieldsForTrack); } diff --git a/src/musicaudiotrack.h b/src/musicaudiotrack.h --- a/src/musicaudiotrack.h +++ b/src/musicaudiotrack.h @@ -20,7 +20,7 @@ #include "elisaLib_export.h" -#include "databaseinterface.h" +#include "datatypes.h" #include #include @@ -38,7 +38,7 @@ public: - using TrackDataType = DatabaseInterface::TrackDataType; + using TrackDataType = DataTypes::TrackDataType; MusicAudioTrack(); @@ -63,7 +63,7 @@ bool operator !=(const MusicAudioTrack &other) const; - static MusicAudioTrack trackFromData(const DatabaseInterface::TrackDataType &data); + static MusicAudioTrack trackFromData(const DataTypes::TrackDataType &data); void setValid(bool value); diff --git a/src/musicaudiotrack.cpp b/src/musicaudiotrack.cpp --- a/src/musicaudiotrack.cpp +++ b/src/musicaudiotrack.cpp @@ -179,7 +179,7 @@ d->mBitRate != other.d->mBitRate || d->mSampleRate != other.d->mSampleRate; } -MusicAudioTrack MusicAudioTrack::trackFromData(const DatabaseInterface::TrackDataType &data) +MusicAudioTrack MusicAudioTrack::trackFromData(const DataTypes::TrackDataType &data) { auto result = MusicAudioTrack{}; diff --git a/src/musiclistenersmanager.h b/src/musiclistenersmanager.h --- a/src/musiclistenersmanager.h +++ b/src/musiclistenersmanager.h @@ -20,13 +20,15 @@ #include "elisaLib_export.h" -#include "databaseinterface.h" +#include "datatypes.h" +#include "elisautils.h" #include #include #include +class DatabaseInterface; class MusicListenersManagerPrivate; class MediaPlayList; class ElisaApplication; @@ -150,7 +152,7 @@ void configChanged(); - void increaseImportedTracksCount(const DatabaseInterface::ListTrackDataType &allTracks); + void increaseImportedTracksCount(const DataTypes::ListTrackDataType &allTracks); void decreaseImportedTracksCount(); diff --git a/src/musiclistenersmanager.cpp b/src/musiclistenersmanager.cpp --- a/src/musiclistenersmanager.cpp +++ b/src/musiclistenersmanager.cpp @@ -359,7 +359,7 @@ #endif } -void MusicListenersManager::increaseImportedTracksCount(const DatabaseInterface::ListTrackDataType &allTracks) +void MusicListenersManager::increaseImportedTracksCount(const DataTypes::ListTrackDataType &allTracks) { d->mImportedTracksCount += allTracks.size(); diff --git a/src/trackslistener.h b/src/trackslistener.h --- a/src/trackslistener.h +++ b/src/trackslistener.h @@ -21,6 +21,7 @@ #include "elisaLib_export.h" #include "databaseinterface.h" +#include "datatypes.h" #include "musicaudiotrack.h" #include "elisautils.h" @@ -36,9 +37,9 @@ public: - using ListTrackDataType = DatabaseInterface::ListTrackDataType; + using ListTrackDataType = DataTypes::ListTrackDataType; - using TrackDataType = DatabaseInterface::TrackDataType; + using TrackDataType = DataTypes::TrackDataType; explicit TracksListener(DatabaseInterface *database, QObject *parent = nullptr); diff --git a/src/trackslistener.cpp b/src/trackslistener.cpp --- a/src/trackslistener.cpp +++ b/src/trackslistener.cpp @@ -18,6 +18,7 @@ #include "trackslistener.h" #include "databaseinterface.h" +#include "datatypes.h" #include "filescanner.h" #include @@ -163,24 +164,24 @@ auto newTrack = scanOneFile(fileName); if (newTrack.isValid()) { - auto oneData = DatabaseInterface::TrackDataType{}; + auto oneData = DataTypes::TrackDataType{}; if (!newTrack.title().isEmpty()) { - oneData[DatabaseInterface::TrackDataType::key_type::TitleRole] = newTrack.title(); + oneData[DataTypes::TrackDataType::key_type::TitleRole] = newTrack.title(); } else { const auto &fileUrl = newTrack.resourceURI(); - oneData[DatabaseInterface::TrackDataType::key_type::TitleRole] = fileUrl.fileName(); + oneData[DataTypes::TrackDataType::key_type::TitleRole] = fileUrl.fileName(); } - oneData[DatabaseInterface::TrackDataType::key_type::ArtistRole] = newTrack.artist(); - oneData[DatabaseInterface::TrackDataType::key_type::AlbumRole] = newTrack.albumName(); - oneData[DatabaseInterface::TrackDataType::key_type::AlbumIdRole] = newTrack.albumId(); - oneData[DatabaseInterface::TrackDataType::key_type::TrackNumberRole] = newTrack.trackNumber(); - oneData[DatabaseInterface::TrackDataType::key_type::DiscNumberRole] = newTrack.discNumber(); - oneData[DatabaseInterface::TrackDataType::key_type::DurationRole] = newTrack.duration(); - oneData[DatabaseInterface::TrackDataType::key_type::MilliSecondsDurationRole] = newTrack.duration().msecsSinceStartOfDay(); - oneData[DatabaseInterface::TrackDataType::key_type::ResourceRole] = newTrack.resourceURI(); - oneData[DatabaseInterface::TrackDataType::key_type::ImageUrlRole] = newTrack.albumCover(); + oneData[DataTypes::TrackDataType::key_type::ArtistRole] = newTrack.artist(); + oneData[DataTypes::TrackDataType::key_type::AlbumRole] = newTrack.albumName(); + oneData[DataTypes::TrackDataType::key_type::AlbumIdRole] = newTrack.albumId(); + oneData[DataTypes::TrackDataType::key_type::TrackNumberRole] = newTrack.trackNumber(); + oneData[DataTypes::TrackDataType::key_type::DiscNumberRole] = newTrack.discNumber(); + oneData[DataTypes::TrackDataType::key_type::DurationRole] = newTrack.duration(); + oneData[DataTypes::TrackDataType::key_type::MilliSecondsDurationRole] = newTrack.duration().msecsSinceStartOfDay(); + oneData[DataTypes::TrackDataType::key_type::ResourceRole] = newTrack.resourceURI(); + oneData[DataTypes::TrackDataType::key_type::ImageUrlRole] = newTrack.albumCover(); Q_EMIT trackHasChanged(oneData); diff --git a/src/viewmanager.cpp b/src/viewmanager.cpp --- a/src/viewmanager.cpp +++ b/src/viewmanager.cpp @@ -17,7 +17,7 @@ #include "viewmanager.h" -#include "databaseinterface.h" +#include "datatypes.h" ViewManager::ViewManager(QObject *parent) : QObject(parent) { @@ -147,7 +147,7 @@ if (mCurrentView != mTargetView) { Q_EMIT openListView(mTargetView, ElisaUtils::FilterByRecentlyPlayed, 1, mainTitle, {}, - 0, imageUrl, ElisaUtils::Track, DatabaseInterface::LastPlayDate, + 0, imageUrl, ElisaUtils::Track, DataTypes::LastPlayDate, SortOrder::SortDescending, MultipleAlbum, NoDiscHeaders, IsTrack); } } @@ -158,7 +158,7 @@ if (mCurrentView != mTargetView) { Q_EMIT openListView(mTargetView, ElisaUtils::FilterByFrequentlyPlayed, 1, mainTitle, {}, - 0, imageUrl, ElisaUtils::Track, DatabaseInterface::PlayFrequency, + 0, imageUrl, ElisaUtils::Track, DataTypes::PlayFrequency, SortOrder::SortDescending, MultipleAlbum, NoDiscHeaders, IsTrack); } }