File indexing completed on 2024-05-12 05:10:43

0001 /*
0002   SPDX-FileCopyrightText: 2009 KDAB
0003   SPDX-FileContributor: Frank Osterfeld <osterfeld@kde.org>
0004 
0005   SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "calfilterproxymodel_p.h"
0009 #include "calendarutils.h"
0010 
0011 #include <Akonadi/EntityTreeModel>
0012 #include <Akonadi/Item>
0013 
0014 #include <KCalendarCore/CalFilter>
0015 #include <KCalendarCore/Incidence>
0016 
0017 using namespace Akonadi;
0018 
0019 class Akonadi::CalFilterProxyModelPrivate
0020 {
0021 public:
0022     explicit CalFilterProxyModelPrivate() = default;
0023 
0024     KCalendarCore::CalFilter *filter = nullptr;
0025 };
0026 
0027 CalFilterProxyModel::CalFilterProxyModel(QObject *parent)
0028     : QSortFilterProxyModel(parent)
0029     , d(new CalFilterProxyModelPrivate)
0030 {
0031     setFilterKeyColumn(0);
0032 }
0033 
0034 CalFilterProxyModel::~CalFilterProxyModel() = default;
0035 
0036 KCalendarCore::CalFilter *CalFilterProxyModel::filter() const
0037 {
0038     return d->filter;
0039 }
0040 
0041 void CalFilterProxyModel::setFilter(KCalendarCore::CalFilter *filter)
0042 {
0043     if (filter == d->filter) {
0044         return;
0045     }
0046 
0047     d->filter = filter;
0048     invalidateFilter();
0049 }
0050 
0051 bool CalFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
0052 {
0053     if (!d->filter) {
0054         return true;
0055     }
0056 
0057     const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent);
0058     if (!idx.isValid()) {
0059         return false;
0060     }
0061 
0062     const auto item = idx.data(Akonadi::EntityTreeModel::ItemRole).value<Akonadi::Item>();
0063     if (!item.isValid()) {
0064         return false;
0065     }
0066 
0067     const KCalendarCore::Incidence::Ptr incidence = CalendarUtils::incidence(item);
0068     if (!incidence) {
0069         return false;
0070     }
0071 
0072     return d->filter->filterIncidence(incidence);
0073 }
0074 
0075 #include "moc_calfilterproxymodel_p.cpp"