Files
main/desktop/kde/applications/ark/files/ark-23.08.2-fix-support-for-bzip2-format.patch
2025-01-22 22:30:07 +03:00

121 lines
6.7 KiB
Diff

https://invent.kde.org/utilities/ark/-/commit/9bcbcb056c43abef88540c54f25bc6c1a78c7c0e
From 9bcbcb056c43abef88540c54f25bc6c1a78c7c0e Mon Sep 17 00:00:00 2001
From: Elvis Angelaccio <elvis.angelaccio@kde.org>
Date: Sat, 14 Oct 2023 17:07:16 +0200
Subject: [PATCH] Fix support for bzip2 format with shared-mime-info 2.3
shared-mime-info 2.3 explicitly separated the mimetypes for bzip2 archives
from the mimetypes for the (old and deprecated) bzip archives.
libarchive doesn't support the old bzip format, however we can't just
drop it from ark since we still need it on systems that use an old
shared-mime-info package.
So for now we drop it only when we are sure that we are using a
shared-mime-info >= 2.3
--- a/kerfuffle/mimetypes.cpp
+++ b/kerfuffle/mimetypes.cpp
@@ -76,6 +76,8 @@ QMimeType determineMimeType(const QString& filename, MimePreference mp)
mimeFromContent == db.mimeTypeForName(QStringLiteral("application/gzip"))) ||
(mimeFromExtension.inherits(QStringLiteral("application/x-bzip-compressed-tar")) &&
mimeFromContent == db.mimeTypeForName(QStringLiteral("application/x-bzip"))) ||
+ (mimeFromExtension.inherits(QStringLiteral("application/x-bzip2-compressed-tar")) &&
+ mimeFromContent == db.mimeTypeForName(QStringLiteral("application/x-bzip2"))) ||
(mimeFromExtension.inherits(QStringLiteral("application/x-xz-compressed-tar")) &&
mimeFromContent == db.mimeTypeForName(QStringLiteral("application/x-xz"))) ||
(mimeFromExtension.inherits(QStringLiteral("application/x-tarz")) &&
--- a/kerfuffle/pluginmanager.cpp
+++ b/kerfuffle/pluginmanager.cpp
@@ -165,6 +165,18 @@ QStringList PluginManager::supportedWriteMimeTypes(MimeSortingMode mode) const
supported.remove(QStringLiteral("application/x-tzo"));
}
+ // shared-mime-info 2.3 explicitly separated application/x-bzip2-compressed-tar from application/x-bzip-compressed-tar
+ // since bzip2 is not compatible with the old (and deprecated) bzip format.
+ // See https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/239
+ // With shared-mime-info 2.3 (or newer) we can't have both mimetypes at the same time, since libarchive does not support
+ // the old deprecated bzip format. Also we can't know which version of shared-mime-info the system is actually using.
+ // For these reasons, just take the mimetype from QMimeDatabase to keep the compatibility with any shared-mime-info version.
+ if (supported.contains(QLatin1String("application/x-bzip-compressed-tar")) && supported.contains(QLatin1String("application/x-bzip2-compressed-tar"))) {
+ supported.remove(QLatin1String("application/x-bzip-compressed-tar"));
+ supported.remove(QLatin1String("application/x-bzip2-compressed-tar"));
+ supported.insert(QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.tar.bz2"), QMimeDatabase::MatchExtension).name());
+ }
+
if (mode == SortByComment) {
return sortByComment(supported);
}
--- a/plugins/libarchive/CMakeLists.txt
+++ b/plugins/libarchive/CMakeLists.txt
@@ -4,7 +4,7 @@ include_directories(${LibArchive_INCLUDE_DIRS})
# NOTE: These are the mimetypes for "single-file" archives. They must be defined in the JSON metadata together with the "normal" mimetypes.
# However they need to be duplicated here because we need to pass them as C++ define to the plugin (see LIBARCHIVE_RAW_MIMETYPES define below).
-set(SUPPORTED_LIBARCHIVE_RAW_MIMETYPES "application/x-compress;application/gzip;application/x-bzip;application/zlib;application/zstd;application/x-lzma;application/x-xz;application/x-lz4;application/x-lzip;application/x-lrzip;application/x-lzop;")
+set(SUPPORTED_LIBARCHIVE_RAW_MIMETYPES "application/x-compress;application/gzip;application/x-bzip;application/x-bzip2;application/zlib;application/zstd;application/x-lzma;application/x-xz;application/x-lz4;application/x-lzip;application/x-lrzip;application/x-lzop;")
set(INSTALLED_LIBARCHIVE_PLUGINS "")
--- a/plugins/libarchive/kerfuffle_libarchive.json.cmake
+++ b/plugins/libarchive/kerfuffle_libarchive.json.cmake
@@ -53,6 +53,7 @@
"application/x-tar",
"application/x-compressed-tar",
"application/x-bzip-compressed-tar",
+ "application/x-bzip2-compressed-tar",
"application/x-tarz",
"application/x-xz-compressed-tar",
"application/x-lzma-compressed-tar",
@@ -119,6 +120,11 @@
"CompressionLevelMax": 9,
"CompressionLevelMin": 1
},
+ "application/x-bzip2-compressed-tar": {
+ "CompressionLevelDefault": 9,
+ "CompressionLevelMax": 9,
+ "CompressionLevelMin": 1
+ },
"application/x-compressed-tar": {
"CompressionLevelDefault": 6,
"CompressionLevelMax": 9,
--- a/plugins/libarchive/kerfuffle_libarchive_readonly.json.cmake
+++ b/plugins/libarchive/kerfuffle_libarchive_readonly.json.cmake
@@ -61,6 +61,7 @@
"application/x-compress",
"application/gzip",
"application/x-bzip",
+ "application/x-bzip2",
"application/x-lzma",
"application/x-xz",
"application/zlib",
--- a/plugins/libarchive/libarchiveplugin.cpp
+++ b/plugins/libarchive/libarchiveplugin.cpp
@@ -13,6 +13,7 @@
#include <KLocalizedString>
+#include <QMimeDatabase>
#include <QThread>
#include <QFileInfo>
#include <QDir>
@@ -34,6 +35,17 @@ LibarchivePlugin::LibarchivePlugin(QObject *parent, const QVariantList &args)
#ifdef LIBARCHIVE_RAW_MIMETYPES
m_rawMimetypes = QStringLiteral(LIBARCHIVE_RAW_MIMETYPES).split(QLatin1Char(':'), Qt::SkipEmptyParts);
+ // shared-mime-info 2.3 explicitly separated application/x-bzip2 from application/x-bzip
+ // since bzip2 is not compatible with the old (and deprecated) bzip format.
+ // See https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/239
+ // With shared-mime-info 2.3 (or newer) we can't have both mimetypes at the same time, since libarchive does not support
+ // the old deprecated bzip format. Also we can't know which version of shared-mime-info the system is actually using.
+ // For these reasons, just take the mimetype from QMimeDatabase to keep the compatibility with any shared-mime-info version.
+ if (m_rawMimetypes.contains(QLatin1String("application/x-bzip")) && m_rawMimetypes.contains(QLatin1String("application/x-bzip2"))) {
+ m_rawMimetypes.removeAll(QLatin1String("application/x-bzip"));
+ m_rawMimetypes.removeAll(QLatin1String("application/x-bzip2"));
+ m_rawMimetypes.append(QMimeDatabase().mimeTypeForFile(QStringLiteral("dummy.bz2"), QMimeDatabase::MatchExtension).name());
+ }
qCDebug(ARK) << "# available raw mimetypes:" << m_rawMimetypes.count();
#endif
}
--
GitLab