From f7a3318fa51dc340e8615009c43ba3a53d9c7012 Mon Sep 17 00:00:00 2001 From: Ismael Asensio Date: Sat, 6 Jun 2020 18:40:03 +0200 Subject: [PATCH] Detect animated format using mimeType instead of file path This allows to extend the functionality to non-local files and avoids a warning on such files (`QFSFileEngine::open: No file name specified`) --- src/panels/information/informationpanelcontent.cpp | 2 +- src/panels/information/pixmapviewer.cpp | 7 ++++--- src/panels/information/pixmapviewer.h | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index a0c8725605..9db7f8bb71 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -236,7 +236,7 @@ void InformationPanelContent::refreshPreview() refreshPixmapView(); const QString mimeType = m_item.mimetype(); - const bool isAnimatedImage = m_preview->isAnimatedImage(itemUrl.toLocalFile()); + const bool isAnimatedImage = m_preview->isAnimatedMimeType(mimeType); m_isVideo = !isAnimatedImage && mimeType.startsWith(QLatin1String("video/")); bool usePhonon = m_isVideo || mimeType.startsWith(QLatin1String("audio/")); diff --git a/src/panels/information/pixmapviewer.cpp b/src/panels/information/pixmapviewer.cpp index 2601e82ae5..39fedb1a1f 100644 --- a/src/panels/information/pixmapviewer.cpp +++ b/src/panels/information/pixmapviewer.cpp @@ -186,8 +186,9 @@ void PixmapViewer::stopAnimatedImage() } } -bool PixmapViewer::isAnimatedImage(const QString &fileName) +bool PixmapViewer::isAnimatedMimeType(const QString &mimeType) { - const QByteArray imageFormat = QImageReader::imageFormat(fileName); - return !imageFormat.isEmpty() && QMovie::supportedFormats().contains(imageFormat); + const QList imageFormats = QImageReader::imageFormatsForMimeType(mimeType.toUtf8()); + return std::any_of(imageFormats.begin(), imageFormats.end(), + [](const QByteArray &format){ return QMovie::supportedFormats().contains(format); }); } diff --git a/src/panels/information/pixmapviewer.h b/src/panels/information/pixmapviewer.h index 37071045fb..c231b590db 100644 --- a/src/panels/information/pixmapviewer.h +++ b/src/panels/information/pixmapviewer.h @@ -80,9 +80,9 @@ public: void stopAnimatedImage(); /** - * Checks if \a fileName contains an animated image supported by QMovie. + * Checks if \a mimeType has a format supported by QMovie. */ - static bool isAnimatedImage(const QString &fileName); + static bool isAnimatedMimeType(const QString &mimeType); protected: void paintEvent(QPaintEvent* event) override;