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/*