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`)
This commit is contained in:
Ismael Asensio 2020-06-06 18:40:03 +02:00
parent f987a1c404
commit f7a3318fa5
3 changed files with 7 additions and 6 deletions

View file

@ -236,7 +236,7 @@ void InformationPanelContent::refreshPreview()
refreshPixmapView(); refreshPixmapView();
const QString mimeType = m_item.mimetype(); 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/")); m_isVideo = !isAnimatedImage && mimeType.startsWith(QLatin1String("video/"));
bool usePhonon = m_isVideo || mimeType.startsWith(QLatin1String("audio/")); bool usePhonon = m_isVideo || mimeType.startsWith(QLatin1String("audio/"));

View file

@ -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); const QList<QByteArray> imageFormats = QImageReader::imageFormatsForMimeType(mimeType.toUtf8());
return !imageFormat.isEmpty() && QMovie::supportedFormats().contains(imageFormat); return std::any_of(imageFormats.begin(), imageFormats.end(),
[](const QByteArray &format){ return QMovie::supportedFormats().contains(format); });
} }

View file

@ -80,9 +80,9 @@ public:
void stopAnimatedImage(); 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: protected:
void paintEvent(QPaintEvent* event) override; void paintEvent(QPaintEvent* event) override;