121 lines
6.7 KiB
Diff
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
|