File indexing completed on 2024-05-26 04:55:12

0001 /**
0002  * SPDX-FileCopyrightText: 2021-2023 Bart De Vries <bart@mogwai.be>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QItemSelection>
0010 #include <QQmlEngine>
0011 #include <QSortFilterProxyModel>
0012 #include <QString>
0013 
0014 #include "models/episodemodel.h"
0015 
0016 class Entry;
0017 
0018 class AbstractEpisodeProxyModel : public QSortFilterProxyModel
0019 {
0020     Q_OBJECT
0021     QML_ELEMENT
0022     QML_UNCREATABLE("")
0023 
0024 public:
0025     enum FilterType {
0026         NoFilter,
0027         ReadFilter,
0028         NotReadFilter,
0029         NewFilter,
0030         NotNewFilter,
0031         FavoriteFilter,
0032         NotFavoriteFilter,
0033     };
0034     Q_ENUM(FilterType)
0035 
0036     enum SearchFlag {
0037         TitleFlag = 0x01,
0038         ContentFlag = 0x02,
0039         FeedNameFlag = 0x04,
0040     };
0041     Q_ENUM(SearchFlag)
0042     Q_DECLARE_FLAGS(SearchFlags, SearchFlag)
0043     Q_FLAGS(SearchFlags)
0044 
0045     enum SortType {
0046         DateDescending,
0047         DateAscending,
0048     };
0049     Q_ENUM(SortType)
0050 
0051     Q_PROPERTY(FilterType filterType READ filterType WRITE setFilterType NOTIFY filterTypeChanged)
0052     Q_PROPERTY(QString filterName READ filterName NOTIFY filterTypeChanged)
0053     Q_PROPERTY(QString searchFilter READ searchFilter WRITE setSearchFilter NOTIFY searchFilterChanged)
0054     Q_PROPERTY(SearchFlags searchFlags READ searchFlags WRITE setSearchFlags NOTIFY searchFlagsChanged)
0055     Q_PROPERTY(SortType sortType READ sortType WRITE setSortType NOTIFY sortTypeChanged)
0056 
0057     explicit AbstractEpisodeProxyModel(QObject *parent = nullptr);
0058 
0059     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0060 
0061     FilterType filterType() const;
0062     QString filterName() const;
0063     QString searchFilter() const;
0064     SearchFlags searchFlags() const;
0065     SortType sortType() const;
0066 
0067     void setFilterType(FilterType type);
0068     void setSearchFilter(const QString &searchString);
0069     void setSearchFlags(SearchFlags searchFlags);
0070     void setSortType(SortType type);
0071 
0072     Q_INVOKABLE static QString getFilterName(FilterType type);
0073     Q_INVOKABLE static QString getSearchFlagName(SearchFlag flag);
0074     Q_INVOKABLE static QString getSortName(SortType type);
0075     Q_INVOKABLE static QString getSortIconName(SortType type);
0076 
0077     Q_INVOKABLE QItemSelection createSelection(int rowa, int rowb);
0078 
0079 Q_SIGNALS:
0080     void filterTypeChanged();
0081     void searchFilterChanged();
0082     void searchFlagsChanged();
0083     void sortTypeChanged();
0084 
0085 protected:
0086     FilterType m_currentFilter = FilterType::NoFilter;
0087     QString m_searchFilter;
0088     SearchFlags m_searchFlags;
0089     SortType m_currentSort = SortType::DateDescending;
0090 };
0091 
0092 Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractEpisodeProxyModel::SearchFlags)
0093 Q_DECLARE_METATYPE(AbstractEpisodeProxyModel::SortType)