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