Warning, file /network/alligator/src/feedsproxymodel.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "feedsproxymodel.h"
0008 #include "database.h"
0009 #include "feed.h"
0010 #include "feedsmodel.h"
0011 
0012 FeedsProxyModel::FeedsProxyModel(QObject *parent)
0013     : QSortFilterProxyModel(parent)
0014     , m_group_name{}
0015 {
0016     connect(&Database::instance(), &Database::feedDetailsUpdated, [this]() {
0017         invalidate();
0018     });
0019     setSortRole(0);
0020     sort(0);
0021 }
0022 
0023 FeedsProxyModel::~FeedsProxyModel()
0024 {
0025 }
0026 
0027 void FeedsProxyModel::setGroupName(const QString &name)
0028 {
0029     if (m_group_name != name) {
0030         m_group_name = name;
0031         invalidateFilter();
0032         Q_EMIT groupNameChanged();
0033     }
0034 }
0035 
0036 QString FeedsProxyModel::groupName() const
0037 {
0038     return m_group_name;
0039 }
0040 
0041 bool FeedsProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
0042 {
0043     const auto idx = sourceModel()->index(source_row, 0, source_parent);
0044 
0045     if (!QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent)) {
0046         return false;
0047     }
0048 
0049     if (m_group_name.isEmpty()) {
0050         return true;
0051     }
0052 
0053     auto feed = idx.data(0).value<Feed *>();
0054 
0055     if (feed->groupName() == m_group_name) {
0056         return true;
0057     }
0058 
0059     return false;
0060 }
0061 
0062 bool FeedsProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
0063 {
0064     if (!sourceModel()) {
0065         return false;
0066     }
0067     const auto leftFeed = source_left.data(0).value<Feed *>();
0068     const auto rightFeed = source_right.data(0).value<Feed *>();
0069 
0070     return leftFeed->groupName() < rightFeed->groupName();
0071 }