File indexing completed on 2024-12-08 07:33:44
0001 // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com> 0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0003 0004 #pragma once 0005 0006 #include <QQmlEngine> 0007 #include <QSortFilterProxyModel> 0008 0009 #include "models/messagefiltermodel.h" 0010 0011 class MessageFilterModel; 0012 0013 /** 0014 * @class MediaMessageFilterModel 0015 * 0016 * This model filters a MessageEventModel for image and video messages. 0017 * 0018 * @sa MessageEventModel 0019 */ 0020 class MediaMessageFilterModel : public QSortFilterProxyModel 0021 { 0022 Q_OBJECT 0023 QML_ELEMENT 0024 0025 public: 0026 enum MediaType { 0027 Image = 0, 0028 Video, 0029 }; 0030 Q_ENUM(MediaType) 0031 0032 /** 0033 * @brief Defines the model roles. 0034 */ 0035 enum Roles { 0036 SourceRole = MessageFilterModel::LastRole + 1, /**< The mxc source URL for the item. */ 0037 TempSourceRole, /**< Source for the temporary content (either blurhash or mxc URL). */ 0038 TypeRole, /**< The type of the media (image or video). */ 0039 CaptionRole, /**< The caption for the item. */ 0040 SourceWidthRole, /**< The width of the source item. */ 0041 SourceHeightRole, /**< The height of the source item. */ 0042 }; 0043 Q_ENUM(Roles) 0044 0045 explicit MediaMessageFilterModel(QObject *parent = nullptr, MessageFilterModel *sourceMediaModel = nullptr); 0046 0047 /** 0048 * @brief Custom filter to show only image and video messages. 0049 */ 0050 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; 0051 0052 /** 0053 * @brief Get the given role value at the given index. 0054 * 0055 * @sa QSortFilterProxyModel::data 0056 */ 0057 [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0058 0059 /** 0060 * @brief Returns a mapping from Role enum values to role names. 0061 * 0062 * @sa Roles, QAbstractProxyModel::roleNames() 0063 */ 0064 [[nodiscard]] QHash<int, QByteArray> roleNames() const override; 0065 0066 Q_INVOKABLE int getRowForSourceItem(int sourceRow) const; 0067 };