File indexing completed on 2024-04-28 16:44:04
0001 /* 0002 * SPDX-FileCopyrightText: 2012 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "ScreenshotsModel.h" 0008 #include "libdiscover_debug.h" 0009 #include "utils.h" 0010 #include <resources/AbstractResource.h> 0011 // #include <QAbstractItemModelTester> 0012 0013 ScreenshotsModel::ScreenshotsModel(QObject *parent) 0014 : QAbstractListModel(parent) 0015 , m_resource(nullptr) 0016 { 0017 } 0018 0019 QHash<int, QByteArray> ScreenshotsModel::roleNames() const 0020 { 0021 QHash<int, QByteArray> roles = QAbstractItemModel::roleNames(); 0022 roles.insert(ThumbnailUrl, "small_image_url"); 0023 roles.insert(ScreenshotUrl, "large_image_url"); 0024 roles.insert(IsAnimatedRole, "isAnimated"); 0025 return roles; 0026 } 0027 0028 void ScreenshotsModel::setResource(AbstractResource *res) 0029 { 0030 if (res == m_resource) 0031 return; 0032 0033 if (m_resource) { 0034 disconnect(m_resource, &AbstractResource::screenshotsFetched, this, &ScreenshotsModel::screenshotsFetched); 0035 } 0036 m_resource = res; 0037 Q_EMIT resourceChanged(res); 0038 0039 beginResetModel(); 0040 m_screenshots.clear(); 0041 endResetModel(); 0042 0043 if (res) { 0044 connect(m_resource, &AbstractResource::screenshotsFetched, this, &ScreenshotsModel::screenshotsFetched); 0045 res->fetchScreenshots(); 0046 } else 0047 qCWarning(LIBDISCOVER_LOG) << "empty resource!"; 0048 } 0049 0050 AbstractResource *ScreenshotsModel::resource() const 0051 { 0052 return m_resource; 0053 } 0054 0055 void ScreenshotsModel::screenshotsFetched(const Screenshots &screenshots) 0056 { 0057 if (screenshots.isEmpty()) 0058 return; 0059 0060 beginInsertRows(QModelIndex(), m_screenshots.size(), m_screenshots.size() + screenshots.size() - 1); 0061 m_screenshots += screenshots; 0062 endInsertRows(); 0063 Q_EMIT countChanged(); 0064 } 0065 0066 QVariant ScreenshotsModel::data(const QModelIndex &index, int role) const 0067 { 0068 if (!index.isValid() || index.parent().isValid()) 0069 return QVariant(); 0070 0071 switch (role) { 0072 case ThumbnailUrl: 0073 return m_screenshots[index.row()].thumbnail; 0074 case ScreenshotUrl: 0075 return m_screenshots[index.row()].screenshot; 0076 case IsAnimatedRole: 0077 return m_screenshots[index.row()].isAnimated; 0078 } 0079 0080 return QVariant(); 0081 } 0082 0083 int ScreenshotsModel::rowCount(const QModelIndex &parent) const 0084 { 0085 return !parent.isValid() ? m_screenshots.count() : 0; 0086 } 0087 0088 QUrl ScreenshotsModel::screenshotAt(int row) const 0089 { 0090 return m_screenshots[row].screenshot; 0091 } 0092 0093 int ScreenshotsModel::count() const 0094 { 0095 return m_screenshots.count(); 0096 } 0097 0098 void ScreenshotsModel::remove(const QUrl &url) 0099 { 0100 int idxRemove = kIndexOf(m_screenshots, [url](const Screenshot &s) { 0101 return s.thumbnail == url || s.screenshot == url; 0102 }); 0103 if (idxRemove >= 0) { 0104 beginRemoveRows({}, idxRemove, idxRemove); 0105 m_screenshots.removeAt(idxRemove); 0106 endRemoveRows(); 0107 Q_EMIT countChanged(); 0108 0109 qDebug() << "screenshot removed" << url; 0110 } 0111 } 0112 0113 #include "moc_ScreenshotsModel.cpp"