Hello community, here is the log from the commit of package kcoreaddons for openSUSE:Factory checked in at 2019-06-22 11:09:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kcoreaddons (Old) and /work/SRC/openSUSE:Factory/.kcoreaddons.new.4615 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kcoreaddons" Sat Jun 22 11:09:05 2019 rev:70 rq:710726 version:5.59.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kcoreaddons/kcoreaddons.changes 2019-05-21 10:26:10.215534199 +0200 +++ /work/SRC/openSUSE:Factory/.kcoreaddons.new.4615/kcoreaddons.changes 2019-06-22 11:10:13.640412092 +0200 @@ -1,0 +2,14 @@ +Sun Jun 09 07:35:11 UTC 2019 - [email protected] + +- Update to 5.59.0 + * New feature release + * For more details please see: + * https://www.kde.org/announcements/kde-frameworks-5.59.0.php +- Changes since 5.58.0: + * Fix compliation for python bindings (kde#407306) + * Avoid method name clash in windows KProcessList backend + * Add namespace to windows kprocesslist clas + * Fix windows KProcessList return type + * Add GetProcessList for retrieving the list of currently active processes + +------------------------------------------------------------------- Old: ---- kcoreaddons-5.58.0.tar.xz New: ---- kcoreaddons-5.59.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kcoreaddons.spec ++++++ --- /var/tmp/diff_new_pack.fiPE1D/_old 2019-06-22 11:10:15.384414662 +0200 +++ /var/tmp/diff_new_pack.fiPE1D/_new 2019-06-22 11:10:15.416414709 +0200 @@ -17,14 +17,14 @@ %define lname libKF5CoreAddons5 -%define _tar_path 5.58 +%define _tar_path 5.59 # Full KF5 version (e.g. 5.33.0) %{!?_kf5_version: %global _kf5_version %{version}} # Last major and minor KF5 version (e.g. 5.33) %{!?_kf5_bugfix_version: %define _kf5_bugfix_version %(echo %{_kf5_version} | awk -F. '{print $1"."$2}')} %bcond_without lang Name: kcoreaddons -Version: 5.58.0 +Version: 5.59.0 Release: 0 Summary: Utilities for core application functionality and accessing the OS License: LGPL-2.1-or-later ++++++ kcoreaddons-5.58.0.tar.xz -> kcoreaddons-5.59.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/CMakeLists.txt new/kcoreaddons-5.59.0/CMakeLists.txt --- old/kcoreaddons-5.58.0/CMakeLists.txt 2019-05-08 10:27:20.000000000 +0200 +++ new/kcoreaddons-5.59.0/CMakeLists.txt 2019-06-01 18:53:54.000000000 +0200 @@ -1,10 +1,10 @@ cmake_minimum_required(VERSION 3.5) -set(KF5_VERSION "5.58.0") # handled by release scripts +set(KF5_VERSION "5.59.0") # handled by release scripts project(KCoreAddons VERSION ${KF5_VERSION}) include(FeatureSummary) -find_package(ECM 5.58.0 NO_MODULE) +find_package(ECM 5.59.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/autotests/CMakeLists.txt new/kcoreaddons-5.59.0/autotests/CMakeLists.txt --- old/kcoreaddons-5.58.0/autotests/CMakeLists.txt 2019-05-08 10:27:20.000000000 +0200 +++ new/kcoreaddons-5.59.0/autotests/CMakeLists.txt 2019-06-01 18:53:54.000000000 +0200 @@ -49,6 +49,7 @@ kusertest.cpp kdelibs4migrationtest.cpp kdelibs4configmigratortest.cpp + kprocesslisttest.cpp LINK_LIBRARIES Qt5::Test KF5::CoreAddons ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/autotests/kprocesslisttest.cpp new/kcoreaddons-5.59.0/autotests/kprocesslisttest.cpp --- old/kcoreaddons-5.58.0/autotests/kprocesslisttest.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/autotests/kprocesslisttest.cpp 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,94 @@ +/* + * This file is part of the KDE project + * Copyright (C) 2019 David Hallas <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "kprocesslisttest.h" +#include "kprocesslist.h" +#include "kuser.h" +#include <QCoreApplication> +#include <QTest> +#include <algorithm> + +namespace { + +QString getTestExeName() +{ + static QString testExeName = QCoreApplication::instance()->applicationFilePath().section(QLatin1Char('/'), -1); + return testExeName; +} + +} + +QTEST_MAIN(KProcessListTest) + +void KProcessListTest::testKProcessInfoConstructionAssignment() +{ + KProcessList::KProcessInfo processInfoDefaultConstructed; + QVERIFY(processInfoDefaultConstructed.isValid() == false); + const qint64 pid(42); + const QString name(QStringLiteral("/bin/some_exe")); + const QString user(QStringLiteral("some_user")); + KProcessList::KProcessInfo processInfo(pid, name, user); + QVERIFY(processInfo.isValid() == true); + QCOMPARE(processInfo.pid(), pid); + QCOMPARE(processInfo.name(), name); + QCOMPARE(processInfo.user(), user); + KProcessList::KProcessInfo processInfoCopy(processInfo); + QVERIFY(processInfoCopy.isValid() == true); + QCOMPARE(processInfoCopy.pid(), pid); + QCOMPARE(processInfoCopy.name(), name); + QCOMPARE(processInfoCopy.user(), user); + KProcessList::KProcessInfo processInfoAssignment; + processInfoAssignment = processInfo; + QVERIFY(processInfoAssignment.isValid() == true); + QCOMPARE(processInfoAssignment.pid(), pid); + QCOMPARE(processInfoAssignment.name(), name); + QCOMPARE(processInfoAssignment.user(), user); +} + +void KProcessListTest::testProcessInfoList() +{ + KProcessList::KProcessInfoList processInfoList = KProcessList::processInfoList(); + QVERIFY(processInfoList.empty() == false); + auto testProcessIterator = std::find_if(processInfoList.begin(), processInfoList.end(), [](const KProcessList::KProcessInfo& info) + { + return info.name().endsWith(QStringLiteral("/") + getTestExeName()); + }); + QVERIFY(testProcessIterator != processInfoList.end()); + const auto& processInfo = *testProcessIterator; + QVERIFY(processInfo.isValid() == true); + QVERIFY(processInfo.name().endsWith(QStringLiteral("/") + getTestExeName())); + QCOMPARE(processInfo.pid(), QCoreApplication::applicationPid()); + QCOMPARE(processInfo.user(), KUser().loginName()); +} + +void KProcessListTest::testProcessInfo() +{ + const qint64 testExePid = QCoreApplication::applicationPid(); + KProcessList::KProcessInfo processInfo = KProcessList::processInfo(testExePid); + QVERIFY(processInfo.isValid() == true); + QVERIFY(processInfo.name().endsWith(QStringLiteral("/") + getTestExeName())); + QCOMPARE(processInfo.pid(), testExePid); + QCOMPARE(processInfo.user(), KUser().loginName()); +} + +void KProcessListTest::testProcessInfoNotFound() +{ + KProcessList::KProcessInfo processInfo = KProcessList::processInfo(-1); + QVERIFY(processInfo.isValid() == false); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/autotests/kprocesslisttest.h new/kcoreaddons-5.59.0/autotests/kprocesslisttest.h --- old/kcoreaddons-5.58.0/autotests/kprocesslisttest.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/autotests/kprocesslisttest.h 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,36 @@ +/* + * This file is part of the KDE project + * Copyright (C) 2019 David Hallas <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KPROCESSLISTTEST_H +#define KPROCESSLISTTEST_H + +#include <QObject> + +class KProcessListTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void testKProcessInfoConstructionAssignment(); + void testProcessInfoList(); + void testProcessInfo(); + void testProcessInfoNotFound(); +}; + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/po/da/kcoreaddons5_qt.po new/kcoreaddons-5.59.0/po/da/kcoreaddons5_qt.po --- old/kcoreaddons-5.58.0/po/da/kcoreaddons5_qt.po 2019-05-08 10:27:20.000000000 +0200 +++ new/kcoreaddons-5.59.0/po/da/kcoreaddons5_qt.po 2019-06-01 18:53:54.000000000 +0200 @@ -2,14 +2,14 @@ # Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # -# Martin Schlander <[email protected]>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Martin Schlander <[email protected]>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019. # Keld Simonsen <[email protected]>, 2010. msgid "" msgstr "" "Project-Id-Version: kdelibs4\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2014-03-23 01:50+0000\n" -"PO-Revision-Date: 2018-07-18 21:03+0100\n" +"PO-Revision-Date: 2019-05-07 12:07+0100\n" "Last-Translator: Martin Schlander <[email protected]>\n" "Language-Team: Danish <[email protected]>\n" "Language: da\n" @@ -192,172 +192,142 @@ #: lib/util/kformatprivate.cpp:116 msgctxt "KFormat|SI prefix for 10^⁻24" msgid "y" -msgstr "" +msgstr "y" #: lib/util/kformatprivate.cpp:117 msgctxt "KFormat|SI prefix for 10^⁻21" msgid "z" -msgstr "" +msgstr "z" #: lib/util/kformatprivate.cpp:118 -#, fuzzy -#| msgid "am" msgctxt "KFormat|SI prefix for 10^⁻18" msgid "a" -msgstr "am" +msgstr "a" #: lib/util/kformatprivate.cpp:119 msgctxt "KFormat|SI prefix for 10^⁻15" msgid "f" -msgstr "" +msgstr "f" #: lib/util/kformatprivate.cpp:120 -#, fuzzy -#| msgid "pm" msgctxt "KFormat|SI prefix for 10^⁻12" msgid "p" -msgstr "pm" +msgstr "p" #: lib/util/kformatprivate.cpp:121 msgctxt "KFormat|SI prefix for 10^⁻9" msgid "n" -msgstr "" +msgstr "n" #: lib/util/kformatprivate.cpp:122 msgctxt "KFormat|SI prefix for 10^⁻6" msgid "µ" -msgstr "" +msgstr "µ" #: lib/util/kformatprivate.cpp:123 -#, fuzzy -#| msgid "am" msgctxt "KFormat|SI prefix for 10^⁻3" msgid "m" -msgstr "am" +msgstr "m" #: lib/util/kformatprivate.cpp:125 msgctxt "KFormat|SI prefix for 10^3" msgid "k" -msgstr "" +msgstr "k" #: lib/util/kformatprivate.cpp:125 -#, fuzzy -#| msgctxt "Coptic month 4 - ShortName" -#| msgid "Kia" msgctxt "KFormat|IEC binary prefix for 2^10" msgid "Ki" -msgstr "Kia" +msgstr "Ki" #: lib/util/kformatprivate.cpp:126 -#, fuzzy -#| msgctxt "Before Noon KLocale::ShortName" -#| msgid "AM" msgctxt "KFormat|SI prefix for 10^6" msgid "M" -msgstr "AM" +msgstr "M" #: lib/util/kformatprivate.cpp:126 -#, fuzzy -#| msgctxt "Ethiopian month 8 - ShortName" -#| msgid "Miy" msgctxt "KFormat|IEC binary prefix for 2^20" msgid "Mi" -msgstr "Miy" +msgstr "Mi" #: lib/util/kformatprivate.cpp:127 msgctxt "KFormat|SI prefix for 10^9" msgid "G" -msgstr "" +msgstr "G" #: lib/util/kformatprivate.cpp:127 msgctxt "KFormat|IEC binary prefix for 2^30" msgid "Gi" -msgstr "" +msgstr "Gi" #: lib/util/kformatprivate.cpp:128 msgctxt "KFormat|SI prefix for 10^12" msgid "T" -msgstr "" +msgstr "T" #: lib/util/kformatprivate.cpp:128 -#, fuzzy -#| msgctxt "Tir short" -#| msgid "Tir" msgctxt "KFormat|IEC binary prefix for 2^40" msgid "Ti" -msgstr "Tir" +msgstr "Ti" #: lib/util/kformatprivate.cpp:129 -#, fuzzy -#| msgctxt "After Noon KLocale::NarrowName" -#| msgid "P" msgctxt "KFormat|SI prefix for 10^15" msgid "P" msgstr "P" #: lib/util/kformatprivate.cpp:129 -#, fuzzy -#| msgctxt "Coptic weekday 4 - ShortDayName" -#| msgid "Pti" msgctxt "KFormat|IEC binary prefix for 2^50" msgid "Pi" -msgstr "Pti" +msgstr "Pi" #: lib/util/kformatprivate.cpp:130 msgctxt "KFormat|SI prefix for 10^18" msgid "E" -msgstr "" +msgstr "E" #: lib/util/kformatprivate.cpp:130 -#, fuzzy -#| msgid "Edit" msgctxt "KFormat|IEC binary prefix for 2^60" msgid "Ei" -msgstr "Redigér" +msgstr "Ei" #: lib/util/kformatprivate.cpp:131 msgctxt "KFormat|SI prefix for 10^21" msgid "Z" -msgstr "" +msgstr "Z" #: lib/util/kformatprivate.cpp:131 msgctxt "KFormat|IEC binary prefix for 2^70" msgid "Zi" -msgstr "" +msgstr "Zi" #: lib/util/kformatprivate.cpp:132 msgctxt "KFormat|SI prefix for 10^24" msgid "Y" -msgstr "" +msgstr "Y" #: lib/util/kformatprivate.cpp:132 msgctxt "KFormat|IEC binary prefix for 2^80" msgid "Yi" -msgstr "" +msgstr "Yi" #: lib/util/kformatprivate.cpp:140 -#, fuzzy -#| msgid "Submit" msgctxt "KFormat|Symbol of binary digit" msgid "bit" -msgstr "Indsend" +msgstr "bit" #: lib/util/kformatprivate.cpp:143 msgctxt "KFormat|Symbol of byte" msgid "B" -msgstr "" +msgstr "B" #: lib/util/kformatprivate.cpp:146 -#, fuzzy -#| msgid "am" msgctxt "KFormat|Symbol of meter" msgid "m" -msgstr "am" +msgstr "m" #: lib/util/kformatprivate.cpp:149 msgctxt "KFormat|Symbol of hertz" msgid "Hz" -msgstr "" +msgstr "Hz" #. value without prefix, format "<val> <unit>" #: lib/util/kformatprivate.cpp:158 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/po/ja/kcoreaddons5_qt.po new/kcoreaddons-5.59.0/po/ja/kcoreaddons5_qt.po --- old/kcoreaddons-5.58.0/po/ja/kcoreaddons5_qt.po 2019-05-08 10:27:20.000000000 +0200 +++ new/kcoreaddons-5.59.0/po/ja/kcoreaddons5_qt.po 2019-06-01 18:53:54.000000000 +0200 @@ -7,15 +7,16 @@ # AWASHIRO Ikuya <[email protected]>, 2004. # Shinichi Tsunoda <[email protected]>, 2005. # Yukiko Bando <[email protected]>, 2006, 2007, 2008, 2009, 2010. -# Fumiaki Okushi <[email protected]>, 2006, 2007, 2008, 2010, 2011. +# Tomohiro Hyakutake <[email protected]>, 2019. +# Fumiaki Okushi <[email protected]>, 2006, 2007, 2008, 2010, 2011, 2019. # msgid "" msgstr "" "Project-Id-Version: kdelibs4\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2014-03-23 01:50+0000\n" -"PO-Revision-Date: 2011-08-27 14:05-0700\n" -"Last-Translator: Fumiaki Okushi <[email protected]>\n" +"PO-Revision-Date: 2019-05-11 16:53-0700\n" +"Last-Translator: Fumiaki Okushi <[email protected]>\n" "Language-Team: Japanese <[email protected]>\n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -24,7 +25,7 @@ "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Accelerator-Marker: &\n" "X-Text-Markup: qtrich\n" -"X-Generator: Lokalize 1.1\n" +"X-Generator: Lokalize 19.04.0\n" "X-Qt-Contexts: true\n" #: lib/kaboutdata.cpp:296 @@ -178,29 +179,16 @@ msgstr "GNU Lesser General Public License Version 2" #: lib/kaboutdata.cpp:385 -#, fuzzy -#| msgctxt "@item license" -#| msgid "Custom" msgctxt "KAboutLicense|@item license" msgid "Custom" msgstr "カスタム" #: lib/kaboutdata.cpp:388 -#, fuzzy -#| msgctxt "@item license" -#| msgid "Not specified" msgctxt "KAboutLicense|@item license" msgid "Not specified" msgstr "指定なし" #: lib/kaboutdata.cpp:937 -#, fuzzy -#| msgctxt "replace this with information about your translation team" -#| msgid "" -#| "<p>KDE is translated into many languages thanks to the work of the " -#| "translation teams all over the world.</p><p>For more information on KDE " -#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n." -#| "kde.org</a></p>" msgctxt "KAboutData|replace this with information about your translation team" msgid "" "<p>KDE is translated into many languages thanks to the work of the " @@ -209,8 +197,8 @@ "org</a></p>" msgstr "" "<html><p>KDE は世界中の翻訳チームの手によってさまざまな言語に翻訳されていま" -"す。</p><p>KDE の国際化対応の詳細については <link>http://l10n.kde.org</link> " -"をご覧ください。</p></html>" +"す。</p><p>KDE の国際化対応の詳細については <a href=\"http://l10n.kde.org" +"\">http://l10n.kde.org</a> をご覧ください。</p></html>" #: lib/kaboutdata.cpp:1168 #, fuzzy @@ -220,8 +208,6 @@ msgstr "著作者情報" #: lib/kaboutdata.cpp:1169 -#, fuzzy -#| msgid "Show license information" msgctxt "KAboutData CLI|" msgid "Show license information." msgstr "ライセンス情報を表示" @@ -234,12 +220,9 @@ #: lib/kaboutdata.cpp:1172 msgctxt "KAboutData CLI|" msgid "file name" -msgstr "" +msgstr "ファイル名" #: lib/kaboutdata.cpp:1181 -#, fuzzy -#| msgid "" -#| "This application was written by somebody who wants to remain anonymous." msgctxt "KAboutData CLI|" msgid "This application was written by somebody who wants to remain anonymous." msgstr "このアプリケーションは匿名でありたい誰かによって書かれました。" @@ -259,13 +242,13 @@ #: lib/kaboutdata.cpp:1194 msgctxt "KAboutData CLI|" msgid "Please use https://bugs.kde.org to report bugs." -msgstr "" +msgstr "バグは http://bugs.kde.org へ報告してください。" #: lib/kaboutdata.cpp:1196 #, qt-format msgctxt "KAboutData CLI|" msgid "Please report bugs to %1." -msgstr "" +msgstr "バグは %1 へ報告してください。" #: lib/plugin/kpluginloader.cpp:122 #, fuzzy, qt-format @@ -738,95 +721,76 @@ #. @item:intext %1 is a real number, e.g. 1.23 days #: lib/util/kformatprivate.cpp:414 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days" -#| msgid "%1 days" +#, qt-format msgctxt "KFormat|" msgid "%1 days" msgstr "%1 日" #. @item:intext %1 is a real number, e.g. 1.23 hours #: lib/util/kformatprivate.cpp:417 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours" -#| msgid "%1 hours" +#, qt-format msgctxt "KFormat|" msgid "%1 hours" msgstr "%1 時間" #. @item:intext %1 is a real number, e.g. 1.23 minutes #: lib/util/kformatprivate.cpp:420 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes" -#| msgid "%1 minutes" +#, qt-format msgctxt "KFormat|" msgid "%1 minutes" msgstr "%1 分" #. @item:intext %1 is a real number, e.g. 1.23 seconds #: lib/util/kformatprivate.cpp:423 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds" -#| msgid "%1 seconds" +#, qt-format msgctxt "KFormat|" msgid "%1 seconds" msgstr "%1 秒" #. @item:intext %1 is a whole number #: lib/util/kformatprivate.cpp:428 -#, fuzzy, qt-format -#| msgctxt "@item:intext" -#| msgid "%1 millisecond" -#| msgid_plural "%1 milliseconds" +#, qt-format msgctxt "KFormat|" msgid "%n millisecond(s)" msgid_plural "%n millisecond(s)" -msgstr[0] "%1 ミリ秒" -msgstr[1] "%1 ミリ秒" +msgstr[0] "%n ミリ秒" +msgstr[1] "%n ミリ秒" #. @item:intext %n is a whole number #: lib/util/kformatprivate.cpp:446 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days" -#| msgid "%1 days" +#, qt-format msgctxt "KFormat|" msgid "%n day(s)" msgid_plural "%n day(s)" -msgstr[0] "%1 日" -msgstr[1] "%1 日" +msgstr[0] "%n 日" +msgstr[1] "%n 日" #. @item:intext %n is a whole number #: lib/util/kformatprivate.cpp:451 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours" -#| msgid "%1 hours" +#, qt-format msgctxt "KFormat|" msgid "%n hour(s)" msgid_plural "%n hour(s)" -msgstr[0] "%1 時間" -msgstr[1] "%1 時間" +msgstr[0] "%n 時間" +msgstr[1] "%n 時間" #. @item:intext %n is a whole number #: lib/util/kformatprivate.cpp:456 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes" -#| msgid "%1 minutes" +#, qt-format msgctxt "KFormat|" msgid "%n minute(s)" msgid_plural "%n minute(s)" -msgstr[0] "%1 分" -msgstr[1] "%1 分" +msgstr[0] "%n 分" +msgstr[1] "%n 分" #. @item:intext %n is a whole number #: lib/util/kformatprivate.cpp:461 -#, fuzzy, qt-format -#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds" -#| msgid "%1 seconds" +#, qt-format msgctxt "KFormat|" msgid "%n second(s)" msgid_plural "%n second(s)" -msgstr[0] "%1 秒" -msgstr[1] "%1 秒" +msgstr[0] "%n 秒" +msgstr[1] "%n 秒" #. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem #. ---------- @@ -853,23 +817,16 @@ msgstr "" #: lib/util/kformatprivate.cpp:519 -#, fuzzy -#| msgctxt "@option tomorrow" -#| msgid "Tomorrow" msgctxt "KFormat|" msgid "Tomorrow" msgstr "明日" #: lib/util/kformatprivate.cpp:521 -#, fuzzy -#| msgid "Today" msgctxt "KFormat|" msgid "Today" msgstr "今日" #: lib/util/kformatprivate.cpp:523 -#, fuzzy -#| msgid "Yesterday" msgctxt "KFormat|" msgid "Yesterday" msgstr "昨日" @@ -877,72 +834,72 @@ #: lib/util/kformatprivate.cpp:529 msgctxt "KFormat|most recent such day before today" msgid "Last Monday" -msgstr "" +msgstr "月曜日" #: lib/util/kformatprivate.cpp:531 msgctxt "KFormat|most recent such day before today" msgid "Last Tuesday" -msgstr "" +msgstr "火曜日" #: lib/util/kformatprivate.cpp:533 msgctxt "KFormat|most recent such day before today" msgid "Last Wednesday" -msgstr "" +msgstr "水曜日" #: lib/util/kformatprivate.cpp:535 msgctxt "KFormat|most recent such day before today" msgid "Last Thursday" -msgstr "" +msgstr "木曜日" #: lib/util/kformatprivate.cpp:537 msgctxt "KFormat|most recent such day before today" msgid "Last Friday" -msgstr "" +msgstr "金曜日" #: lib/util/kformatprivate.cpp:539 msgctxt "KFormat|most recent such day before today" msgid "Last Saturday" -msgstr "" +msgstr "土曜日" #: lib/util/kformatprivate.cpp:541 msgctxt "KFormat|most recent such day before today" msgid "Last Sunday" -msgstr "" +msgstr "日曜日" #: lib/util/kformatprivate.cpp:546 msgctxt "KFormat|the next such day after today" msgid "Next Monday" -msgstr "" +msgstr "次の月曜日" #: lib/util/kformatprivate.cpp:548 msgctxt "KFormat|the next such day after today" msgid "Next Tuesday" -msgstr "" +msgstr "次の火曜日" #: lib/util/kformatprivate.cpp:550 msgctxt "KFormat|the next such day after today" msgid "Next Wednesday" -msgstr "" +msgstr "次の水曜日" #: lib/util/kformatprivate.cpp:552 msgctxt "KFormat|the next such day after today" msgid "Next Thursday" -msgstr "" +msgstr "次の木曜日" #: lib/util/kformatprivate.cpp:554 msgctxt "KFormat|the next such day after today" msgid "Next Friday" -msgstr "" +msgstr "次の金曜日" #: lib/util/kformatprivate.cpp:556 msgctxt "KFormat|the next such day after today" msgid "Next Saturday" -msgstr "" +msgstr "次の土曜日" #: lib/util/kformatprivate.cpp:558 msgctxt "KFormat|the next such day after today" msgid "Next Sunday" -msgstr "" +msgstr "次の日曜日" #. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem #: lib/util/kformatprivate.cpp:573 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/po/ko/kcoreaddons5_qt.po new/kcoreaddons-5.59.0/po/ko/kcoreaddons5_qt.po --- old/kcoreaddons-5.58.0/po/ko/kcoreaddons5_qt.po 2019-05-08 10:27:20.000000000 +0200 +++ new/kcoreaddons-5.59.0/po/ko/kcoreaddons5_qt.po 2019-06-01 18:53:54.000000000 +0200 @@ -1,23 +1,22 @@ # Korean messages for kdelibs. # Copyright (C) Free Software Foundation, Inc. # Cho Sung Jae <[email protected]>, 2007. -# Shinjo Park <[email protected]>, 2007, 2008, 2009, 2010, 2011. -# Shinjo Park <[email protected]>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Shinjo Park <[email protected]>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019. # msgid "" msgstr "" "Project-Id-Version: kdelibs4\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2014-03-23 01:50+0000\n" -"PO-Revision-Date: 2018-08-14 23:01+0100\n" +"PO-Revision-Date: 2019-05-18 15:16+0200\n" "Last-Translator: Shinjo Park <[email protected]>\n" -"Language-Team: Korean <[email protected]>\n" +"Language-Team: Korean <[email protected]>\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Lokalize 18.12.3\n" "X-Qt-Contexts: true\n" #: lib/kaboutdata.cpp:296 @@ -191,142 +190,142 @@ #: lib/util/kformatprivate.cpp:116 msgctxt "KFormat|SI prefix for 10^⁻24" msgid "y" -msgstr "" +msgstr "y" #: lib/util/kformatprivate.cpp:117 msgctxt "KFormat|SI prefix for 10^⁻21" msgid "z" -msgstr "" +msgstr "z" #: lib/util/kformatprivate.cpp:118 msgctxt "KFormat|SI prefix for 10^⁻18" msgid "a" -msgstr "" +msgstr "a" #: lib/util/kformatprivate.cpp:119 msgctxt "KFormat|SI prefix for 10^⁻15" msgid "f" -msgstr "" +msgstr "f" #: lib/util/kformatprivate.cpp:120 msgctxt "KFormat|SI prefix for 10^⁻12" msgid "p" -msgstr "" +msgstr "p" #: lib/util/kformatprivate.cpp:121 msgctxt "KFormat|SI prefix for 10^⁻9" msgid "n" -msgstr "" +msgstr "n" #: lib/util/kformatprivate.cpp:122 msgctxt "KFormat|SI prefix for 10^⁻6" msgid "µ" -msgstr "" +msgstr "µ" #: lib/util/kformatprivate.cpp:123 msgctxt "KFormat|SI prefix for 10^⁻3" msgid "m" -msgstr "" +msgstr "m" #: lib/util/kformatprivate.cpp:125 msgctxt "KFormat|SI prefix for 10^3" msgid "k" -msgstr "" +msgstr "k" #: lib/util/kformatprivate.cpp:125 msgctxt "KFormat|IEC binary prefix for 2^10" msgid "Ki" -msgstr "" +msgstr "Ki" #: lib/util/kformatprivate.cpp:126 msgctxt "KFormat|SI prefix for 10^6" msgid "M" -msgstr "" +msgstr "M" #: lib/util/kformatprivate.cpp:126 msgctxt "KFormat|IEC binary prefix for 2^20" msgid "Mi" -msgstr "" +msgstr "Mi" #: lib/util/kformatprivate.cpp:127 msgctxt "KFormat|SI prefix for 10^9" msgid "G" -msgstr "" +msgstr "G" #: lib/util/kformatprivate.cpp:127 msgctxt "KFormat|IEC binary prefix for 2^30" msgid "Gi" -msgstr "" +msgstr "Gi" #: lib/util/kformatprivate.cpp:128 msgctxt "KFormat|SI prefix for 10^12" msgid "T" -msgstr "" +msgstr "T" #: lib/util/kformatprivate.cpp:128 msgctxt "KFormat|IEC binary prefix for 2^40" msgid "Ti" -msgstr "" +msgstr "Ti" #: lib/util/kformatprivate.cpp:129 msgctxt "KFormat|SI prefix for 10^15" msgid "P" -msgstr "" +msgstr "P" #: lib/util/kformatprivate.cpp:129 msgctxt "KFormat|IEC binary prefix for 2^50" msgid "Pi" -msgstr "" +msgstr "Pi" #: lib/util/kformatprivate.cpp:130 msgctxt "KFormat|SI prefix for 10^18" msgid "E" -msgstr "" +msgstr "E" #: lib/util/kformatprivate.cpp:130 msgctxt "KFormat|IEC binary prefix for 2^60" msgid "Ei" -msgstr "" +msgstr "Ei" #: lib/util/kformatprivate.cpp:131 msgctxt "KFormat|SI prefix for 10^21" msgid "Z" -msgstr "" +msgstr "Z" #: lib/util/kformatprivate.cpp:131 msgctxt "KFormat|IEC binary prefix for 2^70" msgid "Zi" -msgstr "" +msgstr "Zi" #: lib/util/kformatprivate.cpp:132 msgctxt "KFormat|SI prefix for 10^24" msgid "Y" -msgstr "" +msgstr "Y" #: lib/util/kformatprivate.cpp:132 msgctxt "KFormat|IEC binary prefix for 2^80" msgid "Yi" -msgstr "" +msgstr "Yi" #: lib/util/kformatprivate.cpp:140 msgctxt "KFormat|Symbol of binary digit" msgid "bit" -msgstr "" +msgstr "bit" #: lib/util/kformatprivate.cpp:143 msgctxt "KFormat|Symbol of byte" msgid "B" -msgstr "" +msgstr "B" #: lib/util/kformatprivate.cpp:146 msgctxt "KFormat|Symbol of meter" msgid "m" -msgstr "" +msgstr "m" #: lib/util/kformatprivate.cpp:149 msgctxt "KFormat|Symbol of hertz" msgid "Hz" -msgstr "" +msgstr "Hz" #. value without prefix, format "<val> <unit>" #: lib/util/kformatprivate.cpp:158 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/src/lib/CMakeLists.txt new/kcoreaddons-5.59.0/src/lib/CMakeLists.txt --- old/kcoreaddons-5.58.0/src/lib/CMakeLists.txt 2019-05-08 10:27:20.000000000 +0200 +++ new/kcoreaddons-5.59.0/src/lib/CMakeLists.txt 2019-06-01 18:53:54.000000000 +0200 @@ -45,6 +45,7 @@ set(kcoreaddons_OPTIONAL_SRCS ${kcoreaddons_OPTIONAL_SRCS} text/kmacroexpander_win.cpp + util/kprocesslist_win.cpp util/kshell_win.cpp util/kuser_win.cpp ) @@ -54,6 +55,7 @@ set(kcoreaddons_OPTIONAL_SRCS ${kcoreaddons_OPTIONAL_SRCS} text/kmacroexpander_unix.cpp + util/kprocesslist_unix.cpp util/kuser_unix.cpp util/kshell_unix.cpp ) @@ -87,6 +89,7 @@ util/kformat.cpp util/kformatprivate.cpp util/kosrelease.cpp + util/kprocesslist.cpp util/kshell.cpp ${kcoreaddons_OPTIONAL_SRCS} ${kcoreaddons_QM_LOADER} @@ -201,6 +204,7 @@ KOSRelease KUser KShell + KProcessList Kdelibs4Migration Kdelibs4ConfigMigrator RELATIVE util @@ -244,6 +248,7 @@ text/ktexttohtmlemoticonsinterface.h util/kformat.h util/kosrelease.h + util/kprocesslist.h util/kuser.h util/kshell.h util/kdelibs4migration.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/src/lib/util/kprocesslist.cpp new/kcoreaddons-5.59.0/src/lib/util/kprocesslist.cpp --- old/kcoreaddons-5.58.0/src/lib/util/kprocesslist.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/src/lib/util/kprocesslist.cpp 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,105 @@ +/************************************************************************** +** +** This file is part of the KDE Frameworks +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2019 David Hallas <[email protected]> +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +**************************************************************************/ + +#include "kprocesslist.h" +#include "kprocesslist_p.h" +#include <algorithm> + +using namespace KProcessList; + +KProcessInfoPrivate::KProcessInfoPrivate() : + valid(false), + pid(-1) +{ +} + +KProcessInfo::KProcessInfo() : + d_ptr(new KProcessInfoPrivate) +{ +} + +KProcessInfo::KProcessInfo(qint64 pid, const QString& name, const QString& user) : + d_ptr(new KProcessInfoPrivate) +{ + d_ptr->valid = true; + d_ptr->pid = pid; + d_ptr->name = name; + d_ptr->user = user; +} + +KProcessInfo::KProcessInfo(const KProcessInfo &other) : + d_ptr(new KProcessInfoPrivate) +{ + *this = other; +} + +KProcessInfo::~KProcessInfo() +{ +} + +KProcessInfo &KProcessInfo::operator=(const KProcessInfo &other) +{ + d_ptr = other.d_ptr; + return *this; +} + +bool KProcessInfo::isValid() const +{ + return d_ptr->valid; +} + +qint64 KProcessInfo::pid() const +{ + return d_ptr->pid; +} + +QString KProcessInfo::name() const +{ + return d_ptr->name; +} + +QString KProcessInfo::user() const +{ + return d_ptr->user; +} + +KProcessInfo KProcessList::processInfo(qint64 pid) +{ + KProcessInfoList processInfoList = KProcessList::processInfoList(); + auto testProcessIterator = std::find_if(processInfoList.begin(), processInfoList.end(), + [pid](const KProcessList::KProcessInfo& info) + { + return info.pid() == pid; + }); + if (testProcessIterator != processInfoList.end()) { + return *testProcessIterator; + } + return KProcessInfo(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/src/lib/util/kprocesslist.h new/kcoreaddons-5.59.0/src/lib/util/kprocesslist.h --- old/kcoreaddons-5.58.0/src/lib/util/kprocesslist.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/src/lib/util/kprocesslist.h 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,96 @@ +/************************************************************************** +** +** This file is part of the KDE Frameworks +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2019 David Hallas <[email protected]> +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +**************************************************************************/ + +#ifndef KPROCESSLIST_H +#define KPROCESSLIST_H + +#include <kcoreaddons_export.h> +#include <QSharedDataPointer> +#include <QString> +#include <QList> + +namespace KProcessList +{ + +class KProcessInfoPrivate; + +/** + * @brief Contains information about a process. This class is usually not used alone but rather returned by + * processInfoList and processInfo. To check if the data contained in this class is valid use the isValid method. + * @since 5.58 + */ +class KCOREADDONS_EXPORT KProcessInfo { +public: + KProcessInfo(); + KProcessInfo(qint64 pid, const QString &name, const QString &user); + KProcessInfo(const KProcessInfo &other); + ~KProcessInfo(); + KProcessInfo &operator=(const KProcessInfo &other); + /** + * @brief If the KProcessInfo contains valid information. If it returns true the pid, name and user function + * returns valid information, otherwise they return value is undefined. + */ + bool isValid() const; + /** + * @brief The pid of the process + */ + qint64 pid() const; + /** + * @brief The name of the process. The class will try to get the full path to the executable file for the process + * but if it is not available the name of the process will be used instead. + */ + QString name() const; + /** + * @brief The username the process is running under. + */ + QString user() const; +private: + QSharedDataPointer<KProcessInfoPrivate> d_ptr; +}; + +typedef QList<KProcessInfo> KProcessInfoList; + +/** + * @brief Retrieves the list of currently active processes. + * @since 5.58 + */ +KCOREADDONS_EXPORT KProcessInfoList processInfoList(); + +/** + * @brief Retrieves process information for a specific process-id. If the process is not found a KProcessInfo with + * isValid == false will be returned. + * @param pid The process-id to retrieve information for. + * @since 5.58 + */ +KCOREADDONS_EXPORT KProcessInfo processInfo(qint64 pid); + +} // KProcessList namespace + +#endif // KPROCESSLIST_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/src/lib/util/kprocesslist_p.h new/kcoreaddons-5.59.0/src/lib/util/kprocesslist_p.h --- old/kcoreaddons-5.58.0/src/lib/util/kprocesslist_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/src/lib/util/kprocesslist_p.h 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,52 @@ +/************************************************************************** +** +** This file is part of the KDE Frameworks +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2019 David Hallas <[email protected]> +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +**************************************************************************/ + +#ifndef KPROCESSLIST_P_H +#define KPROCESSLIST_P_H + +#include <QSharedData> +#include "kprocesslist.h" + +namespace KProcessList +{ + +class KProcessInfoPrivate : public QSharedData { +public: + KProcessInfoPrivate(); + + bool valid; + qint64 pid; + QString name; + QString user; +}; + +} // KProcessList namespace + +#endif // KPROCESSLIST_P_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/src/lib/util/kprocesslist_unix.cpp new/kcoreaddons-5.59.0/src/lib/util/kprocesslist_unix.cpp --- old/kcoreaddons-5.58.0/src/lib/util/kprocesslist_unix.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/src/lib/util/kprocesslist_unix.cpp 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,140 @@ +/************************************************************************** +** +** This file is part of the KDE Frameworks +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2019 David Hallas <[email protected]> +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +**************************************************************************/ + +#include "kprocesslist.h" + +#include <QProcess> +#include <QDir> + +using namespace KProcessList; + +namespace { + +bool isUnixProcessId(const QString &procname) +{ + for (int i = 0; i != procname.size(); ++i) { + if (!procname.at(i).isDigit()) + return false; + } + return true; +} + +// Determine UNIX processes by running ps +KProcessInfoList unixProcessListPS() +{ +#ifdef Q_OS_MAC + // command goes last, otherwise it is cut off + static const char formatC[] = "pid state user command"; +#else + static const char formatC[] = "pid,state,user,cmd"; +#endif + KProcessInfoList rc; + QProcess psProcess; + QStringList args; + args << QStringLiteral("-e") << QStringLiteral("-o") << QLatin1String(formatC); + psProcess.start(QStringLiteral("ps"), args); + if (!psProcess.waitForStarted()) + return rc; + psProcess.waitForFinished(); + QByteArray output = psProcess.readAllStandardOutput(); + // Split "457 S+ /Users/foo.app" + const QStringList lines = QString::fromLocal8Bit(output).split(QLatin1Char('\n')); + const int lineCount = lines.size(); + const QChar blank = QLatin1Char(' '); + for (int l = 1; l < lineCount; l++) { // Skip header + const QString line = lines.at(l).simplified(); + // we can't just split on blank as the process name might + // contain them + const int endOfPid = line.indexOf(blank); + const int endOfState = line.indexOf(blank, endOfPid+1); + const int endOfUser = line.indexOf(blank, endOfState+1); + if (endOfPid >= 0 && endOfState >= 0 && endOfUser >= 0) { + qint64 pid = line.left(endOfPid).toUInt(); + QString user = line.mid(endOfState+1, endOfUser-endOfState-1); + QString name = line.right(line.size()-endOfUser-1); + rc.push_back(KProcessInfo(pid, name, user)); + } + } + + return rc; +} + +} // unnamed namespace + +// Determine UNIX processes by reading "/proc". Default to ps if +// it does not exist +KProcessInfoList KProcessList::processInfoList() +{ + const QDir procDir(QStringLiteral("/proc/")); +#ifdef Q_OS_FREEBSD + QString statusFileName(QStringLiteral("/status")); +#else + QString statusFileName(QStringLiteral("/stat")); +#endif + if (!procDir.exists()) + return unixProcessListPS(); + KProcessInfoList rc; + const QStringList procIds = procDir.entryList(); + if (procIds.isEmpty()) + return rc; + for (const QString &procId : procIds) { + if (!isUnixProcessId(procId)) + continue; + QString filename = QStringLiteral("/proc/"); + filename += procId; + filename += statusFileName; + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) + continue; // process may have exited + + const QStringList data = QString::fromLocal8Bit(file.readAll()).split(QLatin1Char(' ')); + qint64 pid = procId.toUInt(); + QString name = data.at(1); + if (name.startsWith(QLatin1Char('(')) && name.endsWith(QLatin1Char(')'))) { + name.truncate(name.size() - 1); + name.remove(0, 1); + } + // State is element 2 + // PPID is element 3 + QString user = QFileInfo(file).owner(); + file.close(); + + QFile cmdFile(QLatin1String("/proc/") + procId + QLatin1String("/cmdline")); + if (cmdFile.open(QFile::ReadOnly)) { + QByteArray cmd = cmdFile.readAll(); + cmd.replace('\0', ' '); + if (!cmd.isEmpty()) + name = QString::fromLocal8Bit(cmd).trimmed(); + } + cmdFile.close(); + rc.push_back(KProcessInfo(pid, name, user)); + } + return rc; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcoreaddons-5.58.0/src/lib/util/kprocesslist_win.cpp new/kcoreaddons-5.59.0/src/lib/util/kprocesslist_win.cpp --- old/kcoreaddons-5.58.0/src/lib/util/kprocesslist_win.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kcoreaddons-5.59.0/src/lib/util/kprocesslist_win.cpp 2019-06-01 18:53:54.000000000 +0200 @@ -0,0 +1,134 @@ +/************************************************************************** +** +** This file is part of the KDE Frameworks +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2019 David Hallas <[email protected]> +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at [email protected]. +** +**************************************************************************/ + +#include "kprocesslist.h" + +#include <QLibrary> + +// Enable Win API of XP SP1 and later +#ifdef Q_OS_WIN +# if !defined(_WIN32_WINNT) +# define _WIN32_WINNT 0x0502 +# endif +# include <qt_windows.h> +# if !defined(PROCESS_SUSPEND_RESUME) // Check flag for MinGW +# define PROCESS_SUSPEND_RESUME (0x0800) +# endif // PROCESS_SUSPEND_RESUME +#endif // Q_OS_WIN + +#include <tlhelp32.h> +#include <psapi.h> + +using namespace KProcessList; + +// Resolve QueryFullProcessImageNameW out of kernel32.dll due +// to incomplete MinGW import libs and it not being present +// on Windows XP. +static inline BOOL queryFullProcessImageName(HANDLE h, DWORD flags, LPWSTR buffer, DWORD *size) +{ + // Resolve required symbols from the kernel32.dll + typedef BOOL (WINAPI *QueryFullProcessImageNameWProtoType)(HANDLE, DWORD, LPWSTR, PDWORD); + static QueryFullProcessImageNameWProtoType queryFullProcessImageNameW = 0; + if (!queryFullProcessImageNameW) { + QLibrary kernel32Lib(QLatin1String("kernel32.dll"), 0); + if (kernel32Lib.isLoaded() || kernel32Lib.load()) { + queryFullProcessImageNameW + = (QueryFullProcessImageNameWProtoType)kernel32Lib.resolve( + "QueryFullProcessImageNameW"); + } + } + if (!queryFullProcessImageNameW) + return FALSE; + // Read out process + return (*queryFullProcessImageNameW)(h, flags, buffer, size); +} + +struct ProcessInfo { + QString processOwner; +}; + +static inline ProcessInfo winProcessInfo(DWORD processId) +{ + ProcessInfo pi; + HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION, TOKEN_READ, processId); + if (handle == INVALID_HANDLE_VALUE) + return pi; + HANDLE processTokenHandle = NULL; + if (!OpenProcessToken(handle, TOKEN_READ, &processTokenHandle) || !processTokenHandle) + return pi; + + DWORD size = 0; + GetTokenInformation(processTokenHandle, TokenUser, NULL, 0, &size); + + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + QByteArray buf; + buf.resize(size); + PTOKEN_USER userToken = reinterpret_cast<PTOKEN_USER>(buf.data()); + if (userToken + && GetTokenInformation(processTokenHandle, TokenUser, userToken, size, &size)) { + SID_NAME_USE sidNameUse; + TCHAR user[MAX_PATH] = { 0 }; + DWORD userNameLength = MAX_PATH; + TCHAR domain[MAX_PATH] = { 0 }; + DWORD domainNameLength = MAX_PATH; + + if (LookupAccountSid(NULL, + userToken->User.Sid, + user, + &userNameLength, + domain, + &domainNameLength, + &sidNameUse)) + pi.processOwner = QString::fromUtf16(reinterpret_cast<const ushort *>(user)); + } + } + + CloseHandle(processTokenHandle); + CloseHandle(handle); + return pi; +} + +KProcessInfoList KProcessList::processInfoList() +{ + KProcessInfoList rc; + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (snapshot == INVALID_HANDLE_VALUE) + return rc; + + for (bool hasNext = Process32First(snapshot, &pe); hasNext; hasNext = Process32Next(snapshot, &pe)) { + const ProcessInfo processInf = winProcessInfo(pe.th32ProcessID); + rc.push_back(KProcessInfo(pe.th32ProcessID, QString::fromUtf16(reinterpret_cast<ushort *>(pe.szExeFile)), processInf.processOwner)); + } + CloseHandle(snapshot); + return rc; +}
