Bug#1109600: unblock: ark/4:25.04.3-1
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: ark@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:ark
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear Release Team,
please unblock package ark.
[ Reason ]
It contains the following changes:
* New upstream release (25.04.3).
- CompressFileItemAction: stat without progress info.
* Backport upstream commits:
- Fix file sorting order not matching Dolphin’s. [55b6d6e6] (kde#387969)
- Fix corner case of single-threaded CPU getting 0 thread. [1435ccd4]
The complete debdiff is a little bug due to translation fixes so I’m
attaching a simple diff stripped of these for your convenience :
diff -ur --exclude=po ark-25.04.[03]
[ Tests ]
- Upstream test suite passes in sbuild.
- Tested opening and extracting several types of archives.
[ Risks ]
Contains only the upstream point release and backported patches. Further
fixes can easily be backported, or the changes reverted.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
Thanks !
unblock ark/4:25.04.3-1
diff -Nru ark-25.04.0/app/compressfileitemaction.cpp ark-25.04.3/app/compressfileitemaction.cpp
--- ark-25.04.0/app/compressfileitemaction.cpp 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/app/compressfileitemaction.cpp 2025-07-01 11:40:18.000000000 +0200
@@ -76,7 +76,7 @@
if (compressMenuAction->isEnabled()) {
const KFileItemList items = fileItemInfos.items();
const KFileItem &first = items.first();
- auto *job = KIO::stat(first.url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash));
+ auto *job = KIO::stat(first.url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash), KIO::HideProgressInfo);
connect(job, &KJob::result, compressMenu, [actionsToBeDisabledInReadOnlyDir, job]() {
if (!job->error() && !KFileItem(job->statResult(), job->url()).isWritable()) {
for (auto action : actionsToBeDisabledInReadOnlyDir) {
diff -Nru ark-25.04.0/app/org.kde.ark.appdata.xml ark-25.04.3/app/org.kde.ark.appdata.xml
--- ark-25.04.0/app/org.kde.ark.appdata.xml 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/app/org.kde.ark.appdata.xml 2025-07-01 11:40:18.000000000 +0200
@@ -418,6 +418,9 @@
<binary>ark</binary>
</provides>
<releases>
+ <release version="25.04.3" date="2025-07-03"/>
+ <release version="25.04.2" date="2025-06-05"/>
+ <release version="25.04.1" date="2025-05-08"/>
<release version="25.04.0" date="2025-04-17"/>
<release version="24.12.3" date="2025-03-06"/>
<release version="24.12.2" date="2025-02-06"/>
diff -Nru ark-25.04.0/CMakeLists.txt ark-25.04.3/CMakeLists.txt
--- ark-25.04.0/CMakeLists.txt 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/CMakeLists.txt 2025-07-01 11:40:18.000000000 +0200
@@ -3,7 +3,7 @@
# KDE Application Version, managed by release script
set (RELEASE_SERVICE_VERSION_MAJOR "25")
set (RELEASE_SERVICE_VERSION_MINOR "04")
-set (RELEASE_SERVICE_VERSION_MICRO "0")
+set (RELEASE_SERVICE_VERSION_MICRO "3")
set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(ark VERSION ${RELEASE_SERVICE_VERSION})
diff -Nru ark-25.04.0/debian/changelog ark-25.04.3/debian/changelog
--- ark-25.04.0/debian/changelog 2025-04-17 18:40:17.000000000 +0200
+++ ark-25.04.3/debian/changelog 2025-07-18 15:34:31.000000000 +0200
@@ -1,3 +1,14 @@
+ark (4:25.04.3-1) unstable; urgency=medium
+
+ [ Aurélien COUDERC ]
+ * New upstream release (25.04.3).
+ - CompressFileItemAction: stat without progress info.
+ * Backport upstream commits:
+ - Fix file sorting order not matching Dolphin’s. [55b6d6e6] (kde#387969)
+ - Fix corner case of single-threaded CPU getting 0 thread. [1435ccd4]
+
+ -- Aurélien COUDERC <coucouf@debian.org> Fri, 18 Jul 2025 15:34:31 +0200
+
ark (4:25.04.0-1) unstable; urgency=medium
[ Aurélien COUDERC ]
diff -Nru ark-25.04.0/debian/patches/series ark-25.04.3/debian/patches/series
--- ark-25.04.0/debian/patches/series 1970-01-01 01:00:00.000000000 +0100
+++ ark-25.04.3/debian/patches/series 2025-07-18 15:32:15.000000000 +0200
@@ -0,0 +1,2 @@
+upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch
+upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch
diff -Nru ark-25.04.0/debian/patches/upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch ark-25.04.3/debian/patches/upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch
--- ark-25.04.0/debian/patches/upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch 1970-01-01 01:00:00.000000000 +0100
+++ ark-25.04.3/debian/patches/upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch 2025-07-18 15:33:13.000000000 +0200
@@ -0,0 +1,28 @@
+From 1435ccd417f6ab533d511865846c263936dec6c6 Mon Sep 17 00:00:00 2001
+From: Zhangzhi Hu <integral@member.fsf.org>
+Date: Thu, 27 Mar 2025 18:56:24 +0000
+Subject: [PATCH] Fix corner case of single-threaded CPU when calculating
+ number of threads
+
+Currently, the number of threads will be 0 on single-threaded CPUs.
+Use `std::max` to fix this corner case.
+---
+ plugins/libarchive/readwritelibarchiveplugin.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/libarchive/readwritelibarchiveplugin.cpp b/plugins/libarchive/readwritelibarchiveplugin.cpp
+index 5f91385f9..b5c8e711c 100644
+--- a/plugins/libarchive/readwritelibarchiveplugin.cpp
++++ b/plugins/libarchive/readwritelibarchiveplugin.cpp
+@@ -302,7 +302,7 @@ bool ReadWriteLibarchivePlugin::initializeNewFileCompressionOptions(const Compre
+ {
+ int ret;
+ bool requiresExecutable = false;
+- const auto threads = std::to_string(static_cast<unsigned>(std::thread::hardware_concurrency() * 0.8));
++ const auto threads = std::to_string(std::max(1u, static_cast<unsigned>(std::thread::hardware_concurrency() * 0.8)));
+ const bool is7zFile = filename().right(2).toUpper() == QLatin1String("7Z");
+
+ if (is7zFile) {
+--
+GitLab
+
diff -Nru ark-25.04.0/debian/patches/upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch ark-25.04.3/debian/patches/upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch
--- ark-25.04.0/debian/patches/upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch 1970-01-01 01:00:00.000000000 +0100
+++ ark-25.04.3/debian/patches/upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch 2025-07-18 15:28:22.000000000 +0200
@@ -0,0 +1,105 @@
+From 55b6d6e68616f2102fe3b7a4b4182ec6e403a3b1 Mon Sep 17 00:00:00 2001
+From: Vladislav Kachegov <vladkachegov@gmail.com>
+Date: Mon, 24 Feb 2025 15:02:49 +0300
+Subject: [PATCH] Implement Dolphin-style natural string sorting
+
+Enabled natural string sorting to match Dolphin's order, improving human-friendly
+string comparison. Updated the function comment for clarity and noted potential
+refactoring to a framework utility for maintainability.
+
+BUG: 387969
+---
+ part/archivesortfiltermodel.cpp | 42 +++++++++++++++++++++++++++++++++
+ part/archivesortfiltermodel.h | 4 ++++
+ 2 files changed, 46 insertions(+)
+
+diff --git a/part/archivesortfiltermodel.cpp b/part/archivesortfiltermodel.cpp
+index dabac5ce6..b2fa8a489 100644
+--- a/part/archivesortfiltermodel.cpp
++++ b/part/archivesortfiltermodel.cpp
+@@ -10,11 +10,48 @@
+
+ using namespace Kerfuffle;
+
++namespace
++{
++/**
++ * Performs a natural string comparison.
++ * This function compares strings in a way that is similar to natural human sorting order.
++ * It is adapted from the Dolphin KFileItemModel::stringCompare implementation.
++ *
++ * @note Consider refactoring this logic to a framework-level utility
++ * for improved maintainability and reusability across multiple projects.
++ *
++ * @return Integer less than, equal to, or greater than zero if the first argument is
++ * found, respectively, to be less than, to match, or be greater than the second.
++ */
++int naturalStringCompare(const QString &a, const QString &b, const QCollator &collator)
++{
++ // Split extension, taking into account it can be empty
++ constexpr QString::SectionFlags flags = QString::SectionSkipEmpty | QString::SectionIncludeLeadingSep;
++
++ // Sort by baseName first
++ const QString aBaseName = a.section(QLatin1Char('.'), 0, 0, flags);
++ const QString bBaseName = b.section(QLatin1Char('.'), 0, 0, flags);
++
++ const int res = collator.compare(aBaseName, bBaseName);
++ if (res != 0 || (aBaseName.length() == a.length() && bBaseName.length() == b.length())) {
++ return res;
++ }
++
++ // sliced() has undefined behavior when pos < 0 or pos > size().
++ Q_ASSERT(aBaseName.length() <= a.length() && aBaseName.length() >= 0);
++ Q_ASSERT(bBaseName.length() <= b.length() && bBaseName.length() >= 0);
++
++ // baseNames were equal, sort by extension
++ return collator.compare(a.sliced(aBaseName.length()), b.sliced(bBaseName.length()));
++}
++}
++
+ ArchiveSortFilterModel::ArchiveSortFilterModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+ {
+ // always enable recursive fitlering
+ setRecursiveFilteringEnabled(true);
++ m_collator.setNumericMode(true);
+ }
+
+ ArchiveSortFilterModel::~ArchiveSortFilterModel()
+@@ -36,6 +73,11 @@ bool ArchiveSortFilterModel::lessThan(const QModelIndex &leftIndex, const QModel
+ return false;
+ } else {
+ switch (col) {
++ case DisplayName: {
++ const auto leftFullName = left->property(property.constData()).toString();
++ const auto rightFullName = right->property(property.constData()).toString();
++ return naturalStringCompare(leftFullName, rightFullName, m_collator) < 0;
++ }
+ case Size:
+ case CompressedSize:
+ if (left->property(property.constData()).toULongLong() < right->property(property.constData()).toULongLong()) {
+diff --git a/part/archivesortfiltermodel.h b/part/archivesortfiltermodel.h
+index 3fa392d1b..3cd30b3ff 100644
+--- a/part/archivesortfiltermodel.h
++++ b/part/archivesortfiltermodel.h
+@@ -6,6 +6,7 @@
+ #ifndef ARCHIVESORTFILTERMODEL_H
+ #define ARCHIVESORTFILTERMODEL_H
+
++#include <QCollator>
+ #include <QSortFilterProxyModel>
+
+ class ArchiveSortFilterModel : public QSortFilterProxyModel
+@@ -17,6 +18,9 @@ public:
+ ~ArchiveSortFilterModel() override;
+
+ bool lessThan(const QModelIndex &leftIndex, const QModelIndex &rightIndex) const override;
++
++private:
++ QCollator m_collator;
+ };
+
+ #endif // ARCHIVESORTFILTERMODEL_H
+--
+GitLab
+
diff -Nru ark-25.04.0/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake ark-25.04.3/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake
--- ark-25.04.0/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake 2025-07-01 11:40:18.000000000 +0200
@@ -39,6 +39,7 @@
"Description[ro]": "Suport deplin pentru formatul de arhivă ARJ",
"Description[ru]": "Полная поддержка архивов ARJ",
"Description[sa]": "एआरजे संग्रहस्वरूपेषु पूर्णसमर्थनम्",
+ "Description[sk]": "Úplná podpora archívnych formátov ARJ",
"Description[sl]": "Polna podpora za arhive vrste ARJ",
"Description[sv]": "Fullt stöd för ARJ arkivformat",
"Description[tr]": "ARJ arşiv biçimi için tam destek",
diff -Nru ark-25.04.0/po/ca@valencia/ark.po ark-25.04.3/po/ca@valencia/ark.po
--- ark-25.04.0/po/ca@valencia/ark.po 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/po/ca@valencia/ark.po 2025-07-01 11:40:18.000000000 +0200
@@ -997,7 +997,8 @@
#: kerfuffle/generalsettingspage.ui:17
#, kde-format
msgid "When clicking a file in an archive or pressing the Return key:"
-msgstr "Fent clic en un fitxer, un arxiu o prement la tecla «Retorn»:"
+msgstr ""
+"Quan es clique damunt d'un fitxer en un arxiu o prement la tecla «Retorn»:"
#. i18n: ectx: property (text), widget (QRadioButton, radioButton)
#: kerfuffle/generalsettingspage.ui:33
diff -Nru ark-25.04.0/po/es/ark.po ark-25.04.3/po/es/ark.po
--- ark-25.04.0/po/es/ark.po 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/po/es/ark.po 2025-07-01 11:40:18.000000000 +0200
@@ -1,4 +1,6 @@
# Spanish translations for ark.po package.
+# Copyright (C) 2000-2025 This file is copyright:
+# This file is distributed under the same license as the ark package.
#
# SPDX-FileCopyrightText: 2000-2002 Pablo de Vicente <vicente@oan.es>
# SPDX-FileCopyrightText: 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Eloy Cuadra <ecuadra@eloihr.net>
@@ -8,7 +10,7 @@
"Project-Id-Version: ark\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-03-06 00:44+0000\n"
-"PO-Revision-Date: 2025-03-19 14:19+0100\n"
+"PO-Revision-Date: 2025-05-04 01:26+0100\n"
"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
"Language: es\n"
diff -Nru ark-25.04.0/po/es/docs/ark/index.docbook ark-25.04.3/po/es/docs/ark/index.docbook
--- ark-25.04.0/po/es/docs/ark/index.docbook 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/po/es/docs/ark/index.docbook 2025-07-01 11:40:18.000000000 +0200
@@ -201,7 +201,7 @@
<para
>Para abrir un archivo comprimido en &ark;, seleccione <guimenuitem
->Abrir...</guimenuitem
+>Abrir…</guimenuitem
> (<keycombo action="simul"
>&Ctrl;<keycap
>O</keycap
@@ -227,7 +227,7 @@
>Puede realizar varias operaciones en un archivo comprimido abierto usando el menú <guimenu
>Archivo comprimido</guimenu
>. Por ejemplo, puede guardar el archivo comprimido con un nombre diferente usando <guimenuitem
->Guardar como...</guimenuitem
+>Guardar como…</guimenuitem
>. Puede ver las propiedades del archivo comprimido (como su tipo, tamaño y suma de comprobación MD5) usando la opción <guimenuitem
>Propiedades</guimenuitem
>.</para>
@@ -331,7 +331,7 @@
<listitem>
<para
><guimenuitem
->Abrir con...</guimenuitem
+>Abrir con…</guimenuitem
> le permite escoger una aplicación para abrir el archivo.</para>
</listitem>
<listitem>
@@ -409,7 +409,7 @@
>Si edita y guarda un archivo que había abierto usando <guimenuitem
>Abrir</guimenuitem
> o <guimenuitem
->Abrir con...</guimenuitem
+>Abrir con…</guimenuitem
>, &ark; le preguntará si desea actualizar dicho archivo dentro del archivo comprimido. Si responde afirmativamente, se actualizará dicho archivo dentro del archivo comprimido.</para>
</sect2>
@@ -425,7 +425,7 @@
> en el menú <guimenu
>Archivo</guimenu
>. Esto abre un submenú con las carpetas a las que ha accedido anteriormente, donde podrá seleccionar una para extraer archivos rápidamente en ella. También puede realizar la misma acción usando la opción del submenú <guisubmenu
->Extraer en...</guisubmenu
+>Extraer en…</guisubmenu
> para abrir el diálogo <guilabel
>Extraer</guilabel
>, donde podrá ajustar diversas opciones que afectan a la extracción. Consulte más adelante la información sobre las opciones disponibles en el diálogo de extracción.</para>
@@ -538,7 +538,7 @@
<para
>Para añadir archivos o carpetas en el nuevo archivo comprimido, use <guimenuitem
->Añadir archivos...</guimenuitem
+>Añadir archivos…</guimenuitem
> en el menú <guimenu
>Archivo comprimido</guimenu
>.</para>
@@ -670,7 +670,7 @@
<listitem>
<para
><guimenuitem
->Extraer en...</guimenuitem
+>Extraer en…</guimenuitem
> abre un diálogo de extracción en el que podrá escoger la carpeta de destino y varias opciones de extracción.</para>
</listitem>
</itemizedlist>
@@ -692,7 +692,7 @@
<listitem>
<para
><guimenuitem
->Comprimir en...</guimenuitem
+>Comprimir en…</guimenuitem
> abre un diálogo en el que podrá seleccionar la carpeta, el nombre y el tipo de archivo comprimido.</para>
</listitem>
</itemizedlist>
diff -Nru ark-25.04.0/po/eu/ark.po ark-25.04.3/po/eu/ark.po
--- ark-25.04.0/po/eu/ark.po 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/po/eu/ark.po 2025-07-01 11:40:18.000000000 +0200
@@ -1,7 +1,7 @@
# Translation for ark.po to Euskara/Basque (eu).
# Copyright (C) 1999-2024 This file is copyright:
# This file is distributed under the same license as the ark package.
-# SPDX-FileCopyrightText: 2023, 2024 KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>
+# SPDX-FileCopyrightText: 2023, 2024, 2025 KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>
#
# Translators:
# Marcos <marcosgoi@jazzfree.com>, 2000.
@@ -13,14 +13,14 @@
"Project-Id-Version: ark\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-03-06 00:44+0000\n"
-"PO-Revision-Date: 2024-09-01 07:33+0200\n"
+"PO-Revision-Date: 2025-04-25 22:10+0200\n"
"Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
"Language-Team: Basque <kde-i18n-eu@kde.org>\n"
"Language: eu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 24.08.0\n"
+"X-Generator: Lokalize 25.04.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#, kde-format
@@ -414,9 +414,9 @@
"<interface>Hamburger Menu</interface> button. Both contain mostly the same "
"commands and configuration options."
msgstr ""
-"Honek <emphasis>Menu-barra</emphasis> bat edo <interface>Hanburgesa-menu</"
-"interface> botoi baten artean trukatzen du. Biek dituzte, oro har komando "
-"eta konfiguratzeko aukera berdinak."
+"Honek <emphasis>Menu-barra</emphasis> bat edo <interface>Hanburger menu</"
+"interface> botoi bat izatearen artean trukatzen du. Biek dituzte, oro har "
+"komando eta konfiguratzeko aukera berdinak."
#: app/mainwindow.cpp:315
#, kde-format
diff -Nru ark-25.04.0/po/sk/ark.po ark-25.04.3/po/sk/ark.po
--- ark-25.04.0/po/sk/ark.po 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/po/sk/ark.po 2025-07-01 11:40:18.000000000 +0200
@@ -9,19 +9,20 @@
# Mthw <jari_45@hotmail.com>, 2019.
# Matej Mrenica <matejm98mthw@gmail.com>, 2019, 2020, 2021, 2022.
# Dušan Kazik <prescott66@gmail.com>, 2020.
+# SPDX-FileCopyrightText: 2025 Lucia Mrenica <lucia.mrenica@gmail.com>
msgid ""
msgstr ""
"Project-Id-Version: ark\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-03-06 00:44+0000\n"
-"PO-Revision-Date: 2023-12-06 19:15+0100\n"
-"Last-Translator: Roman Paholik <wizzardsk@gmail.com>\n"
-"Language-Team: Slovak <kde-sk@linux.sk>\n"
+"PO-Revision-Date: 2025-05-25 12:18+0200\n"
+"Last-Translator: Lucia Mrenica <lucia.mrenica@gmail.com>\n"
+"Language-Team: Slovak <kde-i18n-doc@kde.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 23.08.3\n"
+"X-Generator: Lokalize 25.04.1\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#, kde-format
@@ -124,20 +125,17 @@
msgstr "Komprimovať do..."
#: app/compressfileitemaction.cpp:105
-#, fuzzy, kde-format
-#| msgctxt "@action:inmenu Part of Compress submenu in Dolphin context menu"
-#| msgid "Compress to..."
+#, kde-format
msgctxt ""
"@action:inmenu Part of Compress submenu in Dolphin context menu, %1 filename"
msgid "Compress to \"%1\""
-msgstr "Komprimovať do..."
+msgstr "Komprimovať do \"%1\""
#: app/extractfileitemaction.cpp:66
-#, fuzzy, kde-format
-#| msgid "Extract"
+#, kde-format
msgctxt "@action:inmenu Part of Extract submenu in Dolphin context menu"
msgid "Extract to…"
-msgstr "Rozbaliť"
+msgstr "Rozbaliť do…"
#: app/extractfileitemaction.cpp:78
#, kde-format
@@ -146,11 +144,10 @@
msgstr "Rozbaliť sem"
#: app/extractfileitemaction.cpp:84
-#, fuzzy, kde-format
-#| msgid "Extract multiple archives"
+#, kde-format
msgctxt "@action:inmenu Part of Extract submenu in Dolphin context menu"
msgid "Extract here and delete archive"
-msgstr "Rozbaliť viacero archívov"
+msgstr "Rozbaliť sem a vymazať archív"
#: app/extractfileitemaction.cpp:91
#, kde-format
@@ -442,12 +439,9 @@
msgstr "Vitajte v %1"
#: app/welcomeview/welcomeview.cpp:55
-#, fuzzy, kde-format
-#| msgctxt "@title:window"
-#| msgid "Delete File"
-#| msgid_plural "Delete Files"
+#, kde-format
msgid "No recent files"
-msgstr "Vymazať súbor"
+msgstr "Žiadne nedávne súbory"
#: app/welcomeview/welcomeview.cpp:143
#, kde-format
@@ -522,7 +516,7 @@
#: app/welcomeview/welcomeview.ui:400
#, kde-format
msgid "Close Welcome Page"
-msgstr ""
+msgstr "Zatvoriť uvítaciu stránku"
#: kerfuffle/adddialog.cpp:32 kerfuffle/adddialog.cpp:70
#, kde-format
@@ -1677,7 +1671,7 @@
#, kde-format
msgctxt "open a file with external program"
msgid "&Open in External Application"
-msgstr ""
+msgstr "Otvoriť v externej aplikácií"
#: part/part.cpp:372
#, kde-format
@@ -1745,11 +1739,10 @@
msgstr "Kliknutím pridáte súbory do archívu"
#: part/part.cpp:412
-#, fuzzy, kde-format
-#| msgid "Compress to Archive"
+#, kde-format
msgctxt "@action"
msgid "Remove from Archive"
-msgstr "Komprimovať do archívu"
+msgstr "Odstrániť z archívu"
#: part/part.cpp:422
#, kde-format
@@ -2083,7 +2076,7 @@
#: plugins/cliarjplugin/cliplugin.cpp:321
#, kde-format
msgid "ARJ old"
-msgstr ""
+msgstr "ARJ starý"
#: plugins/cliarjplugin/cliplugin.cpp:322
#, kde-format
diff -Nru ark-25.04.0/po/zh_CN/ark.po ark-25.04.3/po/zh_CN/ark.po
--- ark-25.04.0/po/zh_CN/ark.po 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/po/zh_CN/ark.po 2025-07-01 11:40:18.000000000 +0200
@@ -572,7 +572,7 @@
#, kde-format
msgid ""
"Extract to a subfolder if the archive has more than one top-level entry."
-msgstr "如果压缩文件含多个顶层目录,将它们解压到子文件夹中。"
+msgstr "压缩文件有多个顶级目录时,解压到子文件夹中。"
#. i18n: ectx: label, entry (splitterSizes), group (MainWindow)
#: kerfuffle/ark.kcfg:41
@@ -954,25 +954,25 @@
#: kerfuffle/extractionsettingspage.ui:44
#, kde-format
msgid "Extract to a subfolder if the archive has more than one top-level entry"
-msgstr "如果压缩文件含多个顶层目录,将它们解压到子文件夹中。"
+msgstr "压缩文件有多个顶级目录时,解压到子文件夹中。"
#. i18n: ectx: property (text), widget (QLabel, label)
#: kerfuffle/generalsettingspage.ui:17
#, kde-format
msgid "When clicking a file in an archive or pressing the Return key:"
-msgstr "点击压缩文件中的文件或按下回车键时:"
+msgstr "点击压缩文件中的文件、或按下回车键时:"
#. i18n: ectx: property (text), widget (QRadioButton, radioButton)
#: kerfuffle/generalsettingspage.ui:33
#, kde-format
msgid "Pre&view the file with internal previewer"
-msgstr "预览 - 使用 Ark 的内建查看程序预览文件(&V)"
+msgstr "预览(使用内建查看器)(&V)"
#. i18n: ectx: property (text), widget (QRadioButton, radioButton_2)
#: kerfuffle/generalsettingspage.ui:43
#, kde-format
msgid "Open the fi&le with associated application"
-msgstr "打开 - 使用关联的应用程序打开文件(&L)"
+msgstr "打开(使用关联的外部程序)(&L)"
#. i18n: ectx: property (text), widget (QCheckBox, kcfg_showEncryptionWarning)
#: kerfuffle/generalsettingspage.ui:60
@@ -1102,7 +1102,7 @@
#: kerfuffle/previewsettingspage.ui:22
#, kde-format
msgid "Disable preview for files larger than:"
-msgstr "禁用预览 - 如果文件体积大于:"
+msgstr "允许预览的文件大小上限:"
#: kerfuffle/propertiesdialog.cpp:41
#, kde-format
@@ -1617,7 +1617,7 @@
#, kde-format
msgctxt "open a file with external program"
msgid "&Open in External Application"
-msgstr "使用外部应用程序打开(&O)"
+msgstr "打开选中项目(使用外部程序)(&O)"
#: part/part.cpp:372
#, kde-format
@@ -1685,7 +1685,7 @@
#, kde-format
msgctxt "@action"
msgid "Remove from Archive"
-msgstr "从压缩文件中移除"
+msgstr "移除选中项目"
#: part/part.cpp:422
#, kde-format
diff -Nru ark-25.04.0/snapcraft.yaml ark-25.04.3/snapcraft.yaml
--- ark-25.04.0/snapcraft.yaml 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/snapcraft.yaml 2025-07-01 11:40:18.000000000 +0200
@@ -20,6 +20,12 @@
- udisks2
- raw-usb
- mount-observe
+ - audio-playback
+ environment:
+ ALSA_CONFIG_PATH: "$SNAP/kf6/etc/asound.conf"
+layout:
+ /usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib:
+ bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib
slots:
session-dbus-interface:
interface: dbus
@@ -37,6 +43,7 @@
- libzip-dev
- pkg-config
- zlib1g-dev
+ - libpulse0
stage-packages:
- bzip2
- p7zip-full
@@ -47,26 +54,18 @@
- libarchive13
- libzip4
- zlib1g
+ - libpulse0
+ - libasound2
+ - libasound2-plugins
+ - libasound2-data
source: .
source-type: local
cmake-parameters:
- -DCMAKE_INSTALL_PREFIX=/usr
- -DCMAKE_BUILD_TYPE=Release
- -DQT_MAJOR_VERSION=6
- - -DBUILD_WITH_QT6=ON
- -DBUILD_TESTING=OFF
- - -DCMAKE_INSTALL_SYSCONFDIR=/etc
- - -DCMAKE_INSTALL_LOCALSTATEDIR=/var
- - -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON
- - -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF
- - -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON
- - -DCMAKE_INSTALL_RUNSTATEDIR=/run
- - -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON
- - -DCMAKE_VERBOSE_MAKEFILE=ON
- - -DCMAKE_INSTALL_LIBDIR=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- - --log-level=STATUS
- - -DCMAKE_LIBRARY_PATH=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- build-environment: &build-environment
+ build-environment:
- LD_LIBRARY_PATH: "/snap/mesa-2404/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy:$LD_LIBRARY_PATH"
prime:
- -usr/lib/*/cmake/*
diff -ur '--exclude=po' ark-25.04.0/app/compressfileitemaction.cpp ark-25.04.3/app/compressfileitemaction.cpp
--- ark-25.04.0/app/compressfileitemaction.cpp 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/app/compressfileitemaction.cpp 2025-07-01 11:40:18.000000000 +0200
@@ -76,7 +76,7 @@
if (compressMenuAction->isEnabled()) {
const KFileItemList items = fileItemInfos.items();
const KFileItem &first = items.first();
- auto *job = KIO::stat(first.url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash));
+ auto *job = KIO::stat(first.url().adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash), KIO::HideProgressInfo);
connect(job, &KJob::result, compressMenu, [actionsToBeDisabledInReadOnlyDir, job]() {
if (!job->error() && !KFileItem(job->statResult(), job->url()).isWritable()) {
for (auto action : actionsToBeDisabledInReadOnlyDir) {
diff -ur '--exclude=po' ark-25.04.0/app/org.kde.ark.appdata.xml ark-25.04.3/app/org.kde.ark.appdata.xml
--- ark-25.04.0/app/org.kde.ark.appdata.xml 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/app/org.kde.ark.appdata.xml 2025-07-01 11:40:18.000000000 +0200
@@ -418,6 +418,9 @@
<binary>ark</binary>
</provides>
<releases>
+ <release version="25.04.3" date="2025-07-03"/>
+ <release version="25.04.2" date="2025-06-05"/>
+ <release version="25.04.1" date="2025-05-08"/>
<release version="25.04.0" date="2025-04-17"/>
<release version="24.12.3" date="2025-03-06"/>
<release version="24.12.2" date="2025-02-06"/>
diff -ur '--exclude=po' ark-25.04.0/CMakeLists.txt ark-25.04.3/CMakeLists.txt
--- ark-25.04.0/CMakeLists.txt 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/CMakeLists.txt 2025-07-01 11:40:18.000000000 +0200
@@ -3,7 +3,7 @@
# KDE Application Version, managed by release script
set (RELEASE_SERVICE_VERSION_MAJOR "25")
set (RELEASE_SERVICE_VERSION_MINOR "04")
-set (RELEASE_SERVICE_VERSION_MICRO "0")
+set (RELEASE_SERVICE_VERSION_MICRO "3")
set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(ark VERSION ${RELEASE_SERVICE_VERSION})
diff -ur '--exclude=po' ark-25.04.0/debian/changelog ark-25.04.3/debian/changelog
--- ark-25.04.0/debian/changelog 2025-04-17 18:40:17.000000000 +0200
+++ ark-25.04.3/debian/changelog 2025-07-18 15:34:31.000000000 +0200
@@ -1,3 +1,14 @@
+ark (4:25.04.3-1) unstable; urgency=medium
+
+ [ Aurélien COUDERC ]
+ * New upstream release (25.04.3).
+ - CompressFileItemAction: stat without progress info.
+ * Backport upstream commits:
+ - Fix file sorting order not matching Dolphin’s. [55b6d6e6] (kde#387969)
+ - Fix corner case of single-threaded CPU getting 0 thread. [1435ccd4]
+
+ -- Aurélien COUDERC <coucouf@debian.org> Fri, 18 Jul 2025 15:34:31 +0200
+
ark (4:25.04.0-1) unstable; urgency=medium
[ Aurélien COUDERC ]
Seulement dans ark-25.04.3/debian: patches
diff -ur '--exclude=po' ark-25.04.0/part/archivesortfiltermodel.cpp ark-25.04.3/part/archivesortfiltermodel.cpp
--- ark-25.04.0/part/archivesortfiltermodel.cpp 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/part/archivesortfiltermodel.cpp 2025-07-20 18:49:17.000000000 +0200
@@ -10,11 +10,48 @@
using namespace Kerfuffle;
+namespace
+{
+/**
+ * Performs a natural string comparison.
+ * This function compares strings in a way that is similar to natural human sorting order.
+ * It is adapted from the Dolphin KFileItemModel::stringCompare implementation.
+ *
+ * @note Consider refactoring this logic to a framework-level utility
+ * for improved maintainability and reusability across multiple projects.
+ *
+ * @return Integer less than, equal to, or greater than zero if the first argument is
+ * found, respectively, to be less than, to match, or be greater than the second.
+ */
+int naturalStringCompare(const QString &a, const QString &b, const QCollator &collator)
+{
+ // Split extension, taking into account it can be empty
+ constexpr QString::SectionFlags flags = QString::SectionSkipEmpty | QString::SectionIncludeLeadingSep;
+
+ // Sort by baseName first
+ const QString aBaseName = a.section(QLatin1Char('.'), 0, 0, flags);
+ const QString bBaseName = b.section(QLatin1Char('.'), 0, 0, flags);
+
+ const int res = collator.compare(aBaseName, bBaseName);
+ if (res != 0 || (aBaseName.length() == a.length() && bBaseName.length() == b.length())) {
+ return res;
+ }
+
+ // sliced() has undefined behavior when pos < 0 or pos > size().
+ Q_ASSERT(aBaseName.length() <= a.length() && aBaseName.length() >= 0);
+ Q_ASSERT(bBaseName.length() <= b.length() && bBaseName.length() >= 0);
+
+ // baseNames were equal, sort by extension
+ return collator.compare(a.sliced(aBaseName.length()), b.sliced(bBaseName.length()));
+}
+}
+
ArchiveSortFilterModel::ArchiveSortFilterModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
// always enable recursive fitlering
setRecursiveFilteringEnabled(true);
+ m_collator.setNumericMode(true);
}
ArchiveSortFilterModel::~ArchiveSortFilterModel()
@@ -36,6 +73,11 @@
return false;
} else {
switch (col) {
+ case DisplayName: {
+ const auto leftFullName = left->property(property.constData()).toString();
+ const auto rightFullName = right->property(property.constData()).toString();
+ return naturalStringCompare(leftFullName, rightFullName, m_collator) < 0;
+ }
case Size:
case CompressedSize:
if (left->property(property.constData()).toULongLong() < right->property(property.constData()).toULongLong()) {
diff -ur '--exclude=po' ark-25.04.0/part/archivesortfiltermodel.h ark-25.04.3/part/archivesortfiltermodel.h
--- ark-25.04.0/part/archivesortfiltermodel.h 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/part/archivesortfiltermodel.h 2025-07-20 18:49:17.000000000 +0200
@@ -6,6 +6,7 @@
#ifndef ARCHIVESORTFILTERMODEL_H
#define ARCHIVESORTFILTERMODEL_H
+#include <QCollator>
#include <QSortFilterProxyModel>
class ArchiveSortFilterModel : public QSortFilterProxyModel
@@ -17,6 +18,9 @@
~ArchiveSortFilterModel() override;
bool lessThan(const QModelIndex &leftIndex, const QModelIndex &rightIndex) const override;
+
+private:
+ QCollator m_collator;
};
#endif // ARCHIVESORTFILTERMODEL_H
diff -ur '--exclude=po' ark-25.04.0/.pc/applied-patches ark-25.04.3/.pc/applied-patches
--- ark-25.04.0/.pc/applied-patches 2025-07-20 18:49:17.015831681 +0200
+++ ark-25.04.3/.pc/applied-patches 2025-07-20 18:49:17.359828335 +0200
@@ -0,0 +1,2 @@
+upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch
+upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch
Seulement dans ark-25.04.3/.pc: upstream_1435ccd4_Fix-corner-case-of-single-threaded-CPU-when-calculating-number-of-threads.patch
Seulement dans ark-25.04.3/.pc: upstream_55b6d6e6_Implement-Dolphin-style-natural-string-sorting.patch
diff -ur '--exclude=po' ark-25.04.0/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake ark-25.04.3/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake
--- ark-25.04.0/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/plugins/cliarjplugin/kerfuffle_cliarj.json.cmake 2025-07-01 11:40:18.000000000 +0200
@@ -39,6 +39,7 @@
"Description[ro]": "Suport deplin pentru formatul de arhivă ARJ",
"Description[ru]": "Полная поддержка архивов ARJ",
"Description[sa]": "एआरजे संग्रहस्वरूपेषु पूर्णसमर्थनम्",
+ "Description[sk]": "Úplná podpora archívnych formátov ARJ",
"Description[sl]": "Polna podpora za arhive vrste ARJ",
"Description[sv]": "Fullt stöd för ARJ arkivformat",
"Description[tr]": "ARJ arşiv biçimi için tam destek",
diff -ur '--exclude=po' ark-25.04.0/plugins/libarchive/readwritelibarchiveplugin.cpp ark-25.04.3/plugins/libarchive/readwritelibarchiveplugin.cpp
--- ark-25.04.0/plugins/libarchive/readwritelibarchiveplugin.cpp 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/plugins/libarchive/readwritelibarchiveplugin.cpp 2025-07-20 18:49:17.000000000 +0200
@@ -302,7 +302,7 @@
{
int ret;
bool requiresExecutable = false;
- const auto threads = std::to_string(static_cast<unsigned>(std::thread::hardware_concurrency() * 0.8));
+ const auto threads = std::to_string(std::max(1u, static_cast<unsigned>(std::thread::hardware_concurrency() * 0.8)));
const bool is7zFile = filename().right(2).toUpper() == QLatin1String("7Z");
if (is7zFile) {
diff -ur '--exclude=po' ark-25.04.0/snapcraft.yaml ark-25.04.3/snapcraft.yaml
--- ark-25.04.0/snapcraft.yaml 2025-04-07 23:07:48.000000000 +0200
+++ ark-25.04.3/snapcraft.yaml 2025-07-01 11:40:18.000000000 +0200
@@ -20,6 +20,12 @@
- udisks2
- raw-usb
- mount-observe
+ - audio-playback
+ environment:
+ ALSA_CONFIG_PATH: "$SNAP/kf6/etc/asound.conf"
+layout:
+ /usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib:
+ bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib
slots:
session-dbus-interface:
interface: dbus
@@ -37,6 +43,7 @@
- libzip-dev
- pkg-config
- zlib1g-dev
+ - libpulse0
stage-packages:
- bzip2
- p7zip-full
@@ -47,26 +54,18 @@
- libarchive13
- libzip4
- zlib1g
+ - libpulse0
+ - libasound2
+ - libasound2-plugins
+ - libasound2-data
source: .
source-type: local
cmake-parameters:
- -DCMAKE_INSTALL_PREFIX=/usr
- -DCMAKE_BUILD_TYPE=Release
- -DQT_MAJOR_VERSION=6
- - -DBUILD_WITH_QT6=ON
- -DBUILD_TESTING=OFF
- - -DCMAKE_INSTALL_SYSCONFDIR=/etc
- - -DCMAKE_INSTALL_LOCALSTATEDIR=/var
- - -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON
- - -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF
- - -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON
- - -DCMAKE_INSTALL_RUNSTATEDIR=/run
- - -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON
- - -DCMAKE_VERBOSE_MAKEFILE=ON
- - -DCMAKE_INSTALL_LIBDIR=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- - --log-level=STATUS
- - -DCMAKE_LIBRARY_PATH=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR
- build-environment: &build-environment
+ build-environment:
- LD_LIBRARY_PATH: "/snap/mesa-2404/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy:$LD_LIBRARY_PATH"
prime:
- -usr/lib/*/cmake/*
Reply to: