File indexing completed on 2024-04-21 04:49:02

0001 /*
0002    SPDX-FileCopyrightText: 2017 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003 
0004    SPDX-License-Identifier: LGPL-3.0-or-later
0005  */
0006 
0007 #ifndef TRACKSLISTENER_H
0008 #define TRACKSLISTENER_H
0009 
0010 #include "elisaLib_export.h"
0011 
0012 #include "databaseinterface.h"
0013 #include "datatypes.h"
0014 #include "elisautils.h"
0015 
0016 #include <QObject>
0017 
0018 #include <memory>
0019 
0020 class TracksListenerPrivate;
0021 
0022 class ELISALIB_EXPORT TracksListener : public QObject
0023 {
0024     Q_OBJECT
0025 
0026 public:
0027 
0028     using ListTrackDataType = DataTypes::ListTrackDataType;
0029 
0030     using TrackDataType = DataTypes::TrackDataType;
0031 
0032     explicit TracksListener(DatabaseInterface *database, QObject *parent = nullptr);
0033 
0034     ~TracksListener() override;
0035 
0036 Q_SIGNALS:
0037 
0038     void trackHasChanged(const TracksListener::TrackDataType &audioTrack);
0039 
0040     void trackHasBeenRemoved(qulonglong id);
0041 
0042     void tracksListAdded(qulonglong newDatabaseId,
0043                          const QString &entryTitle,
0044                          ElisaUtils::PlayListEntryType databaseIdType,
0045                          const TracksListener::ListTrackDataType &tracks);
0046 
0047 public Q_SLOTS:
0048 
0049     void tracksAdded(const TracksListener::ListTrackDataType &allTracks);
0050 
0051     void trackRemoved(qulonglong id);
0052 
0053     void trackModified(const TracksListener::TrackDataType &modifiedTrack);
0054 
0055     void trackByNameInList(const QVariant &title, const QVariant &artist, const QVariant &album, const QVariant &trackNumber, const QVariant &discNumber);
0056 
0057     void newEntryInList(qulonglong newDatabaseId,
0058                         const QString &entryTitle,
0059                         ElisaUtils::PlayListEntryType databaseIdType);
0060 
0061     void trackByFileNameInList(ElisaUtils::PlayListEntryType type, const QUrl &fileName);
0062 
0063     void newUrlInList(const QUrl &entryUrl,
0064                       ElisaUtils::PlayListEntryType databaseIdType);
0065 
0066     void updateSingleFileMetaData(const QUrl &url, DataTypes::ColumnsRoles role, const QVariant &data);
0067 
0068 private:
0069 
0070     void newArtistInList(qulonglong newDatabaseId, const QString &artist);
0071 
0072     void newGenreInList(qulonglong newDatabaseId, const QString &entryTitle);
0073 
0074     void newAlbumInList(qulonglong newDatabaseId,
0075                         const QString &entryTitle);
0076 
0077     std::unique_ptr<TracksListenerPrivate> d;
0078 
0079 };
0080 
0081 #endif // TRACKSLISTENER_H