diff --git a/src/core/utils/fileutils.cpp b/src/core/utils/fileutils.cpp index 31da9a4fab..eb229d8f0a 100644 --- a/src/core/utils/fileutils.cpp +++ b/src/core/utils/fileutils.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,11 @@ QString FileUtils::mimeTypeName( const QString &filePath ) return mimeType.name(); } +bool FileUtils::isImageMimeTypeSupported( const QString &mimeType ) +{ + return QImageReader::supportedMimeTypes().contains( mimeType.toLatin1() ); +} + QString FileUtils::fileName( const QString &filePath ) { QFileInfo fileInfo( filePath ); diff --git a/src/core/utils/fileutils.h b/src/core/utils/fileutils.h index bc24e64daf..470d199dbd 100644 --- a/src/core/utils/fileutils.h +++ b/src/core/utils/fileutils.h @@ -35,6 +35,8 @@ class QFIELD_CORE_EXPORT FileUtils : public QObject //! Returns the mimetype of a filepath as string Q_INVOKABLE static QString mimeTypeName( const QString &filePath ); + //! Returns TRUE if the provided mimetype is a supported image + Q_INVOKABLE static bool isImageMimeTypeSupported( const QString &mimeType ); //! Returns the filename of a filepath - if no file name exists it's empty Q_INVOKABLE static QString fileName( const QString &filePath ); //! Returns true if the file exists (false if it's a directory) diff --git a/src/qml/editorwidgets/+Qt5/ExternalResource.qml b/src/qml/editorwidgets/+Qt5/ExternalResource.qml index 3542055b29..8a0c9f0530 100644 --- a/src/qml/editorwidgets/+Qt5/ExternalResource.qml +++ b/src/qml/editorwidgets/+Qt5/ExternalResource.qml @@ -80,9 +80,10 @@ EditorWidgetBase { { const isHttp = value.startsWith('http://') || value.startsWith('https://'); var fullValue = isHttp ? value : prefixToRelativePath + value - isImage = !config.UseLink && FileUtils.mimeTypeName(fullValue).startsWith("image/") - isAudio = !config.UseLink && FileUtils.mimeTypeName(fullValue).startsWith("audio/") - isVideo = !config.UseLink && FileUtils.mimeTypeName(fullValue).startsWith("video/") + var mimeType = FileUtils.mimeTypeName(fullValue) + isImage = !config.UseLink && mimeType.startsWith("image/") && FileUtils.isImageMimeTypeSupported(mimeType) + isAudio = !config.UseLink && mimeType.startsWith("audio/") + isVideo = !config.UseLink && mimeType.startsWith("video/") image.visible = isImage geoTagBadge.visible = isImage diff --git a/src/qml/editorwidgets/+Qt6/ExternalResource.qml b/src/qml/editorwidgets/+Qt6/ExternalResource.qml index 696cb7422f..0bc612bcef 100644 --- a/src/qml/editorwidgets/+Qt6/ExternalResource.qml +++ b/src/qml/editorwidgets/+Qt6/ExternalResource.qml @@ -79,9 +79,10 @@ EditorWidgetBase { if (currentValue != undefined && currentValue !== '') { const isHttp = value.startsWith('http://') || value.startsWith('https://'); var fullValue = isHttp ? value : prefixToRelativePath + value - isImage = !config.UseLink && FileUtils.mimeTypeName(fullValue).startsWith("image/") - isAudio = !config.UseLink && FileUtils.mimeTypeName(fullValue).startsWith("audio/") - isVideo = !config.UseLink && FileUtils.mimeTypeName(fullValue).startsWith("video/") + var mimeType = FileUtils.mimeTypeName(fullValue) + isImage = !config.UseLink && mimeType.startsWith("image/") && FileUtils.isImageMimeTypeSupported(mimeType) + isAudio = !config.UseLink && mimeType.startsWith("audio/") + isVideo = !config.UseLink && mimeType.startsWith("video/") image.visible = isImage geoTagBadge.visible = isImage