Merge pull request #1232 from telans/screenshots-update

ScreenshotsPage fixes
This commit is contained in:
TheKodeToad 2023-07-02 16:44:54 +01:00 committed by Sefa Eyeoglu
parent 34be098f12
commit 3cc68fcea4
No known key found for this signature in database
GPG Key ID: E13DFD4B47127951

View File

@ -97,37 +97,30 @@ public:
return; return;
if ((info.suffix().compare("png", Qt::CaseInsensitive) != 0)) if ((info.suffix().compare("png", Qt::CaseInsensitive) != 0))
return; return;
int tries = 5; if (!m_cache->stale(m_path))
while (tries) return;
{ QImage image(m_path);
if (!m_cache->stale(m_path)) if (image.isNull()) {
return; m_resultEmitter.emitResultsFailed(m_path);
QImage image(m_path); qDebug() << "Error loading screenshot: " + m_path + ". Perhaps too large?";
if (image.isNull())
{
QThread::msleep(500);
tries--;
continue;
}
QImage small;
if (image.width() > image.height())
small = image.scaledToWidth(512).scaledToWidth(256, Qt::SmoothTransformation);
else
small = image.scaledToHeight(512).scaledToHeight(256, Qt::SmoothTransformation);
QPoint offset((256 - small.width()) / 2, (256 - small.height()) / 2);
QImage square(QSize(256, 256), QImage::Format_ARGB32);
square.fill(Qt::transparent);
QPainter painter(&square);
painter.drawImage(offset, small);
painter.end();
QIcon icon(QPixmap::fromImage(square));
m_cache->add(m_path, icon);
m_resultEmitter.emitResultsReady(m_path);
return; return;
} }
m_resultEmitter.emitResultsFailed(m_path); QImage small;
if (image.width() > image.height())
small = image.scaledToWidth(512).scaledToWidth(256, Qt::SmoothTransformation);
else
small = image.scaledToHeight(512).scaledToHeight(256, Qt::SmoothTransformation);
QPoint offset((256 - small.width()) / 2, (256 - small.height()) / 2);
QImage square(QSize(256, 256), QImage::Format_ARGB32);
square.fill(Qt::transparent);
QPainter painter(&square);
painter.drawImage(offset, small);
painter.end();
QIcon icon(QPixmap::fromImage(square));
m_cache->add(m_path, icon);
m_resultEmitter.emitResultsReady(m_path);
} }
QString m_path; QString m_path;
SharedIconCachePtr m_cache; SharedIconCachePtr m_cache;
@ -146,9 +139,12 @@ public:
m_thumbnailCache = std::make_shared<SharedIconCache>(); m_thumbnailCache = std::make_shared<SharedIconCache>();
m_thumbnailCache->add("placeholder", APPLICATION->getThemedIcon("screenshot-placeholder")); m_thumbnailCache->add("placeholder", APPLICATION->getThemedIcon("screenshot-placeholder"));
connect(&watcher, SIGNAL(fileChanged(QString)), SLOT(fileChanged(QString))); connect(&watcher, SIGNAL(fileChanged(QString)), SLOT(fileChanged(QString)));
// FIXME: the watched file set is not updated when files are removed
} }
virtual ~FilterModel() { m_thumbnailingPool.waitForDone(500); } virtual ~FilterModel() {
m_thumbnailingPool.clear();
if (!m_thumbnailingPool.waitForDone(500))
qDebug() << "Thumbnail pool took longer than 500ms to finish";
}
virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const
{ {
auto model = sourceModel(); auto model = sourceModel();
@ -215,10 +211,12 @@ private slots:
void fileChanged(QString filepath) void fileChanged(QString filepath)
{ {
m_thumbnailCache->setStale(filepath); m_thumbnailCache->setStale(filepath);
thumbnailImage(filepath);
// reinsert the path... // reinsert the path...
watcher.removePath(filepath); watcher.removePath(filepath);
watcher.addPath(filepath); if (QFile::exists(filepath)) {
watcher.addPath(filepath);
thumbnailImage(filepath);
}
} }
private: private: