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"