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 }