File indexing completed on 2024-04-28 05:26:46
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 0034 if (m_resource) { 0035 disconnect(m_resource, &AbstractResource::screenshotsFetched, this, &ScreenshotsModel::screenshotsFetched); 0036 } 0037 m_resource = res; 0038 Q_EMIT resourceChanged(res); 0039 0040 beginResetModel(); 0041 m_screenshots.clear(); 0042 endResetModel(); 0043 0044 if (res) { 0045 connect(m_resource, &AbstractResource::screenshotsFetched, this, &ScreenshotsModel::screenshotsFetched); 0046 res->fetchScreenshots(); 0047 } else { 0048 qCWarning(LIBDISCOVER_LOG) << "empty resource!"; 0049 } 0050 } 0051 0052 AbstractResource *ScreenshotsModel::resource() const 0053 { 0054 return m_resource; 0055 } 0056 0057 void ScreenshotsModel::screenshotsFetched(const Screenshots &screenshots) 0058 { 0059 if (screenshots.isEmpty()) { 0060 return; 0061 } 0062 0063 beginInsertRows(QModelIndex(), m_screenshots.size(), m_screenshots.size() + screenshots.size() - 1); 0064 m_screenshots += screenshots; 0065 endInsertRows(); 0066 Q_EMIT countChanged(); 0067 } 0068 0069 QVariant ScreenshotsModel::data(const QModelIndex &index, int role) const 0070 { 0071 if (!index.isValid() || index.parent().isValid()) { 0072 return QVariant(); 0073 } 0074 0075 switch (role) { 0076 case ThumbnailUrl: 0077 return m_screenshots[index.row()].thumbnail; 0078 case ScreenshotUrl: 0079 return m_screenshots[index.row()].screenshot; 0080 case IsAnimatedRole: 0081 return m_screenshots[index.row()].isAnimated; 0082 } 0083 0084 return QVariant(); 0085 } 0086 0087 int ScreenshotsModel::rowCount(const QModelIndex &parent) const 0088 { 0089 return !parent.isValid() ? m_screenshots.count() : 0; 0090 } 0091 0092 int ScreenshotsModel::count() const 0093 { 0094 return m_screenshots.count(); 0095 } 0096 0097 void ScreenshotsModel::remove(const QUrl &url) 0098 { 0099 int idxRemove = kIndexOf(m_screenshots, [url](const Screenshot &s) { 0100 return s.thumbnail == url || s.screenshot == url; 0101 }); 0102 if (idxRemove >= 0) { 0103 beginRemoveRows({}, idxRemove, idxRemove); 0104 m_screenshots.removeAt(idxRemove); 0105 endRemoveRows(); 0106 Q_EMIT countChanged(); 0107 0108 qDebug() << "screenshot removed" << url; 0109 } 0110 } 0111 0112 #include "moc_ScreenshotsModel.cpp"