File indexing completed on 2024-05-05 04:50:34

0001 /*
0002    SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003    SPDX-FileCopyrightText: 2017 (c) Alexander Stippich <a.stippich@gmx.net>
0004 
0005    SPDX-License-Identifier: LGPL-3.0-or-later
0006  */
0007 
0008 #include "gridviewproxymodel.h"
0009 
0010 #include "datatypes.h"
0011 #include "elisautils.h"
0012 
0013 
0014 GridViewProxyModel::GridViewProxyModel(QObject *parent) : AbstractMediaProxyModel(parent)
0015 {
0016     setSortRole(Qt::DisplayRole);
0017     setSortCaseSensitivity(Qt::CaseInsensitive);
0018 }
0019 
0020 GridViewProxyModel::~GridViewProxyModel() = default;
0021 
0022 bool GridViewProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
0023 {
0024     bool result = false;
0025 
0026     auto currentIndex = sourceModel()->index(source_row, 0, source_parent);
0027 
0028     const auto &mainValue = sourceModel()->data(currentIndex, Qt::DisplayRole).toString();
0029     const auto &artistValue = sourceModel()->data(currentIndex, DataTypes::ArtistRole).toString();
0030     const auto &allArtistsValue = sourceModel()->data(currentIndex, DataTypes::AllArtistsRole).toStringList();
0031     bool collectionMaximumRatingValueIsValid = false;
0032     const auto collectionMaximumRatingValue = sourceModel()->data(currentIndex, DataTypes::HighestTrackRating).toInt(&collectionMaximumRatingValueIsValid);
0033     bool maximumRatingValueIsValid = false;
0034     const auto maximumRatingValue = sourceModel()->data(currentIndex, DataTypes::RatingRole).toInt(&maximumRatingValueIsValid);
0035 
0036     if ((collectionMaximumRatingValueIsValid && maximumRatingValueIsValid &&
0037             collectionMaximumRatingValue < mFilterRating && maximumRatingValue < mFilterRating) ||
0038         (collectionMaximumRatingValueIsValid && !maximumRatingValueIsValid && collectionMaximumRatingValue < mFilterRating) ||
0039         (!collectionMaximumRatingValueIsValid && maximumRatingValueIsValid && maximumRatingValue < mFilterRating) ||
0040         (!collectionMaximumRatingValueIsValid && !maximumRatingValueIsValid && mFilterRating)) {
0041         result = false;
0042         return result;
0043     }
0044 
0045     if (mFilterExpression.match(mainValue.normalized(QString::NormalizationForm_KC)).hasMatch()) {
0046         result = true;
0047         return result;
0048     }
0049 
0050     if (mFilterExpression.match(artistValue.normalized(QString::NormalizationForm_KC)).hasMatch()) {
0051         result = true;
0052         return result;
0053     }
0054 
0055     for (const auto &oneArtist : allArtistsValue) {
0056         if (mFilterExpression.match(oneArtist.normalized(QString::NormalizationForm_KC)).hasMatch()) {
0057             result = true;
0058             return result;
0059         }
0060     }
0061 
0062     return result;
0063 }
0064 
0065 
0066 #include "moc_gridviewproxymodel.cpp"