File indexing completed on 2024-04-28 04:49:02
0001 /* 0002 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 SPDX-FileCopyrightText: 2018 (c) Alexander Stippich <a.stippich@gmx.net> 0004 0005 SPDX-License-Identifier: LGPL-3.0-or-later 0006 */ 0007 0008 #ifndef FILEBROWSERPROXYMODEL_H 0009 #define FILEBROWSERPROXYMODEL_H 0010 0011 #include "elisaLib_export.h" 0012 0013 #include "filescanner.h" 0014 #include "elisautils.h" 0015 0016 #include <KDirSortFilterProxyModel> 0017 #include <KJob> 0018 #include <KIO/ListJob> 0019 #include <KIO/UDSEntry> 0020 0021 #include <QMimeDatabase> 0022 #include <QRegularExpression> 0023 0024 #include <queue> 0025 #include <memory> 0026 0027 class MediaPlayListProxyModel; 0028 0029 class ELISALIB_EXPORT FileBrowserProxyModel : public KDirSortFilterProxyModel 0030 { 0031 Q_OBJECT 0032 0033 Q_PROPERTY(QString filterText 0034 READ filterText 0035 WRITE setFilterText 0036 NOTIFY filterTextChanged) 0037 0038 Q_PROPERTY(int filterRating 0039 READ filterRating 0040 WRITE setFilterRating 0041 NOTIFY filterRatingChanged) 0042 0043 Q_PROPERTY(bool sortedAscending 0044 READ sortedAscending 0045 NOTIFY sortedAscendingChanged) 0046 0047 Q_PROPERTY(MediaPlayListProxyModel* playList READ playList WRITE setPlayList NOTIFY playListChanged) 0048 0049 public: 0050 0051 explicit FileBrowserProxyModel(QObject *parent = nullptr); 0052 0053 ~FileBrowserProxyModel() override; 0054 0055 [[nodiscard]] QString filterText() const; 0056 0057 [[nodiscard]] int filterRating() const; 0058 0059 [[nodiscard]] bool sortedAscending() const; 0060 0061 [[nodiscard]] MediaPlayListProxyModel* playList() const; 0062 0063 void setSourceModel(QAbstractItemModel *sourceModel) override; 0064 0065 public Q_SLOTS: 0066 0067 void enqueueToPlayList(const QModelIndex &rootIndex); 0068 0069 void replaceAndPlayOfPlayList(const QModelIndex &rootIndex); 0070 0071 void enqueue(const DataTypes::MusicDataType &newEntry, 0072 const QString &newEntryTitle, 0073 ElisaUtils::PlayListEnqueueMode enqueueMode, 0074 ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0075 0076 void setFilterText(const QString &filterText); 0077 0078 void setFilterRating(int filterRating); 0079 0080 void setPlayList(MediaPlayListProxyModel* playList); 0081 0082 void sortModel(Qt::SortOrder order); 0083 0084 Q_SIGNALS: 0085 0086 void entriesToEnqueue(const DataTypes::EntryDataList &newEntries, 0087 ElisaUtils::PlayListEnqueueMode enqueueMode, 0088 ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0089 0090 void filterTextChanged(const QString &filterText); 0091 0092 void filterRatingChanged(); 0093 0094 void sortedAscendingChanged(); 0095 0096 void playListChanged(); 0097 0098 protected: 0099 0100 private Q_SLOTS: 0101 0102 void listRecursiveResult(KJob *job); 0103 0104 void listRecursiveNewEntries(KIO::Job *job, const KIO::UDSEntryList &list); 0105 0106 private: 0107 0108 void genericEnqueueToPlayList(const QModelIndex &rootIndex, 0109 ElisaUtils::PlayListEnqueueMode enqueueMode, 0110 ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); 0111 0112 void disconnectPlayList(); 0113 0114 void connectPlayList(); 0115 0116 void recursiveEnqueue(); 0117 0118 QString mFilterText; 0119 0120 QRegularExpression mFilterExpression; 0121 0122 MediaPlayListProxyModel* mPlayList = nullptr; 0123 0124 bool mFilterRating = false; 0125 0126 QMimeDatabase mMimeDatabase; 0127 0128 bool mEnqueueInProgress = false; 0129 0130 std::queue<std::tuple<QUrl, bool>> mPendingEntries; 0131 0132 DataTypes::EntryDataList mAllData; 0133 0134 ElisaUtils::PlayListEnqueueMode mEnqueueMode; 0135 0136 ElisaUtils::PlayListEnqueueTriggerPlay mTriggerPlay; 0137 0138 QUrl mCurentUrl; 0139 0140 KIO::Job *mCurrentJob = nullptr; 0141 0142 }; 0143 0144 #endif // FILEBROWSERPROXYMODEL_H