File indexing completed on 2024-05-05 04:50:33
0001 /* 0002 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 SPDX-FileCopyrightText: 2017 (c) Alexander Stippich <a.stippich@gmx.net> 0004 0005 SPDX-License-Identifier: LGPL-3.0-or-later 0006 */ 0007 0008 #ifndef ABSTRACTMEDIAPROXYMODEL_H 0009 #define ABSTRACTMEDIAPROXYMODEL_H 0010 0011 #include "elisaLib_export.h" 0012 0013 #include "elisautils.h" 0014 #include "datatypes.h" 0015 0016 #include <QSortFilterProxyModel> 0017 #include <QRegularExpression> 0018 #include <QReadWriteLock> 0019 #include <QThreadPool> 0020 #include <QFuture> 0021 #include <QFutureWatcher> 0022 0023 class MediaPlayListProxyModel; 0024 0025 class ELISALIB_EXPORT AbstractMediaProxyModel : public QSortFilterProxyModel 0026 { 0027 0028 Q_OBJECT 0029 0030 Q_PROPERTY(QString filterText 0031 READ filterText 0032 WRITE setFilterText 0033 NOTIFY filterTextChanged) 0034 0035 Q_PROPERTY(int filterRating 0036 READ filterRating 0037 WRITE setFilterRating 0038 NOTIFY filterRatingChanged) 0039 0040 Q_PROPERTY(bool sortedAscending 0041 READ sortedAscending 0042 NOTIFY sortedAscendingChanged) 0043 0044 Q_PROPERTY(MediaPlayListProxyModel* playList READ playList WRITE setPlayList NOTIFY playListChanged) 0045 0046 public: 0047 0048 explicit AbstractMediaProxyModel(QObject *parent = nullptr); 0049 0050 ~AbstractMediaProxyModel() override; 0051 0052 [[nodiscard]] QString filterText() const; 0053 0054 [[nodiscard]] int filterRating() const; 0055 0056 [[nodiscard]] bool sortedAscending() const; 0057 0058 [[nodiscard]] MediaPlayListProxyModel* playList() const; 0059 0060 public Q_SLOTS: 0061 0062 void setFilterText(const QString &filterText); 0063 0064 void setFilterRating(int filterRating); 0065 0066 void sortModel(Qt::SortOrder order); 0067 0068 void setPlayList(MediaPlayListProxyModel* playList); 0069 0070 void enqueueToPlayList(const QModelIndex &rootIndex); 0071 0072 void replaceAndPlayOfPlayList(const QModelIndex &rootIndex); 0073 0074 void replaceAndPlayOfPlayListFromTrackUrl(const QModelIndex &rootIndex, const QUrl &switchTrackUrl); 0075 0076 void enqueue(const DataTypes::MusicDataType &newEntry, 0077 const QString &newEntryTitle, 0078 ElisaUtils::PlayListEnqueueMode enqueueMode, 0079 ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0080 0081 void afterPlaylistEnqueue(); 0082 0083 Q_SIGNALS: 0084 0085 void filterTextChanged(const QString &filterText); 0086 0087 void filterRatingChanged(int filterRating); 0088 0089 void sortedAscendingChanged(); 0090 0091 void playListChanged(); 0092 0093 void entriesToEnqueue(const DataTypes::EntryDataList &newEntries, 0094 ElisaUtils::PlayListEnqueueMode enqueueMode, 0095 ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0096 0097 void switchToTrackUrl(const QUrl &url, ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0098 0099 protected: 0100 0101 [[nodiscard]] bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override = 0; 0102 0103 void disconnectPlayList(); 0104 0105 void connectPlayList(); 0106 0107 QString mFilterText; 0108 0109 int mFilterRating = 0; 0110 0111 QRegularExpression mFilterExpression; 0112 0113 QReadWriteLock mDataLock; 0114 0115 QThreadPool mThreadPool; 0116 0117 MediaPlayListProxyModel* mPlayList = nullptr; 0118 0119 QFutureWatcher<void> mEnqueueWatcher; 0120 0121 QUrl mEnqueueWatcherTrackUrl; 0122 0123 0124 private: 0125 0126 QFuture<void> genericEnqueueToPlayList(const QModelIndex &rootIndex, 0127 ElisaUtils::PlayListEnqueueMode enqueueMode, 0128 ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0129 0130 }; 0131 0132 #endif // ABSTRACTMEDIAPROXYMODEL_H