Package: release.debian.org
Severity: normal
X-Debbugs-Cc: a...@packages.debian.org, Debian Qt/KDE Maintainers 
<debian-qt-...@lists.debian.org>
Control: affects -1 + src:ark
User: release.debian....@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 <couc...@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 <integ...@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 <vladkache...@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 <vice...@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 <ecua...@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 <ecua...@eloihr.net>\n"
 "Language-Team: Spanish <kde-l10n...@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 
<xa...@ni.eus>
+# SPDX-FileCopyrightText: 2023, 2024, 2025 KDE euskaratzeko proiektuko 
arduraduna <xa...@ni.eus>
 #
 # Translators:
 # Marcos  <marcos...@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 <xa...@ni.eus>\n"
 "Language-Team: Basque <kde-i18n...@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...@hotmail.com>, 2019.
 # Matej Mrenica <matejm98m...@gmail.com>, 2019, 2020, 2021, 2022.
 # Dušan Kazik <prescot...@gmail.com>, 2020.
+# SPDX-FileCopyrightText: 2025 Lucia Mrenica <lucia.mren...@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 <wizzar...@gmail.com>\n"
-"Language-Team: Slovak <kde...@linux.sk>\n"
+"PO-Revision-Date: 2025-05-25 12:18+0200\n"
+"Last-Translator: Lucia Mrenica <lucia.mren...@gmail.com>\n"
+"Language-Team: Slovak <kde-i18n-...@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 <couc...@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 via email to