1 /*
2 * SPDX-FileCopyrightText: 2012 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5 */
6
7 #include "ScreenshotsModel.h"
8 #include "libdiscover_debug.h"
9 #include <resources/AbstractResource.h>
10 // #include <QAbstractItemModelTester>
11
ScreenshotsModel(QObject * parent)12 ScreenshotsModel::ScreenshotsModel(QObject *parent)
13 : QAbstractListModel(parent)
14 , m_resource(nullptr)
15 {
16 }
17
roleNames() const18 QHash<int, QByteArray> ScreenshotsModel::roleNames() const
19 {
20 QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
21 roles.insert(ThumbnailUrl, "small_image_url");
22 roles.insert(ScreenshotUrl, "large_image_url");
23 return roles;
24 }
25
setResource(AbstractResource * res)26 void ScreenshotsModel::setResource(AbstractResource *res)
27 {
28 if (res == m_resource)
29 return;
30
31 if (m_resource) {
32 disconnect(m_resource, &AbstractResource::screenshotsFetched, this, &ScreenshotsModel::screenshotsFetched);
33 }
34 m_resource = res;
35 Q_EMIT resourceChanged(res);
36
37 if (res) {
38 connect(m_resource, &AbstractResource::screenshotsFetched, this, &ScreenshotsModel::screenshotsFetched);
39 res->fetchScreenshots();
40 } else
41 qCWarning(LIBDISCOVER_LOG) << "empty resource!";
42 }
43
resource() const44 AbstractResource *ScreenshotsModel::resource() const
45 {
46 return m_resource;
47 }
48
screenshotsFetched(const QList<QUrl> & thumbnails,const QList<QUrl> & screenshots)49 void ScreenshotsModel::screenshotsFetched(const QList<QUrl> &thumbnails, const QList<QUrl> &screenshots)
50 {
51 Q_ASSERT(thumbnails.count() == screenshots.count());
52 if (thumbnails.isEmpty())
53 return;
54
55 beginInsertRows(QModelIndex(), m_thumbnails.size(), m_thumbnails.size() + thumbnails.size() - 1);
56 m_thumbnails += thumbnails;
57 m_screenshots += screenshots;
58 endInsertRows();
59 Q_EMIT countChanged();
60 }
61
data(const QModelIndex & index,int role) const62 QVariant ScreenshotsModel::data(const QModelIndex &index, int role) const
63 {
64 if (!index.isValid() || index.parent().isValid())
65 return QVariant();
66
67 switch (role) {
68 case ThumbnailUrl:
69 return m_thumbnails[index.row()];
70 case ScreenshotUrl:
71 return m_screenshots[index.row()];
72 }
73
74 return QVariant();
75 }
76
rowCount(const QModelIndex & parent) const77 int ScreenshotsModel::rowCount(const QModelIndex &parent) const
78 {
79 return !parent.isValid() ? m_screenshots.count() : 0;
80 }
81
screenshotAt(int row) const82 QUrl ScreenshotsModel::screenshotAt(int row) const
83 {
84 return m_screenshots[row];
85 }
86
count() const87 int ScreenshotsModel::count() const
88 {
89 return m_screenshots.count();
90 }
91
remove(const QUrl & url)92 void ScreenshotsModel::remove(const QUrl &url)
93 {
94 int idxRemove = m_thumbnails.indexOf(url);
95 if (idxRemove >= 0) {
96 beginRemoveRows({}, idxRemove, idxRemove);
97 m_thumbnails.removeAt(idxRemove);
98 m_screenshots.removeAt(idxRemove);
99 endRemoveRows();
100 Q_EMIT countChanged();
101
102 qDebug() << "screenshot removed" << url;
103 }
104 }
105