From ba53a720e72a37d51efb4551634c39c70d719c70 Mon Sep 17 00:00:00 2001 From: Rmys Date: Wed, 6 Mar 2024 12:25:00 +0300 Subject: [PATCH] applications-24.02.0 --- .../akonadi-calendar-tools-kf6/actions.py | 21 + .../files/qt5.patch | 12 + .../akonadi-calendar-tools-kf6/pspec.xml | 80 + .../akonadiconsole-kf6/actions.py | 21 + .../applications/akonadiconsole-kf6/pspec.xml | 109 ++ .../applications/akregator-kf6/actions.py | 21 + .../kde6/applications/akregator-kf6/pspec.xml | 108 ++ .../calendarsupport-kf6/actions.py | 19 + .../calendarsupport-kf6/files/qt5.patch | 12 + .../calendarsupport-kf6/pspec.xml | 110 ++ .../applications/eventviews-kf6/actions.py | 19 + .../eventviews-kf6/files/qt5.patch | 12 + .../applications/eventviews-kf6/pspec.xml | 113 ++ .../grantlee-editor-kf6/actions.py | 21 + .../grantlee-editor-kf6/pspec.xml | 97 ++ .../incidenceeditor-kf6/actions.py | 19 + .../incidenceeditor-kf6/files/qt5.patch | 12 + .../incidenceeditor-kf6/pspec.xml | 128 ++ .../kdepim-runtime-kf6/actions.py | 19 + .../kdepim-runtime-kf6/files/2fd3604a.patch | 60 + .../kdepim-runtime-kf6/files/c99afc75.patch | 120 ++ .../kdepim-runtime-kf6/files/fb0d78fb.patch | 1302 +++++++++++++++++ .../applications/kdepim-runtime-kf6/pspec.xml | 154 ++ .../kdepim-runtime-kf6/translations.xml | 8 + .../applications/mailcommon-kf6/actions.py | 20 + .../applications/mailcommon-kf6/pspec.xml | 135 ++ pisi-index.xml | 999 ++++++++++++- pisi-index.xml.sha1sum | 2 +- pisi-index.xml.xz | Bin 1057572 -> 1059644 bytes pisi-index.xml.xz.sha1sum | 2 +- 30 files changed, 3738 insertions(+), 17 deletions(-) create mode 100755 desktop/kde6/applications/akonadi-calendar-tools-kf6/actions.py create mode 100755 desktop/kde6/applications/akonadi-calendar-tools-kf6/files/qt5.patch create mode 100755 desktop/kde6/applications/akonadi-calendar-tools-kf6/pspec.xml create mode 100755 desktop/kde6/applications/akonadiconsole-kf6/actions.py create mode 100755 desktop/kde6/applications/akonadiconsole-kf6/pspec.xml create mode 100755 desktop/kde6/applications/akregator-kf6/actions.py create mode 100755 desktop/kde6/applications/akregator-kf6/pspec.xml create mode 100755 desktop/kde6/applications/calendarsupport-kf6/actions.py create mode 100755 desktop/kde6/applications/calendarsupport-kf6/files/qt5.patch create mode 100755 desktop/kde6/applications/calendarsupport-kf6/pspec.xml create mode 100755 desktop/kde6/applications/eventviews-kf6/actions.py create mode 100755 desktop/kde6/applications/eventviews-kf6/files/qt5.patch create mode 100755 desktop/kde6/applications/eventviews-kf6/pspec.xml create mode 100755 desktop/kde6/applications/grantlee-editor-kf6/actions.py create mode 100755 desktop/kde6/applications/grantlee-editor-kf6/pspec.xml create mode 100755 desktop/kde6/applications/incidenceeditor-kf6/actions.py create mode 100755 desktop/kde6/applications/incidenceeditor-kf6/files/qt5.patch create mode 100755 desktop/kde6/applications/incidenceeditor-kf6/pspec.xml create mode 100755 desktop/kde6/applications/kdepim-runtime-kf6/actions.py create mode 100644 desktop/kde6/applications/kdepim-runtime-kf6/files/2fd3604a.patch create mode 100644 desktop/kde6/applications/kdepim-runtime-kf6/files/c99afc75.patch create mode 100644 desktop/kde6/applications/kdepim-runtime-kf6/files/fb0d78fb.patch create mode 100755 desktop/kde6/applications/kdepim-runtime-kf6/pspec.xml create mode 100755 desktop/kde6/applications/kdepim-runtime-kf6/translations.xml create mode 100755 desktop/kde6/applications/mailcommon-kf6/actions.py create mode 100755 desktop/kde6/applications/mailcommon-kf6/pspec.xml diff --git a/desktop/kde6/applications/akonadi-calendar-tools-kf6/actions.py b/desktop/kde6/applications/akonadi-calendar-tools-kf6/actions.py new file mode 100755 index 0000000000..dc7d4ed6e8 --- /dev/null +++ b/desktop/kde6/applications/akonadi-calendar-tools-kf6/actions.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + + pisitools.dodoc("LICENSES/*") + diff --git a/desktop/kde6/applications/akonadi-calendar-tools-kf6/files/qt5.patch b/desktop/kde6/applications/akonadi-calendar-tools-kf6/files/qt5.patch new file mode 100755 index 0000000000..ffe62b987d --- /dev/null +++ b/desktop/kde6/applications/akonadi-calendar-tools-kf6/files/qt5.patch @@ -0,0 +1,12 @@ +diff -Nuar a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2017-12-08 04:02:08.000000000 +0300 ++++ b/CMakeLists.txt 2017-12-17 11:30:46.413624475 +0300 +@@ -46,7 +46,7 @@ + set(KDEPIM_LIB_VERSION "${KDEPIM_VERSION_NUMBER}") + set(KDEPIM_LIB_SOVERSION "5") + +-set(QT_REQUIRED_VERSION "5.8.0") ++set(QT_REQUIRED_VERSION "5.7.1") + find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED Widgets) + + diff --git a/desktop/kde6/applications/akonadi-calendar-tools-kf6/pspec.xml b/desktop/kde6/applications/akonadi-calendar-tools-kf6/pspec.xml new file mode 100755 index 0000000000..88425f1223 --- /dev/null +++ b/desktop/kde6/applications/akonadi-calendar-tools-kf6/pspec.xml @@ -0,0 +1,80 @@ + + + + + + akonadi-calendar-tools-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + CLI tools to manage akonadi calendars + CLI tools to manage akonadi calendars + http://download.kde.org/stable/release-service/24.02.0/src/akonadi-calendar-tools-24.02.0.tar.xz + + boost-devel + akonadi-kf6-devel + akonadi-calendar-kf6-devel + extra-cmake-modules-kf6 + + kdoctools-kf6-devel + qt6-base-devel + kcompletion-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + kcontacts-kf6-devel + kcalendarcore-kf6-devel + + + + kunitconversion-kf6-devel + akonadi-contacts-kf6-devel + kcalutils-kf6-devel + libkdepim-kf6-devel + calendarsupport-kf6-devel + kmime-kf6-devel + kidentitymanagement-kf6-devel + akonadi-notes-kf6-devel + + + + + + + + akonadi-calendar-tools-kf6 + CLI tools to manage akonadi calendars + + ki18n-kf6 + libgcc + akonadi-kf6 + kconfig-kf6 + kcalendarcore-kf6 + qt6-base + kcalutils-kf6 + kcoreaddons-kf6 + calendarsupport-kf6 + akonadi-calendar-kf6 + + akonadi-notes-kf6 + + + /etc/xdg + /usr/bin + /usr/share + /usr/share/doc + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/akonadiconsole-kf6/actions.py b/desktop/kde6/applications/akonadiconsole-kf6/actions.py new file mode 100755 index 0000000000..dc7d4ed6e8 --- /dev/null +++ b/desktop/kde6/applications/akonadiconsole-kf6/actions.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + + pisitools.dodoc("LICENSES/*") + diff --git a/desktop/kde6/applications/akonadiconsole-kf6/pspec.xml b/desktop/kde6/applications/akonadiconsole-kf6/pspec.xml new file mode 100755 index 0000000000..edc3a92d5a --- /dev/null +++ b/desktop/kde6/applications/akonadiconsole-kf6/pspec.xml @@ -0,0 +1,109 @@ + + + + akonadiconsole-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + Akonadi management and debugging console + Akonadi management and debugging console + http://download.kde.org/stable/release-service/24.02.0/src/akonadiconsole-24.02.0.tar.xz + + akonadi-contacts-kf6-devel + akonadi-kf6-devel + akonadi-calendar-kf6-devel + pimcommon-kf6-devel + akonadi-mime-kf6-devel + calendarsupport-kf6-devel + extra-cmake-modules-kf6 + kimap-kf6-devel + kcalendarcore-kf6-devel + kcompletion-kf6-devel + kconfig-kf6-devel + kconfigwidgets-kf6-devel + kcontacts-kf6-devel + kcrash-kf6-devel + kdbusaddons-kf6-devel + kdoctools-kf6-devel + ki18n-kf6-devel + kitemmodels-kf6-devel + kmime-kf6-devel + kpimtextedit-kf6-devel + ktextwidgets-kf6-devel + kwidgetsaddons-kf6-devel + kxmlgui-kf6-devel + kio-kf6-devel + kitemviews-kf6-devel + akonadi-search-kf6-devel + libkdepim-kf6-devel + libkleo-kf6-devel + messagelib-kf6-devel + qt6-base-devel + qt6-sql-mysql + qt6-sql-postgresql + qt6-sql-sqlite + qt6-sql-odbc + + + kunitconversion-kf6-devel + kidentitymanagement-kf6-devel + cyrus-sasl-devel + gpgme-devel + gpgme-qt6-devel + ffmpeg-devel + libXScrnSaver-devel + qt6-webengine-devel + + + + + akonadiconsole-kf6 + Akonadi management and debugging console + + akonadi-kf6 + akonadi-contacts-kf6 + akonadi-mime-kf6 + calendarsupport-kf6 + kcalendarcore-kf6 + qt6-base + ki18n-kf6 + kmime-kf6 + kcrash-kf6 + libgcc + kconfig-kf6 + kxmlgui-kf6 + kcontacts-kf6 + libkdepim-kf6 + kitemviews-kf6 + messagelib-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kdbusaddons-kf6 + kitemmodels-kf6 + kpimtextedit-kf6 + ktextwidgets-kf6 + kconfigwidgets-kf6 + kwidgetsaddons-kf6 + + + /etc/xdg + /usr/bin + /usr/share + /usr/share/doc + /usr/lib + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/akregator-kf6/actions.py b/desktop/kde6/applications/akregator-kf6/actions.py new file mode 100755 index 0000000000..c1f8c6bea3 --- /dev/null +++ b/desktop/kde6/applications/akregator-kf6/actions.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + + pisitools.dodoc("LICENSES/*", "README*") + diff --git a/desktop/kde6/applications/akregator-kf6/pspec.xml b/desktop/kde6/applications/akregator-kf6/pspec.xml new file mode 100755 index 0000000000..13f8703ec8 --- /dev/null +++ b/desktop/kde6/applications/akregator-kf6/pspec.xml @@ -0,0 +1,108 @@ + + + + + + akregator-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + A KDE blogging client + akregator-kf6 helps you to keep informed about new stories on websites like KDE Dot News and Planet KDE blogs. The technology used is RSS and many sites support it. + http://download.kde.org/stable/release-service/24.02.0/src/akregator-24.02.0.tar.xz + + boost-devel + extra-cmake-modules-kf6 + kblog-kf6-devel + + kdoctools-kf6-devel + kio-kf6-devel + ktexteditor-kf6-devel + python-devel + qt6-base-devel + qt6-webengine-devel + grantlee-qt5-devel + kcmutils-kf6-devel + knotifyconfig-kf6-devel + akonadi-mime-kf6-devel + akonadi-kf6-devel + kitemmodels-kf6-devel + grantleetheme-kf6-devel + kcontacts-kf6-devel + kontactinterface-kf6-devel + libkdepim-kf6-devel + akonadi-contacts-kf6-devel + libkleo-kf6-devel + gpgme-devel + gpgme-qt6-devel + messagelib-kf6-devel + pimcommon-kf6-devel + kimap-kf6-devel + kmime-kf6-devel + cyrus-sasl-devel + kpimtextedit-kf6-devel + ksyndication-kf6-devel + ffmpeg-devel + knotifyconfig-kf6-devel + knotifications-kf6-devel + kuserfeedback-kf6-devel + libXScrnSaver-devel + + + + + akregator-kf6 + A Feed Reader by KDE + + kio-kf6 + ki18n-kf6 + kcrash-kf6 + kparts-kf6 + libgcc + kcodecs-kf6 + kconfig-kf6 + kxmlgui-kf6 + kcmutils-kf6 + kservice-kf6 + qt6-base + libkdepim-kf6 + pimcommon-kf6 + messagelib-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kjobwidgets-kf6 + kpimtextedit-kf6 + ksyndication-kf6 + ktextwidgets-kf6 + grantleetheme-kf6 + knotifyconfig-kf6 + qt6-webengine + kconfigwidgets-kf6 + knotifications-kf6 + kwidgetsaddons-kf6 + kontactinterface-kf6 + + + /etc/xdg + /usr/bin + /usr/lib + /usr/lib/qt6 + /usr/share + /usr/share/doc + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/calendarsupport-kf6/actions.py b/desktop/kde6/applications/calendarsupport-kf6/actions.py new file mode 100755 index 0000000000..82e40ee4b1 --- /dev/null +++ b/desktop/kde6/applications/calendarsupport-kf6/actions.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + pisitools.dodoc("LICENSES/*") diff --git a/desktop/kde6/applications/calendarsupport-kf6/files/qt5.patch b/desktop/kde6/applications/calendarsupport-kf6/files/qt5.patch new file mode 100755 index 0000000000..f75383e56f --- /dev/null +++ b/desktop/kde6/applications/calendarsupport-kf6/files/qt5.patch @@ -0,0 +1,12 @@ +diff -Nuar a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2017-12-08 04:03:49.000000000 +0300 ++++ b/CMakeLists.txt 2017-12-17 00:25:23.527037197 +0300 +@@ -28,7 +28,7 @@ + set(calendarsupport-kf6_LIB_VERSION ${PIM_VERSION}) + set(AKONADI_MIMELIB_VERSION "5.7.0") + set(KDEPIM_LIB_VERSION "5.7.0") +-set(QT_REQUIRED_VERSION "5.8.0") ++set(QT_REQUIRED_VERSION "5.7.1") + set(kmime-kf6_LIB_VERSION "5.7.0") + set(CALENDARUTILS_LIB_VERSION "5.7.0") + set(kcalendarcore-kf6_LIB_VERSION "5.7.0") diff --git a/desktop/kde6/applications/calendarsupport-kf6/pspec.xml b/desktop/kde6/applications/calendarsupport-kf6/pspec.xml new file mode 100755 index 0000000000..6588d0e03e --- /dev/null +++ b/desktop/kde6/applications/calendarsupport-kf6/pspec.xml @@ -0,0 +1,110 @@ + + + + calendarsupport-kf6 + https://community.kde.org/KDE_PIM + + Alihan Öztürk + alihan@pisilinux.org + + LGPLv2 + app:console + Calendar support library + Calendar support library + mirrors://kde/stable/release-service/24.02.0/src/calendarsupport-24.02.0.tar.xz + + extra-cmake-modules-kf6 + qt6-base-devel + akonadi-kf6-devel + kmime-kf6-devel + ki18n-kf6-devel + kcodecs-kf6-devel + kcompletion-kf6-devel + kjobwidgets-kf6-devel + kcoreaddons-kf6-devel + kservice-kf6-devel + solid-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + + kdoctools-kf6-devel + + + kunitconversion-kf6-devel + boost-devel + kcalutils-kf6-devel + kcalendarcore-kf6-devel + kidentitymanagement-kf6-devel + kholidays-kf6-devel + akonadi-calendar-kf6-devel + kcontacts-kf6-devel + pimcommon-kf6-devel + kimap-kf6-devel + cyrus-sasl-devel + akonadi-mime-kf6-devel + akonadi-contacts-kf6-devel + akonadi-notes-kf6-devel + kguiaddons-kf6-devel + + + + + + + + calendarsupport-kf6 + Calendar support library + + kio-kf6 + ki18n-kf6 + kmime-kf6 + libgcc + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kcalendarcore-kf6 + qt6-base + kcalutils-kf6 + kholidays-kf6 + pimcommon-kf6 + kguiaddons-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kjobwidgets-kf6 + kwidgetsaddons-kf6 + akonadi-calendar-kf6 + kidentitymanagement-kf6 + + + /etc + /usr/lib/qt6 + /usr/lib + /usr/share + /usr/share/kservice-kf6types5 + /usr/share/locale + + + + + calendarsupport-kf6-devel + Development files for calendarsupport-kf6 + + calendarsupport-kf6 + + + /usr/include + /usr/lib/cmake + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/eventviews-kf6/actions.py b/desktop/kde6/applications/eventviews-kf6/actions.py new file mode 100755 index 0000000000..82e40ee4b1 --- /dev/null +++ b/desktop/kde6/applications/eventviews-kf6/actions.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + pisitools.dodoc("LICENSES/*") diff --git a/desktop/kde6/applications/eventviews-kf6/files/qt5.patch b/desktop/kde6/applications/eventviews-kf6/files/qt5.patch new file mode 100755 index 0000000000..4109eacdae --- /dev/null +++ b/desktop/kde6/applications/eventviews-kf6/files/qt5.patch @@ -0,0 +1,12 @@ +diff -Nuar a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2017-12-08 04:03:52.000000000 +0300 ++++ b/CMakeLists.txt 2017-12-17 22:40:11.652631461 +0300 +@@ -32,7 +32,7 @@ + set(EVENTVIEW_LIB_VERSION ${PIM_VERSION}) + set(CALENDARUTILS_LIB_VERSION "5.7.0") + set(AKONADI_LIB_VERSION "5.7.0") +-set(QT_REQUIRED_VERSION "5.8.0") ++set(QT_REQUIRED_VERSION "5.7.1") + set(kcalendarcore-kf6_LIB_VERSION "5.7.0") + set(AKONADICALENDAR_LIB_VERSION "5.7.0") + set(kmime-kf6_LIB_VERSION "5.7.0") diff --git a/desktop/kde6/applications/eventviews-kf6/pspec.xml b/desktop/kde6/applications/eventviews-kf6/pspec.xml new file mode 100755 index 0000000000..fb09bddcb1 --- /dev/null +++ b/desktop/kde6/applications/eventviews-kf6/pspec.xml @@ -0,0 +1,113 @@ + + + + eventviews-kf6 + https://community.kde.org/KDE_PIM + + Alihan Öztürk + alihan@pisilinux.org + + LGPLv2 + app:console + Library for creating events. + Library for creating events. + mirrors://kde/stable/release-service/24.02.0/src/eventviews-24.02.0.tar.xz + + extra-cmake-modules-kf6 + qt6-base-devel + akonadi-kf6-devel + + kcompletion-kf6-devel + kjobwidgets-kf6-devel + kcoreaddons-kf6-devel + kservice-kf6-devel + solid-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + + kdoctools-kf6-devel + + + kunitconversion-kf6-devel + boost-devel + libkdepim-kf6-devel + kcontacts-kf6-devel + kcalendarcore-kf6-devel + + kcalutils-kf6-devel + calendarsupport-kf6-devel + kmime-kf6-devel + kidentitymanagement-kf6-devel + akonadi-calendar-kf6-devel + akonadi-contacts-kf6-devel + kdiagram-kf6-devel + kholidays-kf6-devel + kguiaddons-kf6-devel + kiconthemes-kf6-devel + + + + + + + + eventviews-kf6 + Library for creating events. + + ki18n-kf6 + libgcc + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kcalendarcore-kf6 + kdiagram-kf6 + + kservice-kf6 + qt6-base + kcalutils-kf6 + kcontacts-kf6 + libkdepim-kf6 + kguiaddons-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kitemmodels-kf6 + kconfigwidgets-kf6 + kwidgetsaddons-kf6 + calendarsupport-kf6 + akonadi-calendar-kf6 + + + + /etc + /usr/lib + /usr/lib/qt6 + /usr/share + /usr/share/doc + /usr/share/kservice-kf6types5 + /usr/share/locale + + + + + eventviews-kf6-devel + Development files for eventviews-kf6. + + eventviews-kf6 + + + /usr/include + /usr/lib/cmake + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/grantlee-editor-kf6/actions.py b/desktop/kde6/applications/grantlee-editor-kf6/actions.py new file mode 100755 index 0000000000..dc7d4ed6e8 --- /dev/null +++ b/desktop/kde6/applications/grantlee-editor-kf6/actions.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + + pisitools.dodoc("LICENSES/*") + diff --git a/desktop/kde6/applications/grantlee-editor-kf6/pspec.xml b/desktop/kde6/applications/grantlee-editor-kf6/pspec.xml new file mode 100755 index 0000000000..d7f31186c0 --- /dev/null +++ b/desktop/kde6/applications/grantlee-editor-kf6/pspec.xml @@ -0,0 +1,97 @@ + + + + + + grantlee-editor-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + Editor for Grantlee themes + Editor for Grantlee themes + mirrors://kde/stable/release-service/24.02.0/src/grantlee-editor-24.02.0.tar.xz + + qt6-webengine-devel + kcrash-kf6-devel + extra-cmake-modules-kf6 + kdbusaddons-kf6-devel + kdoctools-kf6-devel + kxmlgui-kf6-devel + qt6-base-devel + ktexteditor-kf6-devel + kwallet-kf6-devel + knewstuff-kf6-devel + karchive-kf6-devel + pimcommon-kf6-devel + messagelib-kf6-devel + grantleetheme-kf6-devel + akonadi-mime-kf6-devel + kpimtextedit-kf6-devel + libkdepim-kf6-devel + syntax-highlighting-kf6-devel + libkleo-kf6-devel + kparts-kf6-devel + gpgme-devel + gpgme-qt6-devel + cyrus-sasl-devel + akonadi-kf6-devel + kitemmodels-kf6-devel + kcontacts-kf6-devel + akonadi-contacts-kf6-devel + kimap-kf6-devel + kmime-kf6-devel + grantlee-qt5-devel + ffmpeg-devel + libXScrnSaver-devel + + + + + grantlee-editor-kf6 + Editor for Grantlee themes + + kio-kf6 + ki18n-kf6 + kmime-kf6 + kcrash-kf6 + libgcc + kconfig-kf6 + kxmlgui-kf6 + karchive-kf6 + qt6-base + kcontacts-kf6 + knewstuff-kf6 + pimcommon-kf6 + messagelib-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kdbusaddons-kf6 + kpimtextedit-kf6 + qt6-webengine + kconfigwidgets-kf6 + kwidgetsaddons-kf6 + akonadi-contacts-kf6 + syntax-highlighting-kf6 + + + /etc/xdg + /usr/bin + /usr/lib + /usr/share + /usr/share/doc + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/incidenceeditor-kf6/actions.py b/desktop/kde6/applications/incidenceeditor-kf6/actions.py new file mode 100755 index 0000000000..82e40ee4b1 --- /dev/null +++ b/desktop/kde6/applications/incidenceeditor-kf6/actions.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + pisitools.dodoc("LICENSES/*") diff --git a/desktop/kde6/applications/incidenceeditor-kf6/files/qt5.patch b/desktop/kde6/applications/incidenceeditor-kf6/files/qt5.patch new file mode 100755 index 0000000000..4ff644d481 --- /dev/null +++ b/desktop/kde6/applications/incidenceeditor-kf6/files/qt5.patch @@ -0,0 +1,12 @@ +diff -Nuar a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2017-12-08 04:03:56.000000000 +0300 ++++ b/CMakeLists.txt 2017-12-17 23:22:46.040447149 +0300 +@@ -30,7 +30,7 @@ + set(incidenceeditor-kf6_LIB_VERSION ${PIM_VERSION}) + set(AKONADI_MIMELIB_VERSION "5.7.0") + set(KDEPIM_LIB_VERSION "5.7.0") +-set(QT_REQUIRED_VERSION "5.8.0") ++set(QT_REQUIRED_VERSION "5.7.1") + set(kmime-kf6_LIB_VERSION "5.7.0") + set(kmailtransport-kf6_LIB_VERSION "5.7.0") + set(kldap-kf6_LIB_VERSION "5.7.0") diff --git a/desktop/kde6/applications/incidenceeditor-kf6/pspec.xml b/desktop/kde6/applications/incidenceeditor-kf6/pspec.xml new file mode 100755 index 0000000000..e4ae8ecd38 --- /dev/null +++ b/desktop/kde6/applications/incidenceeditor-kf6/pspec.xml @@ -0,0 +1,128 @@ + + + + + + incidenceeditor-kf6 + https://community.kde.org/KDE_PIM + + Alihan Öztürk + alihan@pisilinux.org + + LGPLv2 + app:console + KDE PIM incidence editor. + KDE PIM incidence editor. + http://download.kde.org/stable/release-service/24.02.0/src/incidenceeditor-24.02.0.tar.xz + + extra-cmake-modules-kf6 + qt6-base-devel + akonadi-kf6-devel + kcompletion-kf6-devel + kjobwidgets-kf6-devel + kcoreaddons-kf6-devel + kservice-kf6-devel + solid-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + kdoctools-kf6-devel + + + kunitconversion-kf6-devel + boost-devel + kmime-kf6-devel + kldap-kf6-devel + cyrus-sasl-devel + calendarsupport-kf6-devel + kidentitymanagement-kf6-devel + akonadi-calendar-kf6-devel + kcalendarcore-kf6-devel + kcontacts-kf6-devel + eventviews-kf6-devel + kcalutils-kf6-devel + kdiagram-kf6-devel + kmailtransport-kf6-devel + libkdepim-kf6-devel + akonadi-mime-kf6-devel + akonadi-contacts-kf6-devel + pimcommon-kf6-devel + kimap-kf6-devel + kiconthemes-kf6-devel + + + + + + + + incidenceeditor-kf6 + KDE PIM incidence editor. + + kio-kf6 + ki18n-kf6 + kldap-kf6 + kmime-kf6 + kimap-kf6 + libgcc + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kxmlgui-kf6 + kdiagram-kf6 + kservice-kf6 + kcalutils-kf6 + kcontacts-kf6 + libkdepim-kf6 + pimcommon-kf6 + eventviews-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kitemmodels-kf6 + kjobwidgets-kf6 + kpimtextedit-kf6 + ktextwidgets-kf6 + akonadi-mime-kf6 + kcalendarcore-kf6 + kconfigwidgets-kf6 + kmailtransport-kf6 + kwidgetsaddons-kf6 + calendarsupport-kf6 + akonadi-contacts-kf6 + akonadi-calendar-kf6 + kidentitymanagement-kf6 + qt6-base + + + /etc/xdg + /usr/lib + /usr/lib/qt6 + /usr/share + /usr/share/doc + /usr/share/locale + + + + + incidenceeditor-kf6-devel + Development files for incidenceeditor-kf6. + + incidenceeditor-kf6 + + + /usr/include + /usr/lib/pkgconfig + /usr/lib/cmake + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/kdepim-runtime-kf6/actions.py b/desktop/kde6/applications/kdepim-runtime-kf6/actions.py new file mode 100755 index 0000000000..23b2227864 --- /dev/null +++ b/desktop/kde6/applications/kdepim-runtime-kf6/actions.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import kde6 +from pisi.actionsapi import pisitools + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + pisitools.dodoc("LICENSES/*") diff --git a/desktop/kde6/applications/kdepim-runtime-kf6/files/2fd3604a.patch b/desktop/kde6/applications/kdepim-runtime-kf6/files/2fd3604a.patch new file mode 100644 index 0000000000..4bc3bfba37 --- /dev/null +++ b/desktop/kde6/applications/kdepim-runtime-kf6/files/2fd3604a.patch @@ -0,0 +1,60 @@ +From 2fd3604ad6a9594b9dd8b0f1529f4f4589fe831f Mon Sep 17 00:00:00 2001 +From: Carl Schwan +Date: Tue, 19 Sep 2023 17:04:36 +0200 +Subject: [PATCH] Revert "Revert "Fix race condition when building"" + +This reverts commit d3f20b3dab530065f9cff9d73e4ca1076af55a29. + +(cherry picked from commit f9f262b9289f7b1c34e55205fa0c5cde915bc652) +--- + resources/google-groupware/CMakeLists.txt | 7 ++++--- + resources/google-groupware/googleresource.cpp | 1 - + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/resources/google-groupware/CMakeLists.txt b/resources/google-groupware/CMakeLists.txt +index 2f2b46aded..0ac6f2db8e 100644 +--- a/resources/google-groupware/CMakeLists.txt ++++ b/resources/google-groupware/CMakeLists.txt +@@ -67,9 +67,6 @@ set(googleresource_SRCS + ${googleresource_common_SRCS} + ) + +-ki18n-kf6_wrap_ui(googleresource_SRCS googlesettingswidget.ui) +- +- + add_executable(akonadi_google_resource ${googleresource_SRCS}) + if (COMPILE_WITH_UNITY_CMAKE_SUPPORT) + set_target_properties(akonadi_google_resource PROPERTIES UNITY_BUILD ON) +@@ -126,6 +123,7 @@ install( + kcoreaddons-kf6_add_plugin(googleconfig + INSTALL_NAMESPACE "pim${QT_MAJOR_VERSION}/akonadi/config" + ) ++ + target_sources(googleconfig + PRIVATE + googleconfig.cpp +@@ -133,6 +131,9 @@ PRIVATE + googlesettingswidget.h + ${googleresource_common_SRCS} + ) ++ ++ki18n-kf6_wrap_ui(googleconfig googlesettingswidget.ui) ++ + target_link_libraries(googleconfig + KPim${KF_MAJOR_VERSION}::AkonadiCore + KPim${KF_MAJOR_VERSION}::AkonadiCalendar +diff --git a/resources/google-groupware/googleresource.cpp b/resources/google-groupware/googleresource.cpp +index 47a7e0c8d5..d51c1e4a7c 100644 +--- a/resources/google-groupware/googleresource.cpp ++++ b/resources/google-groupware/googleresource.cpp +@@ -11,7 +11,6 @@ + #include "googleresourcestate.h" + #include "googlescopes.h" + #include "googlesettings.h" +-#include "googlesettingswidget.h" + #include "settingsadaptor.h" + + #include "personhandler.h" +-- +GitLab + diff --git a/desktop/kde6/applications/kdepim-runtime-kf6/files/c99afc75.patch b/desktop/kde6/applications/kdepim-runtime-kf6/files/c99afc75.patch new file mode 100644 index 0000000000..6ebb69222c --- /dev/null +++ b/desktop/kde6/applications/kdepim-runtime-kf6/files/c99afc75.patch @@ -0,0 +1,120 @@ +From c99afc75a503fff6ca83df2f47a5d5d951579524 Mon Sep 17 00:00:00 2001 +From: Carl Schwan +Date: Tue, 19 Sep 2023 18:58:54 +0200 +Subject: [PATCH] Actually start job to read secret key + +BUG: 470820 +(cherry picked from commit 8393e92d56ecb31b2dd65d15d046f8e02565f5e3) +--- + resources/google-groupware/googleconfig.cpp | 8 +++++++- + resources/google-groupware/googlesettings.cpp | 15 +++++++++------ + .../google-groupware/googlesettingswidget.cpp | 3 +-- + 3 files changed, 17 insertions(+), 9 deletions(-) + +diff --git a/resources/google-groupware/googleconfig.cpp b/resources/google-groupware/googleconfig.cpp +index 2eb6ab2efa..1af177c81f 100644 +--- a/resources/google-groupware/googleconfig.cpp ++++ b/resources/google-groupware/googleconfig.cpp +@@ -6,6 +6,7 @@ + + #include + ++#include "googleresource_debug.h" + #include "googlesettings.h" + #include "googlesettingswidget.h" + +@@ -25,7 +26,12 @@ public: + void load() override + { + Akonadi::AgentConfigurationBase::load(); +- mWidget.loadSettings(); ++ mSettings.init(); ++ connect(&mSettings, &GoogleSettings::accountReady, this, [this](bool ready) { ++ if (ready) { ++ mWidget.loadSettings(); ++ } ++ }); + } + + Q_REQUIRED_RESULT bool save() const override +diff --git a/resources/google-groupware/googlesettings.cpp b/resources/google-groupware/googlesettings.cpp +index aa94cad1ab..23a9979895 100644 +--- a/resources/google-groupware/googlesettings.cpp ++++ b/resources/google-groupware/googlesettings.cpp +@@ -32,7 +32,6 @@ static const QString googleWalletFolder = QStringLiteral("Akonadi Google"); + GoogleSettings::GoogleSettings(const KSharedConfigPtr &config, Options options) + : SettingsBase(config) + { +- qDebug() << config; + if (options & Option::ExportToDBus) { + new SettingsAdaptor(this); + QDBusConnection::sessionBus().registerObject(QStringLiteral("/Settings"), +@@ -44,9 +43,11 @@ GoogleSettings::GoogleSettings(const KSharedConfigPtr &config, Options options) + void GoogleSettings::init() + { + // First read from QtKeyChain +- auto job = new QKeychain::ReadPasswordJob(googleWalletFolder); ++ auto job = new QKeychain::ReadPasswordJob(googleWalletFolder, this); ++ job->setKey(account()); + connect(job, &QKeychain::Job::finished, this, [this, job]() { + if (job->error() != QKeychain::Error::NoError) { ++ qCWarning(GOOGLE_LOG) << "Unable to read password" << job->error(); + Q_EMIT accountReady(false); + return; + } +@@ -54,18 +55,19 @@ void GoogleSettings::init() + // Found something with QtKeyChain + if (!account().isEmpty()) { + m_account = fetchAccountFromKeychain(account(), job); ++ m_isReady = true; ++ Q_EMIT accountReady(true); + } +- m_isReady = true; +- Q_EMIT accountReady(true); + }); ++ job->start(); + } + + KGAPI2::AccountPtr GoogleSettings::fetchAccountFromKeychain(const QString &accountName, QKeychain::ReadPasswordJob *job) + { + QMap map; + auto value = job->binaryData(); +- if (!value.isEmpty()) { +- qCDebug(GOOGLE_LOG) << "Account" << accountName << "not found in kwallet-kf6"; ++ if (value.isEmpty()) { ++ qCWarning(GOOGLE_LOG) << "Account" << accountName << "not found in kwallet-kf6"; + return {}; + } + +@@ -116,6 +118,7 @@ WritePasswordJob *GoogleSettings::storeAccount(AccountPtr account) + + connect(writeJob, &WritePasswordJob::finished, this, [this, writeJob]() { + if (writeJob->error()) { ++ qCWarning(GOOGLE_LOG) << "Unable to write password" << writeJob->error(); + return; + } + SettingsBase::setAccount(m_account->accountName()); +diff --git a/resources/google-groupware/googlesettingswidget.cpp b/resources/google-groupware/googlesettingswidget.cpp +index 2543c4c6b8..8e84cfbabd 100644 +--- a/resources/google-groupware/googlesettingswidget.cpp ++++ b/resources/google-groupware/googlesettingswidget.cpp +@@ -36,7 +36,6 @@ GoogleSettingsWidget::GoogleSettingsWidget(GoogleSettings &settings, const QStri + , m_settings(settings) + , m_identifier(identifier) + { +- qDebug() << m_settings.account(); + auto mainLayout = new QVBoxLayout(this); + + auto mainWidget = new QWidget(this); +@@ -83,7 +82,7 @@ bool GoogleSettingsWidget::handleError(KGAPI2::Job *job) + } + + if (job->error() == KGAPI2::Unauthorized) { +- qCDebug(GOOGLE_LOG) << job << job->errorString(); ++ qWarning() << job << job->errorString(); + const QList resourceScopes = googleScopes(); + for (const QUrl &scope : resourceScopes) { + if (!m_account->scopes().contains(scope)) { +-- +GitLab + diff --git a/desktop/kde6/applications/kdepim-runtime-kf6/files/fb0d78fb.patch b/desktop/kde6/applications/kdepim-runtime-kf6/files/fb0d78fb.patch new file mode 100644 index 0000000000..c2b0f54fe1 --- /dev/null +++ b/desktop/kde6/applications/kdepim-runtime-kf6/files/fb0d78fb.patch @@ -0,0 +1,1302 @@ +From fb0d78fb3bcfce5bd4ff7f51e4cd1405693e0275 Mon Sep 17 00:00:00 2001 +From: Carl Schwan +Date: Tue, 19 Sep 2023 17:04:13 +0200 +Subject: [PATCH] Revert "Revert "Use config plugin instead of out of process + config dialog"" + +This reverts commit f33496a346f49e95caaf7f664ef2f91e4b7f3ddb. + +(cherry picked from commit a17ef55dbe31e2020e96f66cd7021578ed8b5444) +--- + resources/google-groupware/CMakeLists.txt | 93 ++++-- + resources/google-groupware/googleconfig.cpp | 43 +++ + resources/google-groupware/googleconfig.json | 5 + + resources/google-groupware/googleresource.cpp | 95 ++---- + resources/google-groupware/googleresource.h | 4 +- + resources/google-groupware/googlescopes.cpp | 19 ++ + resources/google-groupware/googlescopes.h | 10 + + resources/google-groupware/googlesettings.cpp | 22 +- + resources/google-groupware/googlesettings.h | 11 +- + .../google-groupware/googlesettingsdialog.cpp | 305 ------------------ + .../google-groupware/googlesettingswidget.cpp | 288 +++++++++++++++++ + ...ettingsdialog.h => googlesettingswidget.h} | 29 +- + ...tingsdialog.ui => googlesettingswidget.ui} | 2 +- + resources/google-groupware/settingsbase.kcfg | 2 +- + 14 files changed, 505 insertions(+), 423 deletions(-) + create mode 100644 resources/google-groupware/googleconfig.cpp + create mode 100644 resources/google-groupware/googleconfig.json + create mode 100644 resources/google-groupware/googlescopes.cpp + create mode 100644 resources/google-groupware/googlescopes.h + delete mode 100644 resources/google-groupware/googlesettingsdialog.cpp + create mode 100644 resources/google-groupware/googlesettingswidget.cpp + rename resources/google-groupware/{googlesettingsdialog.h => googlesettingswidget.h} (53%) + rename resources/google-groupware/{googlesettingsdialog.ui => googlesettingswidget.ui} (99%) + +diff --git a/resources/google-groupware/CMakeLists.txt b/resources/google-groupware/CMakeLists.txt +index babf58a953..2f2b46aded 100644 +--- a/resources/google-groupware/CMakeLists.txt ++++ b/resources/google-groupware/CMakeLists.txt +@@ -1,67 +1,75 @@ + add_definitions(-DTRANSLATION_DOMAIN=\"akonadi_google_resource\") + +-set(googleresource_SRCS +- googleresource.cpp ++set(googleresource_common_SRCS + googlesettings.cpp +- googlesettingsdialog.cpp +- defaultreminderattribute.cpp +- googleresourcestate.cpp +- generichandler.cpp +- calendarhandler.cpp +- taskhandler.cpp +- peopleconversionjob.cpp +- personhandler.cpp +- googleresource.h + googlesettings.h +- googlesettingsdialog.h +- defaultreminderattribute.h +- googleresourcestate.h +- generichandler.h +- calendarhandler.h +- taskhandler.h +- peopleconversionjob.h +- personhandler.h +- ) ++ googlescopes.h ++ googlescopes.cpp ++) + +-ecm_qt_declare_logging_category(googleresource_SRCS ++ecm_qt_declare_logging_category(googleresource_common_SRCS + HEADER googleresource_debug.h + IDENTIFIER GOOGLE_LOG + CATEGORY_NAME org.kde.pim.google + DESCRIPTION "resource google (kdepim-runtime-kf6)" + EXPORT KDEPIMRUNTIME) +-ecm_qt_declare_logging_category(googleresource_SRCS ++ecm_qt_declare_logging_category(googleresource_common_SRCS + HEADER googlecalendar_debug.h + IDENTIFIER GOOGLE_CALENDAR_LOG + CATEGORY_NAME org.kde.pim.google.calendar + DESCRIPTION "resource google calendar (kdepim-runtime-kf6)" + EXPORT KDEPIMRUNTIME) +-ecm_qt_declare_logging_category(googleresource_SRCS ++ecm_qt_declare_logging_category(googleresource_common_SRCS + HEADER googletasks_debug.h + IDENTIFIER GOOGLE_TASKS_LOG + CATEGORY_NAME org.kde.pim.google.tasks + DESCRIPTION "resource google tasks (kdepim-runtime-kf6)" + EXPORT KDEPIMRUNTIME) +-ecm_qt_declare_logging_category(googleresource_SRCS ++ecm_qt_declare_logging_category(googleresource_common_SRCS + HEADER googlepeople_debug.h + IDENTIFIER GOOGLE_PEOPLE_LOG + CATEGORY_NAME org.kde.pim.google.people + DESCRIPTION "resource google people (kdepim-runtime-kf6)" + EXPORT KDEPIMRUNTIME) + +-ki18n-kf6_wrap_ui(googleresource_SRCS googlesettingsdialog.ui) + +-kconfig-kf6_add_kcfg_files(googleresource_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/settingsbase.kcfgc) ++kconfig-kf6_add_kcfg_files(googleresource_common_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/settingsbase.kcfgc) + + kcfg_generate_dbus_interface( + ${CMAKE_CURRENT_SOURCE_DIR}/settingsbase.kcfg + org.kde.Akonadi.Google.Settings + ) + +-qt_add_dbus_adaptor(googleresource_SRCS ++qt_add_dbus_adaptor(googleresource_common_SRCS + ${CMAKE_CURRENT_BINARY_DIR}/org.kde.Akonadi.Google.Settings.xml + ${CMAKE_CURRENT_SOURCE_DIR}/googlesettings.h GoogleSettings + ) + ++############################# Resource ################################# ++set(googleresource_SRCS ++ googleresource.cpp ++ defaultreminderattribute.cpp ++ googleresourcestate.cpp ++ generichandler.cpp ++ calendarhandler.cpp ++ taskhandler.cpp ++ peopleconversionjob.cpp ++ personhandler.cpp ++ googleresource.h ++ googlesettings.h ++ defaultreminderattribute.h ++ googleresourcestate.h ++ generichandler.h ++ calendarhandler.h ++ taskhandler.h ++ peopleconversionjob.h ++ personhandler.h ++ ${googleresource_common_SRCS} ++) ++ ++ki18n-kf6_wrap_ui(googleresource_SRCS googlesettingswidget.ui) ++ ++ + add_executable(akonadi_google_resource ${googleresource_SRCS}) + if (COMPILE_WITH_UNITY_CMAKE_SUPPORT) + set_target_properties(akonadi_google_resource PROPERTIES UNITY_BUILD ON) +@@ -112,3 +120,34 @@ install( + FILES akonadi_google_resource.notifyrc + DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR} + ) ++ ++################################ Config plugin ############################### ++ ++kcoreaddons-kf6_add_plugin(googleconfig ++ INSTALL_NAMESPACE "pim${QT_MAJOR_VERSION}/akonadi/config" ++) ++target_sources(googleconfig ++PRIVATE ++ googleconfig.cpp ++ googlesettingswidget.cpp ++ googlesettingswidget.h ++ ${googleresource_common_SRCS} ++) ++target_link_libraries(googleconfig ++ KPim${KF_MAJOR_VERSION}::AkonadiCore ++ KPim${KF_MAJOR_VERSION}::AkonadiCalendar ++ KPim${KF_MAJOR_VERSION}::AkonadiCore ++ KPim${KF_MAJOR_VERSION}::AkonadiAgentBase ++ KF${KF_MAJOR_VERSION}::CalendarCore ++ KF${KF_MAJOR_VERSION}::Contacts ++ KF${KF_MAJOR_VERSION}::Wallet ++ KF${KF_MAJOR_VERSION}::I18n ++ KF${KF_MAJOR_VERSION}::WindowSystem ++ KF${KF_MAJOR_VERSION}::TextWidgets ++ KF${KF_MAJOR_VERSION}::Notifications ++ KPim${KF_MAJOR_VERSION}::GAPICalendar ++ KPim${KF_MAJOR_VERSION}::GAPIPeople ++ KPim${KF_MAJOR_VERSION}::GAPICore ++ KPim${KF_MAJOR_VERSION}::GAPITasks ++ qt${KF_MAJOR_VERSION}keychain ++) +diff --git a/resources/google-groupware/googleconfig.cpp b/resources/google-groupware/googleconfig.cpp +new file mode 100644 +index 0000000000..2eb6ab2efa +--- /dev/null ++++ b/resources/google-groupware/googleconfig.cpp +@@ -0,0 +1,43 @@ ++/* ++ SPDX-FileCopyrightText: 2018 Daniel Vrátil ++ ++ SPDX-License-Identifier: LGPL-2.0-or-later ++*/ ++ ++#include ++ ++#include "googlesettings.h" ++#include "googlesettingswidget.h" ++ ++class GoogleConfig : public Akonadi::AgentConfigurationBase ++{ ++ Q_OBJECT ++ ++public: ++ explicit GoogleConfig(const KSharedConfigPtr &config, QWidget *parent, const QVariantList &list) ++ : Akonadi::AgentConfigurationBase(config, parent, list) ++ , mSettings(config, GoogleSettings::Option::NoOption) ++ , mWidget(mSettings, identifier(), parent) ++ { ++ connect(&mWidget, &GoogleSettingsWidget::okEnabled, this, &Akonadi::AgentConfigurationBase::enableOkButton); ++ } ++ ++ void load() override ++ { ++ Akonadi::AgentConfigurationBase::load(); ++ mWidget.loadSettings(); ++ } ++ ++ Q_REQUIRED_RESULT bool save() const override ++ { ++ const_cast(this)->mWidget.saveSettings(); ++ return Akonadi::AgentConfigurationBase::save(); ++ } ++ ++ GoogleSettings mSettings; ++ GoogleSettingsWidget mWidget; ++}; ++ ++AKONADI_AGENTCONFIG_FACTORY(GoogleConfigFactory, "googleconfig.json", GoogleConfig) ++ ++#include "googleconfig.moc" +diff --git a/resources/google-groupware/googleconfig.json b/resources/google-groupware/googleconfig.json +new file mode 100644 +index 0000000000..69c76f583f +--- /dev/null ++++ b/resources/google-groupware/googleconfig.json +@@ -0,0 +1,5 @@ ++{ ++ "X-Akonadi-PluginType": "AgentConfig", ++ "X-Akonadi-Library": "googleconfig", ++ "X-Akonadi-AgentConfig-Type": "akonadi_google_resource" ++} +\ No newline at end of file +diff --git a/resources/google-groupware/googleresource.cpp b/resources/google-groupware/googleresource.cpp +index b40f093dde..47a7e0c8d5 100644 +--- a/resources/google-groupware/googleresource.cpp ++++ b/resources/google-groupware/googleresource.cpp +@@ -9,8 +9,9 @@ + #include "googleresource.h" + #include "googleresource_debug.h" + #include "googleresourcestate.h" ++#include "googlescopes.h" + #include "googlesettings.h" +-#include "googlesettingsdialog.h" ++#include "googlesettingswidget.h" + #include "settingsadaptor.h" + + #include "personhandler.h" +@@ -67,8 +68,11 @@ bool accountIsValid(const KGAPI2::AccountPtr &account) + GoogleResource::GoogleResource(const QString &id) + : ResourceBase(id) + , AgentBase::ObserverV3() ++ , m_settings(KSharedConfig::openConfig()) + , m_iface(new GoogleResourceState(this)) + { ++ m_settings.setResourceId(identifier()); ++ + AttributeFactory::registerAttribute(); + + connect(this, &GoogleResource::reloadConfiguration, this, &GoogleResource::reloadConfig); +@@ -83,9 +87,7 @@ GoogleResource::GoogleResource(const QString &id) + + Q_EMIT status(NotConfigured, i18n("Fetching password...")); + +- m_settings = new GoogleSettings(); +- m_settings->setWindowId(winIdForDialogs()); +- connect(m_settings, &GoogleSettings::accountReady, this, [this](bool ready) { ++ connect(&m_settings, &GoogleSettings::accountReady, this, [this](bool ready) { + if (accountId() > 0) { + return; + } +@@ -94,7 +96,7 @@ GoogleResource::GoogleResource(const QString &id) + return; + } + +- const auto account = m_settings->accountPtr(); ++ const auto account = m_settings.accountPtr(); + if (account.isNull()) { + Q_EMIT status(NotConfigured); + return; +@@ -107,18 +109,15 @@ GoogleResource::GoogleResource(const QString &id) + synchronize(); + } + }); +- m_settings->init(); ++ m_settings.init(); + + updateResourceName(); + +- m_freeBusyHandler = std::make_unique(m_iface, m_settings); ++ m_freeBusyHandler = std::make_unique(m_iface, &m_settings); + m_handlers.clear(); +- m_handlers.push_back(GenericHandler::Ptr(new CalendarHandler(m_iface, m_settings))); +- m_handlers.push_back(GenericHandler::Ptr(new PersonHandler(m_iface, m_settings))); +- m_handlers.push_back(GenericHandler::Ptr(new TaskHandler(m_iface, m_settings))); +- +- new SettingsAdaptor(m_settings); +- QDBusConnection::sessionBus().registerObject(QStringLiteral("/Settings"), m_settings, QDBusConnection::ExportAdaptors); ++ m_handlers.push_back(GenericHandler::Ptr(new CalendarHandler(m_iface, &m_settings))); ++ m_handlers.push_back(GenericHandler::Ptr(new PersonHandler(m_iface, &m_settings))); ++ m_handlers.push_back(GenericHandler::Ptr(new TaskHandler(m_iface, &m_settings))); + } + + GoogleResource::~GoogleResource() +@@ -128,7 +127,7 @@ GoogleResource::~GoogleResource() + + void GoogleResource::cleanup() + { +- m_settings->cleanup(); ++ m_settings.cleanup(); + ResourceBase::cleanup(); + } + +@@ -137,65 +136,30 @@ void GoogleResource::emitReadyStatus() + Q_EMIT status(Idle, i18nc("@info:status", "Ready")); + } + +-void GoogleResource::configure(WId windowId) +-{ +- if (!m_settings->isReady() || m_isConfiguring) { +- Q_EMIT configurationDialogAccepted(); +- return; +- } +- +- m_isConfiguring = true; +- +- QScopedPointer settingsDialog(new GoogleSettingsDialog(this, m_settings, windowId)); +- settingsDialog->setWindowIcon(QIcon::fromTheme(QStringLiteral("im-google"))); +- if (settingsDialog->exec() == QDialog::Accepted) { +- updateResourceName(); +- +- Q_EMIT configurationDialogAccepted(); +- +- if (m_settings->accountPtr().isNull()) { +- Q_EMIT status(NotConfigured, i18n("Configured account does not exist")); +- m_isConfiguring = false; +- return; +- } +- +- emitReadyStatus(); +- synchronize(); +- } else { +- updateResourceName(); +- +- Q_EMIT configurationDialogRejected(); +- } +- +- m_isConfiguring = false; +-} +- + QList GoogleResource::scopes() const + { + // TODO: determine it based on what user wants? +- const QList scopes = { +- Account::accountInfoScopeUrl(), +- Account::calendarScopeUrl(), +- Account::peopleScopeUrl(), +- Account::tasksScopeUrl(), +- }; +- return scopes; ++ return googleScopes(); + } + + void GoogleResource::updateResourceName() + { +- const QString accountName = m_settings->account(); ++ const QString accountName = m_settings.account(); + setName(i18nc("%1 is account name (user@gmail.com)", "Google Groupware (%1)", accountName.isEmpty() ? i18n("not configured") : accountName)); + } + + void GoogleResource::reloadConfig() + { +- const AccountPtr account = m_settings->accountPtr(); ++ updateResourceName(); ++ ++ const AccountPtr account = m_settings.accountPtr(); + if (account.isNull() || account->accountName().isEmpty()) { + Q_EMIT status(NotConfigured, i18n("Configured account does not exist")); +- } else { +- emitReadyStatus(); ++ return; + } ++ ++ emitReadyStatus(); ++ synchronize(); + } + + bool GoogleResource::handleError(KGAPI2::Job *job, bool _cancelTask) +@@ -231,7 +195,7 @@ bool GoogleResource::handleError(KGAPI2::Job *job, bool _cancelTask) + + void GoogleResource::runAuthJob(const KGAPI2::AccountPtr &account, const QVariant &args) + { +- auto authJob = new AuthJob(account, m_settings->clientId(), m_settings->clientSecret(), this); ++ auto authJob = new AuthJob(account, m_settings.clientId(), m_settings.clientSecret(), this); + authJob->setProperty(JOB_PROPERTY, args); + connect(authJob, &AuthJob::finished, this, &GoogleResource::slotAuthJobFinished); + } +@@ -264,7 +228,7 @@ void GoogleResource::requestAuthenticationFromUser(const KGAPI2::AccountPtr &acc + + bool GoogleResource::canPerformTask() + { +- if (!m_settings->accountPtr() && accountId() == 0) { ++ if (!m_settings.accountPtr() && accountId() == 0) { + cancelTask(i18nc("@info:status", "Resource is not configured")); + Q_EMIT status(NotConfigured, i18nc("@info:status", "Resource is not configured")); + return false; +@@ -289,10 +253,11 @@ void GoogleResource::slotAuthJobFinished(KGAPI2::Job *job) + + auto authJob = qobject_cast(job); + AccountPtr account = authJob->account(); +- auto writeJob = m_settings->storeAccount(account); ++ auto writeJob = m_settings.storeAccount(account); + connect(writeJob, &WritePasswordJob::finished, this, [job, account, writeJob]() { + if (writeJob->error()) { + qCWarning(GOOGLE_LOG) << "Failed to store account's password in secret storage" << writeJob->errorString(); ++ return; + } + + auto otherJob = job->property(JOB_PROPERTY).value(); +@@ -375,22 +340,22 @@ void GoogleResource::retrieveCollections() + + setCollectionStreamingEnabled(true); + CachePolicy cachePolicy; +- if (m_settings->enableIntervalCheck()) { ++ if (m_settings.enableIntervalCheck()) { + cachePolicy.setInheritFromParent(false); +- cachePolicy.setIntervalCheckTime(m_settings->intervalCheckTime()); ++ cachePolicy.setIntervalCheckTime(m_settings.intervalCheckTime()); + } + + // Setting up root collection + m_rootCollection = Collection(); + m_rootCollection.setContentMimeTypes({Collection::mimeType(), Collection::virtualMimeType()}); + m_rootCollection.setRemoteId(ROOT_COLLECTION_REMOTEID); +- m_rootCollection.setName(m_settings->accountPtr()->accountName()); ++ m_rootCollection.setName(m_settings.accountPtr()->accountName()); + m_rootCollection.setParentCollection(Collection::root()); + m_rootCollection.setRights(Collection::CanCreateCollection); + m_rootCollection.setCachePolicy(cachePolicy); + + auto attr = m_rootCollection.attribute(Collection::AddIfMissing); +- attr->setDisplayName(m_settings->accountPtr()->accountName()); ++ attr->setDisplayName(m_settings.accountPtr()->accountName()); + attr->setIconName(QStringLiteral("im-google")); + + collectionsRetrieved({m_rootCollection}); +diff --git a/resources/google-groupware/googleresource.h b/resources/google-groupware/googleresource.h +index 4609572756..75708afca4 100644 +--- a/resources/google-groupware/googleresource.h ++++ b/resources/google-groupware/googleresource.h +@@ -14,6 +14,7 @@ + + #include "calendarhandler.h" + #include "generichandler.h" ++#include "googlesettings.h" + + #define JOB_PROPERTY "_KGAPI2Job" + +@@ -37,7 +38,6 @@ public: + + void cleanup() override; + public Q_SLOTS: +- void configure(WId windowId) override; + void reloadConfig(); + + protected: +@@ -83,7 +83,7 @@ protected Q_SLOTS: + + private: + bool m_isConfiguring = false; +- GoogleSettings *m_settings = nullptr; ++ GoogleSettings m_settings; + Akonadi::Collection m_rootCollection; + + GoogleResourceState *const m_iface; +diff --git a/resources/google-groupware/googlescopes.cpp b/resources/google-groupware/googlescopes.cpp +new file mode 100644 +index 0000000000..9e565f7e33 +--- /dev/null ++++ b/resources/google-groupware/googlescopes.cpp +@@ -0,0 +1,19 @@ ++// SPDX-FileCopyrightText: 2011 Daniel Vrátil ++// SPDX-FileCopyrightText: 2023 Carl Schwan ++// SPDX-License-Identifier: GPL-3.0-or-later ++ ++#include "googlescopes.h" ++#include ++ ++using namespace KGAPI2; ++ ++QList googleScopes() ++{ ++ // TODO: determine it based on what user wants? ++ return { ++ Account::accountInfoScopeUrl(), ++ Account::calendarScopeUrl(), ++ Account::peopleScopeUrl(), ++ Account::tasksScopeUrl(), ++ }; ++} +diff --git a/resources/google-groupware/googlescopes.h b/resources/google-groupware/googlescopes.h +new file mode 100644 +index 0000000000..33bf579a89 +--- /dev/null ++++ b/resources/google-groupware/googlescopes.h +@@ -0,0 +1,10 @@ ++/* ++ SPDX-FileCopyrightText: 2011 Daniel Vrátil ++ SPDX-FileCopyrightText: 2023 Carl Schwan ++ SPDX-License-Identifier: GPL-3.0-or-later ++*/ ++ ++#include ++#include ++ ++QList googleScopes(); +diff --git a/resources/google-groupware/googlesettings.cpp b/resources/google-groupware/googlesettings.cpp +index 6a1785fcf9..aa94cad1ab 100644 +--- a/resources/google-groupware/googlesettings.cpp ++++ b/resources/google-groupware/googlesettings.cpp +@@ -8,6 +8,8 @@ + + #include "googlesettings.h" + #include "googleresource_debug.h" ++#include "googlescopes.h" ++#include "settingsadaptor.h" + + #include + #include +@@ -27,8 +29,16 @@ using namespace KGAPI2; + + static const QString googleWalletFolder = QStringLiteral("Akonadi Google"); + +-GoogleSettings::GoogleSettings() ++GoogleSettings::GoogleSettings(const KSharedConfigPtr &config, Options options) ++ : SettingsBase(config) + { ++ qDebug() << config; ++ if (options & Option::ExportToDBus) { ++ new SettingsAdaptor(this); ++ QDBusConnection::sessionBus().registerObject(QStringLiteral("/Settings"), ++ this, ++ QDBusConnection::ExportAdaptors | QDBusConnection::ExportScriptableContents); ++ } + } + + void GoogleSettings::init() +@@ -82,15 +92,17 @@ WritePasswordJob *GoogleSettings::storeAccount(AccountPtr account) + m_account = account; + + QStringList scopes; +- const QList urlScopes = m_account->scopes(); ++ const QList urlScopes = googleScopes(); + scopes.reserve(urlScopes.count()); + for (const QUrl &url : urlScopes) { + scopes << url.toString(); + } + +- const QMap map = {{QStringLiteral("accessToken"), m_account->accessToken()}, +- {QStringLiteral("refreshToken"), m_account->refreshToken()}, +- {QStringLiteral("scopes"), scopes.join(QLatin1Char(','))}}; ++ const QMap map = { ++ {QStringLiteral("accessToken"), m_account->accessToken()}, ++ {QStringLiteral("refreshToken"), m_account->refreshToken()}, ++ {QStringLiteral("scopes"), scopes.join(QLatin1Char(','))}, ++ }; + + // Legacy: store the map exactly like kwallet-kf6 is doing it + QByteArray mapData; +diff --git a/resources/google-groupware/googlesettings.h b/resources/google-groupware/googlesettings.h +index f689dc7748..0ec4c3c34e 100644 +--- a/resources/google-groupware/googlesettings.h ++++ b/resources/google-groupware/googlesettings.h +@@ -33,7 +33,14 @@ class GoogleSettings : public SettingsBase + Q_CLASSINFO("D-Bus Interface", "org.kde.Akonadi.Google.ExtendedSettings") + + public: +- GoogleSettings(); ++ enum class Option { ++ NoOption = 0, ++ ExportToDBus = 1, ++ }; ++ Q_DECLARE_FLAGS(Options, Option) ++ ++ explicit GoogleSettings(const KSharedConfigPtr &config, Options options = Option::ExportToDBus); ++ + void init(); + void setWindowId(WId id); + void setResourceId(const QString &resourceIdentifier); +@@ -50,9 +57,11 @@ public: + bool isReady() const; + QKeychain::WritePasswordJob *storeAccount(KGAPI2::AccountPtr account); + void cleanup(); ++ + Q_SIGNALS: + void accountReady(bool ready); + void accountChanged(); ++ void okEnabled(bool enabled); + + private: + void slotWalletOpened(bool success); +diff --git a/resources/google-groupware/googlesettingsdialog.cpp b/resources/google-groupware/googlesettingsdialog.cpp +deleted file mode 100644 +index d418652d6f..0000000000 +--- a/resources/google-groupware/googlesettingsdialog.cpp ++++ /dev/null +@@ -1,305 +0,0 @@ +-/* +- SPDX-FileCopyrightText: 2013 Daniel Vrátil +- SPDX-FileCopyrightText: 2020 Igor Poboiko +- +- SPDX-License-Identifier: GPL-3.0-or-later +-*/ +- +-#include "googlesettingsdialog.h" +-#include "googleresource.h" +-#include "googleresource_debug.h" +-#include "googlesettings.h" +-#include "ui_googlesettingsdialog.h" +- +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +-#include +-#else +-#include +-#endif +- +-using namespace QKeychain; +-using namespace KGAPI2; +- +-GoogleSettingsDialog::GoogleSettingsDialog(GoogleResource *resource, GoogleSettings *settings, WId wId) +- : QDialog() +- , m_resource(resource) +- , m_settings(settings) +- , m_ui(new Ui::GoogleSettingsDialog) +-{ +- if (wId) { +- setAttribute(Qt::WA_NativeWindow, true); +- kwindowsystem-kf6::setMainWindow(windowHandle(), wId); +- } +- auto mainLayout = new QVBoxLayout(this); +- +- auto mainWidget = new QWidget(this); +- mainLayout->addWidget(mainWidget); +- +- auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); +- QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); +- okButton->setDefault(true); +- okButton->setShortcut(Qt::CTRL | Qt::Key_Return); +- mainLayout->addWidget(buttonBox); +- +- m_ui->setupUi(mainWidget); +- +- m_ui->refreshSpinBox->setSuffix(ki18n-kf6p(" minute", " minutes")); +- m_ui->enableRefresh->setChecked(m_settings->enableIntervalCheck()); +- m_ui->refreshSpinBox->setEnabled(m_settings->enableIntervalCheck()); +- m_ui->refreshSpinBox->setValue(m_settings->intervalCheckTime()); +- +- m_ui->eventsLimitCombo->setMaximumDate(QDate::currentDate()); +- m_ui->eventsLimitCombo->setMinimumDate(QDate::fromString(QStringLiteral("2000-01-01"), Qt::ISODate)); +- m_ui->eventsLimitCombo->setOptions(KDateComboBox::EditDate | KDateComboBox::SelectDate | KDateComboBox::DatePicker | KDateComboBox::WarnOnInvalid); +- if (m_settings->eventsSince().isEmpty()) { +- const QString ds = QStringLiteral("%1-01-01").arg(QString::number(QDate::currentDate().year() - 3)); +- m_ui->eventsLimitCombo->setDate(QDate::fromString(ds, Qt::ISODate)); +- } else { +- m_ui->eventsLimitCombo->setDate(QDate::fromString(m_settings->eventsSince(), Qt::ISODate)); +- } +- +- connect(buttonBox, &QDialogButtonBox::accepted, this, &GoogleSettingsDialog::slotSaveSettings); +- connect(buttonBox, &QDialogButtonBox::rejected, this, &GoogleSettingsDialog::reject); +- connect(m_ui->reloadCalendarsBtn, &QPushButton::clicked, this, &GoogleSettingsDialog::slotReloadCalendars); +- connect(m_ui->reloadTaskListsBtn, &QPushButton::clicked, this, &GoogleSettingsDialog::slotReloadTaskLists); +- connect(m_ui->configureBtn, &QPushButton::clicked, this, &GoogleSettingsDialog::slotConfigure); +- if (m_settings->isReady()) { +- m_account = m_settings->accountPtr(); +- } +- connect(m_settings, &GoogleSettings::accountReady, this, [this](bool ready) { +- if (ready) { +- m_account = m_settings->accountPtr(); +- accountChanged(); +- } +- }); +- QMetaObject::invokeMethod(this, &GoogleSettingsDialog::accountChanged, Qt::QueuedConnection); +-} +- +-GoogleSettingsDialog::~GoogleSettingsDialog() +-{ +- delete m_ui; +-} +- +-bool GoogleSettingsDialog::handleError(KGAPI2::Job *job) +-{ +- if ((job->error() == KGAPI2::NoError) || (job->error() == KGAPI2::OK)) { +- return true; +- } +- +- if (job->error() == KGAPI2::Unauthorized) { +- qCDebug(GOOGLE_LOG) << job << job->errorString(); +- const QList resourceScopes = m_resource->scopes(); +- for (const QUrl &scope : resourceScopes) { +- if (!m_account->scopes().contains(scope)) { +- m_account->addScope(scope); +- } +- } +- +- auto authJob = new AuthJob(m_account, m_settings->clientId(), m_settings->clientSecret(), this); +- authJob->setProperty(JOB_PROPERTY, QVariant::fromValue(job)); +- connect(authJob, &AuthJob::finished, this, &GoogleSettingsDialog::slotAuthJobFinished); +- +- return false; +- } +- +- KMessageBox::error(this, job->errorString()); +- return false; +-} +- +-void GoogleSettingsDialog::accountChanged() +-{ +- if (!m_account) { +- m_ui->accountLabel->setText(i18n("not configured")); +- m_ui->calendarsList->setDisabled(true); +- m_ui->reloadCalendarsBtn->setDisabled(true); +- m_ui->calendarsList->clear(); +- m_ui->taskListsList->setDisabled(true); +- m_ui->reloadTaskListsBtn->setDisabled(true); +- m_ui->taskListsList->clear(); +- return; +- } +- m_ui->accountLabel->setText(QStringLiteral("%1").arg(m_account->accountName())); +- slotReloadCalendars(); +- slotReloadTaskLists(); +-} +- +-void GoogleSettingsDialog::slotConfigure() +-{ +- const QString username = m_account && !m_account->accountName().isEmpty() ? m_account->accountName() : QString(); +- m_account = AccountPtr(new Account()); +- const QList resourceScopes = m_resource->scopes(); +- for (const QUrl &scope : resourceScopes) { +- if (!m_account->scopes().contains(scope)) { +- m_account->addScope(scope); +- } +- } +- auto authJob = new AuthJob(m_account, m_settings->clientId(), m_settings->clientSecret()); +- authJob->setUsername(username); +- connect(authJob, &AuthJob::finished, this, &GoogleSettingsDialog::slotAuthJobFinished); +-} +- +-void GoogleSettingsDialog::slotAuthJobFinished(KGAPI2::Job *job) +-{ +- auto authJob = qobject_cast(job); +- m_account = authJob->account(); +- if (authJob->error() != KGAPI2::NoError) { +- KMessageBox::error(this, authJob->errorString()); +- return; +- } +- accountChanged(); +- +- auto otherJob = job->property(JOB_PROPERTY).value(); +- if (otherJob) { +- otherJob->setAccount(m_account); +- otherJob->restart(); +- } +-} +- +-void GoogleSettingsDialog::slotSaveSettings() +-{ +- auto reset = [this] { +- m_settings->setAccount({}); +- m_settings->setEnableIntervalCheck(m_ui->enableRefresh->isChecked()); +- m_settings->setIntervalCheckTime(m_ui->refreshSpinBox->value()); +- m_settings->setCalendars({}); +- m_settings->setTaskLists({}); +- m_settings->setEventsSince({}); +- m_settings->save(); +- }; +- +- if (!m_account) { +- reset(); +- return; +- } +- +- auto writeJob = m_settings->storeAccount(m_account); +- connect(writeJob, &WritePasswordJob::finished, this, [this, reset, writeJob]() { +- if (writeJob->error()) { +- qCWarning(GOOGLE_LOG) << "Failed to store account's password in secret storage" << writeJob->errorString(); +- reset(); +- return; +- } +- +- m_settings->setAccount(m_account->accountName()); +- m_settings->setEnableIntervalCheck(m_ui->enableRefresh->isChecked()); +- m_settings->setIntervalCheckTime(m_ui->refreshSpinBox->value()); +- +- QStringList calendars; +- for (int i = 0; i < m_ui->calendarsList->count(); i++) { +- QListWidgetItem *item = m_ui->calendarsList->item(i); +- +- if (item->checkState() == Qt::Checked) { +- calendars.append(item->data(Qt::UserRole).toString()); +- } +- } +- m_settings->setCalendars(calendars); +- +- if (m_ui->eventsLimitCombo->isValid()) { +- m_settings->setEventsSince(m_ui->eventsLimitCombo->date().toString(Qt::ISODate)); +- } +- +- QStringList taskLists; +- for (int i = 0; i < m_ui->taskListsList->count(); i++) { +- QListWidgetItem *item = m_ui->taskListsList->item(i); +- +- if (item->checkState() == Qt::Checked) { +- taskLists.append(item->data(Qt::UserRole).toString()); +- } +- } +- m_settings->setTaskLists(taskLists); +- m_settings->save(); +- +- accept(); +- }); +-} +- +-void GoogleSettingsDialog::slotReloadCalendars() +-{ +- m_ui->calendarsList->setDisabled(true); +- m_ui->reloadCalendarsBtn->setDisabled(true); +- m_ui->calendarsList->clear(); +- +- if (!m_account) { +- return; +- } +- +- auto fetchJob = new CalendarFetchJob(m_account, this); +- connect(fetchJob, &CalendarFetchJob::finished, this, [this](KGAPI2::Job *job) { +- if (!handleError(job) || !m_account) { +- m_ui->calendarsList->setEnabled(false); +- m_ui->reloadCalendarsBtn->setEnabled(false); +- return; +- } +- +- const ObjectsList objects = qobject_cast(job)->items(); +- +- QStringList activeCalendars; +- if (m_account->accountName() == m_settings->account()) { +- activeCalendars = m_settings->calendars(); +- } +- m_ui->calendarsList->clear(); +- for (const ObjectPtr &object : objects) { +- const CalendarPtr calendar = object.dynamicCast(); +- +- auto item = new QListWidgetItem(calendar->title()); +- item->setData(Qt::UserRole, calendar->uid()); +- item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable); +- item->setCheckState((activeCalendars.isEmpty() || activeCalendars.contains(calendar->uid())) ? Qt::Checked : Qt::Unchecked); +- m_ui->calendarsList->addItem(item); +- } +- +- m_ui->calendarsList->setEnabled(true); +- m_ui->reloadCalendarsBtn->setEnabled(true); +- }); +-} +- +-void GoogleSettingsDialog::slotReloadTaskLists() +-{ +- if (!m_account) { +- return; +- } +- +- m_ui->taskListsList->setDisabled(true); +- m_ui->reloadTaskListsBtn->setDisabled(true); +- m_ui->taskListsList->clear(); +- +- auto job = new TaskListFetchJob(m_account, this); +- connect(job, &TaskListFetchJob::finished, this, [this](KGAPI2::Job *job) { +- if (!handleError(job) || !m_account) { +- m_ui->taskListsList->setDisabled(true); +- m_ui->reloadTaskListsBtn->setDisabled(true); +- return; +- } +- +- const ObjectsList objects = qobject_cast(job)->items(); +- +- QStringList activeTaskLists; +- if (m_account->accountName() == m_settings->account()) { +- activeTaskLists = m_settings->taskLists(); +- } +- m_ui->taskListsList->clear(); +- for (const ObjectPtr &object : objects) { +- const TaskListPtr taskList = object.dynamicCast(); +- +- auto item = new QListWidgetItem(taskList->title()); +- item->setData(Qt::UserRole, taskList->uid()); +- item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable); +- item->setCheckState((activeTaskLists.isEmpty() || activeTaskLists.contains(taskList->uid())) ? Qt::Checked : Qt::Unchecked); +- m_ui->taskListsList->addItem(item); +- } +- +- m_ui->taskListsList->setEnabled(true); +- m_ui->reloadTaskListsBtn->setEnabled(true); +- }); +-} +diff --git a/resources/google-groupware/googlesettingswidget.cpp b/resources/google-groupware/googlesettingswidget.cpp +new file mode 100644 +index 0000000000..2543c4c6b8 +--- /dev/null ++++ b/resources/google-groupware/googlesettingswidget.cpp +@@ -0,0 +1,288 @@ ++/* ++ SPDX-FileCopyrightText: 2013 Daniel Vrátil ++ SPDX-FileCopyrightText: 2020 Igor Poboiko ++ ++ SPDX-License-Identifier: GPL-3.0-or-later ++*/ ++ ++#include "googlesettingswidget.h" ++#include "googleresource.h" ++#include "googleresource_debug.h" ++#include "googlescopes.h" ++#include "googlesettings.h" ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) ++#include ++#else ++#include ++#endif ++ ++using namespace QKeychain; ++using namespace KGAPI2; ++ ++GoogleSettingsWidget::GoogleSettingsWidget(GoogleSettings &settings, const QString &identifier, QWidget *parent) ++ : QWidget(parent) ++ , m_settings(settings) ++ , m_identifier(identifier) ++{ ++ qDebug() << m_settings.account(); ++ auto mainLayout = new QVBoxLayout(this); ++ ++ auto mainWidget = new QWidget(this); ++ mainLayout->addWidget(mainWidget); ++ setupUi(mainWidget); ++ ++ refreshSpinBox->setSuffix(ki18n-kf6p(" minute", " minutes")); ++ enableRefresh->setChecked(m_settings.enableIntervalCheck()); ++ refreshSpinBox->setEnabled(m_settings.enableIntervalCheck()); ++ refreshSpinBox->setValue(m_settings.intervalCheckTime()); ++ ++ eventsLimitCombo->setMaximumDate(QDate::currentDate()); ++ eventsLimitCombo->setMinimumDate(QDate::fromString(QStringLiteral("2000-01-01"), Qt::ISODate)); ++ eventsLimitCombo->setOptions(KDateComboBox::EditDate | KDateComboBox::SelectDate | KDateComboBox::DatePicker | KDateComboBox::WarnOnInvalid); ++ if (m_settings.eventsSince().isEmpty()) { ++ const QString ds = QStringLiteral("%1-01-01").arg(QString::number(QDate::currentDate().year() - 3)); ++ eventsLimitCombo->setDate(QDate::fromString(ds, Qt::ISODate)); ++ } else { ++ eventsLimitCombo->setDate(QDate::fromString(m_settings.eventsSince(), Qt::ISODate)); ++ } ++ connect(reloadCalendarsBtn, &QPushButton::clicked, this, &GoogleSettingsWidget::slotReloadCalendars); ++ connect(reloadTaskListsBtn, &QPushButton::clicked, this, &GoogleSettingsWidget::slotReloadTaskLists); ++ connect(configureBtn, &QPushButton::clicked, this, &GoogleSettingsWidget::loadSettings); ++ if (m_settings.isReady()) { ++ m_account = m_settings.accountPtr(); ++ } ++ connect(&m_settings, &GoogleSettings::accountReady, this, [this](bool ready) { ++ if (ready) { ++ m_account = m_settings.accountPtr(); ++ accountChanged(); ++ } ++ }); ++ QMetaObject::invokeMethod(this, &GoogleSettingsWidget::accountChanged, Qt::QueuedConnection); ++} ++ ++GoogleSettingsWidget::~GoogleSettingsWidget() ++{ ++} ++ ++bool GoogleSettingsWidget::handleError(KGAPI2::Job *job) ++{ ++ if ((job->error() == KGAPI2::NoError) || (job->error() == KGAPI2::OK)) { ++ return true; ++ } ++ ++ if (job->error() == KGAPI2::Unauthorized) { ++ qCDebug(GOOGLE_LOG) << job << job->errorString(); ++ const QList resourceScopes = googleScopes(); ++ for (const QUrl &scope : resourceScopes) { ++ if (!m_account->scopes().contains(scope)) { ++ m_account->addScope(scope); ++ } ++ } ++ ++ auto authJob = new AuthJob(m_account, m_settings.clientId(), m_settings.clientSecret(), this); ++ authJob->setProperty(JOB_PROPERTY, QVariant::fromValue(job)); ++ connect(authJob, &AuthJob::finished, this, &GoogleSettingsWidget::slotAuthJobFinished); ++ ++ return false; ++ } ++ ++ KMessageBox::error(this, job->errorString()); ++ return false; ++} ++ ++void GoogleSettingsWidget::accountChanged() ++{ ++ if (!m_account) { ++ accountLabel->setText(i18n("not configured")); ++ calendarsList->setDisabled(true); ++ reloadCalendarsBtn->setDisabled(true); ++ calendarsList->clear(); ++ taskListsList->setDisabled(true); ++ reloadTaskListsBtn->setDisabled(true); ++ taskListsList->clear(); ++ return; ++ } ++ accountLabel->setText(QStringLiteral("%1").arg(m_account->accountName())); ++ slotReloadCalendars(); ++ slotReloadTaskLists(); ++} ++ ++void GoogleSettingsWidget::loadSettings() ++{ ++ const QString username = m_account && !m_account->accountName().isEmpty() ? m_account->accountName() : QString(); ++ m_account = AccountPtr(new Account()); ++ const QList resourceScopes = googleScopes(); ++ for (const QUrl &scope : resourceScopes) { ++ if (!m_account->scopes().contains(scope)) { ++ m_account->addScope(scope); ++ } ++ } ++ auto authJob = new AuthJob(m_account, m_settings.clientId(), m_settings.clientSecret()); ++ authJob->setUsername(username); ++ connect(authJob, &AuthJob::finished, this, &GoogleSettingsWidget::slotAuthJobFinished); ++} ++ ++void GoogleSettingsWidget::slotAuthJobFinished(KGAPI2::Job *job) ++{ ++ auto authJob = qobject_cast(job); ++ m_account = authJob->account(); ++ if (authJob->error() != KGAPI2::NoError) { ++ KMessageBox::error(this, authJob->errorString()); ++ return; ++ } ++ accountChanged(); ++ ++ auto otherJob = job->property(JOB_PROPERTY).value(); ++ if (otherJob) { ++ otherJob->setAccount(m_account); ++ otherJob->restart(); ++ } ++} ++ ++void GoogleSettingsWidget::saveSettings() ++{ ++ auto reset = [this] { ++ m_settings.setAccount({}); ++ m_settings.setEnableIntervalCheck(enableRefresh->isChecked()); ++ m_settings.setIntervalCheckTime(refreshSpinBox->value()); ++ m_settings.setCalendars({}); ++ m_settings.setTaskLists({}); ++ m_settings.setEventsSince({}); ++ m_settings.save(); ++ }; ++ ++ if (!m_account) { ++ reset(); ++ return; ++ } ++ ++ auto writeJob = m_settings.storeAccount(m_account); ++ connect(writeJob, &WritePasswordJob::finished, this, [this, reset, writeJob]() { ++ if (writeJob->error()) { ++ qCWarning(GOOGLE_LOG) << "Failed to store account's password in secret storage" << writeJob->errorString(); ++ reset(); ++ return; ++ } ++ ++ m_settings.setAccount(m_account->accountName()); ++ m_settings.setEnableIntervalCheck(enableRefresh->isChecked()); ++ m_settings.setIntervalCheckTime(refreshSpinBox->value()); ++ ++ QStringList calendars; ++ for (int i = 0; i < calendarsList->count(); i++) { ++ QListWidgetItem *item = calendarsList->item(i); ++ ++ if (item->checkState() == Qt::Checked) { ++ calendars.append(item->data(Qt::UserRole).toString()); ++ } ++ } ++ m_settings.setCalendars(calendars); ++ ++ if (eventsLimitCombo->isValid()) { ++ m_settings.setEventsSince(eventsLimitCombo->date().toString(Qt::ISODate)); ++ } ++ ++ QStringList taskLists; ++ for (int i = 0; i < taskListsList->count(); i++) { ++ QListWidgetItem *item = taskListsList->item(i); ++ ++ if (item->checkState() == Qt::Checked) { ++ taskLists.append(item->data(Qt::UserRole).toString()); ++ } ++ } ++ m_settings.setTaskLists(taskLists); ++ m_settings.save(); ++ }); ++} ++ ++void GoogleSettingsWidget::slotReloadCalendars() ++{ ++ calendarsList->setDisabled(true); ++ reloadCalendarsBtn->setDisabled(true); ++ calendarsList->clear(); ++ ++ if (!m_account) { ++ return; ++ } ++ ++ auto fetchJob = new CalendarFetchJob(m_account, this); ++ connect(fetchJob, &CalendarFetchJob::finished, this, [this](KGAPI2::Job *job) { ++ if (!handleError(job) || !m_account) { ++ calendarsList->setEnabled(false); ++ reloadCalendarsBtn->setEnabled(false); ++ return; ++ } ++ ++ const ObjectsList objects = qobject_cast(job)->items(); ++ ++ QStringList activeCalendars; ++ if (m_account->accountName() == m_settings.account()) { ++ activeCalendars = m_settings.calendars(); ++ } ++ calendarsList->clear(); ++ for (const ObjectPtr &object : objects) { ++ const CalendarPtr calendar = object.dynamicCast(); ++ ++ auto item = new QListWidgetItem(calendar->title()); ++ item->setData(Qt::UserRole, calendar->uid()); ++ item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable); ++ item->setCheckState((activeCalendars.isEmpty() || activeCalendars.contains(calendar->uid())) ? Qt::Checked : Qt::Unchecked); ++ calendarsList->addItem(item); ++ } ++ ++ calendarsList->setEnabled(true); ++ reloadCalendarsBtn->setEnabled(true); ++ }); ++} ++ ++void GoogleSettingsWidget::slotReloadTaskLists() ++{ ++ if (!m_account) { ++ return; ++ } ++ ++ taskListsList->setDisabled(true); ++ reloadTaskListsBtn->setDisabled(true); ++ taskListsList->clear(); ++ ++ auto job = new TaskListFetchJob(m_account, this); ++ connect(job, &TaskListFetchJob::finished, this, [this](KGAPI2::Job *job) { ++ if (!handleError(job) || !m_account) { ++ taskListsList->setDisabled(true); ++ reloadTaskListsBtn->setDisabled(true); ++ return; ++ } ++ ++ const ObjectsList objects = qobject_cast(job)->items(); ++ ++ QStringList activeTaskLists; ++ if (m_account->accountName() == m_settings.account()) { ++ activeTaskLists = m_settings.taskLists(); ++ } ++ taskListsList->clear(); ++ for (const ObjectPtr &object : objects) { ++ const TaskListPtr taskList = object.dynamicCast(); ++ ++ auto item = new QListWidgetItem(taskList->title()); ++ item->setData(Qt::UserRole, taskList->uid()); ++ item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable); ++ item->setCheckState((activeTaskLists.isEmpty() || activeTaskLists.contains(taskList->uid())) ? Qt::Checked : Qt::Unchecked); ++ taskListsList->addItem(item); ++ } ++ ++ taskListsList->setEnabled(true); ++ reloadTaskListsBtn->setEnabled(true); ++ }); ++} +diff --git a/resources/google-groupware/googlesettingsdialog.h b/resources/google-groupware/googlesettingswidget.h +similarity index 53% +rename from resources/google-groupware/googlesettingsdialog.h +rename to resources/google-groupware/googlesettingswidget.h +index a7d6ca0c92..4226a39d2d 100644 +--- a/resources/google-groupware/googlesettingsdialog.h ++++ b/resources/google-groupware/googlesettingswidget.h +@@ -7,40 +7,37 @@ + + #pragma once + ++#include "googlesettings.h" ++#include "ui_googlesettingswidget.h" + #include +-#include + +-namespace Ui +-{ +-class GoogleSettingsDialog; +-} + namespace KGAPI2 + { + class Job; + } +-class GoogleResource; +-class GoogleSettings; +- +-class GoogleSettingsDialog : public QDialog ++class GoogleSettingsWidget : public QWidget, private Ui::GoogleSettingsWidget + { + Q_OBJECT + public: +- explicit GoogleSettingsDialog(GoogleResource *resource, GoogleSettings *settings, WId wId); +- ~GoogleSettingsDialog() override; ++ explicit GoogleSettingsWidget(GoogleSettings &settings, const QString &identifier, QWidget *parent); ++ ~GoogleSettingsWidget() override; ++ ++ void loadSettings(); ++ void saveSettings(); ++ ++Q_SIGNALS: ++ void okEnabled(bool enabled); + + protected: + bool handleError(KGAPI2::Job *job); + void accountChanged(); + + private: +- void slotConfigure(); + void slotAuthJobFinished(KGAPI2::Job *job); +- void slotSaveSettings(); + void slotReloadCalendars(); + void slotReloadTaskLists(); + +- GoogleResource *const m_resource; +- GoogleSettings *const m_settings; +- Ui::GoogleSettingsDialog *const m_ui; ++ GoogleSettings &m_settings; + KGAPI2::AccountPtr m_account; ++ const QString m_identifier; + }; +diff --git a/resources/google-groupware/googlesettingsdialog.ui b/resources/google-groupware/googlesettingswidget.ui +similarity index 99% +rename from resources/google-groupware/googlesettingsdialog.ui +rename to resources/google-groupware/googlesettingswidget.ui +index 9ff9bc93b4..75fdfd24f1 100644 +--- a/resources/google-groupware/googlesettingsdialog.ui ++++ b/resources/google-groupware/googlesettingswidget.ui +@@ -1,6 +1,6 @@ + + +- GoogleSettingsDialog ++ GoogleSettingsWidget + + + +diff --git a/resources/google-groupware/settingsbase.kcfg b/resources/google-groupware/settingsbase.kcfg +index ac58395d71..7dfe8dfe92 100644 +--- a/resources/google-groupware/settingsbase.kcfg ++++ b/resources/google-groupware/settingsbase.kcfg +@@ -4,7 +4,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 + http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > +- ++ + + + +-- +GitLab + diff --git a/desktop/kde6/applications/kdepim-runtime-kf6/pspec.xml b/desktop/kde6/applications/kdepim-runtime-kf6/pspec.xml new file mode 100755 index 0000000000..998b2d5d5b --- /dev/null +++ b/desktop/kde6/applications/kdepim-runtime-kf6/pspec.xml @@ -0,0 +1,154 @@ + + + + + + kdepim-runtime-kf6 + https://community.kde.org/KDE_PIM + + PisiLinux Community + admins@pisilinux.org + + LGPLv2 + kontact-kf6 + library + app:gui + kde6 PIM Runtime Environment + kdepim-runtime-kf6 contains kde6 PIM (Personal Information Management) runtime environment like akonadi agents. + mirrors://kde/stable/release-service/24.02.0/src/kdepim-runtime-24.02.0.tar.xz + + kdoctools-kf6-devel + boost-devel + shared-mime-info + akonadi-kf6-devel + akonadi-calendar-kf6-devel + akonadi-search-kf6-devel + kcmutils-kf6-devel + + + + kitemmodels-kf6-devel + + kunitconversion-kf6-devel + knotifyconfig-kf6-devel + + kmailtransport-kf6-devel + kidentitymanagement-kf6-devel + kalarm-kf6 + kcalutils-kf6-devel + kmbox-kf6-devel + kimap-kf6-devel + libkgapi-kf6-devel + kholidays-kf6-devel + ksyndication-kf6-devel + pimcommon-kf6-devel + cyrus-sasl-devel + qt6-declarative-devel + + + + qt6-webengine-devel + extra-cmake-modules-kf6 + qt6-location-devel + qt6-networkauth-kf6-devel + akonadi-mime-kf6-devel + akonadi-notes-kf6-devel + akonadi-contacts-kf6-devel + qt6-speech-devel + kdav-kf6-devel + ffmpeg-devel + kldap-kf6-devel + libkdepim-kf6-devel + libXScrnSaver-devel + qca2-qt6-devel + qt6-keychain-devel + + + + + + kdepim-runtime-kf6 + + akonadi-kf6 + libkgapi-kf6 + kio-kf6 + ki18n-kf6 + kimap-kf6 + kmbox-kf6 + kmime-kf6 + libgcc + kcodecs-kf6 + kconfig-kf6 + kwallet-kf6 + kxmlgui-kf6 + kcalendarcore-kf6 + kcmutils-kf6 + kservice-kf6 + qt6-base + kalarm-kf6 + kcalutils-kf6 + kitemviews-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kdbusaddons-kf6 + kitemmodels-kf6 + pimcommon-kf6 + kcontacts-kf6 + kjobwidgets-kf6 + knotifyconfig-kf6 + kwindowsystem-kf6 + kconfigwidgets-kf6 + kmailtransport-kf6 + ktextwidgets-kf6 + knotifications-kf6 + kwidgetsaddons-kf6 + qt6-speech + + akonadi-calendar-kf6 + + cyrus-sasl + akonadi-mime-kf6 + akonadi-notes-kf6 + qt6-webengine + qt6-networkauth-kf6 + akonadi-contacts-kf6 + kidentitymanagement-kf6 + kdav-kf6 + kldap-kf6 + libkdepim-kf6 + qt6-keychain + + + /etc/xdg + /usr/lib + /usr/bin + /usr/share + /usr/share/mime + /usr/share/kservice-kf6types5 + /usr/share/kservice-kf6s5 + /usr/share/knotifications-kf65 + /usr/share/icons + /usr/share/dbus-1 + /usr/share/akonadi + /usr/share/ontology + /usr/share/autostart + /usr/share/applications + /usr/share/doc + /usr/share/locale + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/desktop/kde6/applications/kdepim-runtime-kf6/translations.xml b/desktop/kde6/applications/kdepim-runtime-kf6/translations.xml new file mode 100755 index 0000000000..7eede31d12 --- /dev/null +++ b/desktop/kde6/applications/kdepim-runtime-kf6/translations.xml @@ -0,0 +1,8 @@ + + + + kdepim-runtime-kf6 + kde6 PIM (Kişisel Bilgi Yönetimi) çalışma zamanı ortamı + kdepim-runtime-kf6, kdelibs kullanarak yazılmış olan Akonadi ajanları da dahil olmak üzere kde6 PIM (Personal Information Management - Kişisel Bilgi Yönetimi) çalışma zamanı ortamını içerir. + + diff --git a/desktop/kde6/applications/mailcommon-kf6/actions.py b/desktop/kde6/applications/mailcommon-kf6/actions.py new file mode 100755 index 0000000000..6ef5f51338 --- /dev/null +++ b/desktop/kde6/applications/mailcommon-kf6/actions.py @@ -0,0 +1,20 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import pisitools +from pisi.actionsapi import kde6 + +def setup(): + kde6.configure() + +def build(): + kde6.make() + +def install(): + kde6.install() + + pisitools.dodoc("LICENSES/*") + diff --git a/desktop/kde6/applications/mailcommon-kf6/pspec.xml b/desktop/kde6/applications/mailcommon-kf6/pspec.xml new file mode 100755 index 0000000000..3cbbefd117 --- /dev/null +++ b/desktop/kde6/applications/mailcommon-kf6/pspec.xml @@ -0,0 +1,135 @@ + + + + + + mailcommon-kf6 + https://www.kde.org + + Pisi Linux Admins + admin@pisilinux.org + + LGPLv2 + library + app:library + KDE PIM library providing support for mail applications + KDE PIM library providing support for mail applications + mirrors://kde/stable/release-service/24.02.0/src/mailcommon-24.02.0.tar.xz + + qt6-base-devel + qt6-phonon-devel + extra-cmake-modules-kf6 + boost-devel + glibc-devel + libical-devel + gettext-devel + qt6-designer-devel + kdoctools-kf6-devel + mailimporter-kf6-devel + messagelib-kf6-devel + libgravatar-kf6-devel + kidentitymanagement-kf6-devel + kmailtransport-kf6-devel + kmbox-kf6-devel + akonadi-kf6-devel + kjobwidgets-kf6-devel + solid-kf6-devel + kitemmodels-kf6-devel + + + + kunitconversion-kf6-devel + kmime-kf6-devel + kcontacts-kf6-devel + kcalendarcore-kf6-devel + + kpimtextedit-kf6-devel + kimap-kf6-devel + kldap-kf6-devel + grantleetheme-kf6-devel + pimcommon-kf6-devel + libkleo-kf6-devel + libkdepim-kf6-devel + gpgme-devel + gpgme-qt6-devel + akonadi-mime-kf6-devel + akonadi-contacts-kf6-devel + grantlee-qt5-devel + openldap-client + cyrus-sasl-devel + syntax-highlighting-kf6-devel + karchive-kf6-devel + kguiaddons-kf6-devel + qt6-webengine-devel + + + + + mailcommon-kf6 + + qt6-base + qt6-webengine + akonadi-contacts-kf6 + libgcc + libkdepim-kf6 + akonadi-mime-kf6 + mailimporter-kf6 + kio-kf6 + ki18n-kf6 + kmime-kf6 + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kxmlgui-kf6 + karchive-kf6 + kcontacts-kf6 + pimcommon-kf6 + kitemviews-kf6 + messagelib-kf6 + qt6-phonon + kguiaddons-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kitemmodels-kf6 + kpimtextedit-kf6 + ktextwidgets-kf6 + kwindowsystem-kf6 + kconfigwidgets-kf6 + kmailtransport-kf6 + kwidgetsaddons-kf6 + kidentitymanagement-kf6 + + + /etc + /usr/share + /usr/lib/qt6 + /usr/lib + /usr/share/doc + + + + + mailcommon-kf6-devel + Development files for mailcommon-kf6 + + qt6-webengine-devel + mailcommon-kf6 + + + /usr/include + /usr/lib/cmake + /usr/lib/pkgconfig + + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + diff --git a/pisi-index.xml b/pisi-index.xml index 9764fe6862..1e5ed6ed8c 100644 --- a/pisi-index.xml +++ b/pisi-index.xml @@ -50234,7 +50234,7 @@ Gnome session. Development files for gpgme gpgme için geliştirme dosyaları - gpgme + gpgme libgpg-error-devel libassuan-devel glib2-devel @@ -50243,27 +50243,28 @@ Gnome session. /usr/include /usr/share/aclocal /usr/lib/pkgconfig + /usr/include/qgpgme/* + /usr/include/QGpgME/* gpgme-qt5 Qt5 bindings for gpgme - gpgme + gpgme libgcc qt5-base libgpg-error /usr/lib/libqgpgme.so* - /usr/lib/cmake/Qgpgme gpgme-python Python bindings for gpgme - gpgme + gpgme python @@ -50275,7 +50276,7 @@ Gnome session. Python3 bindings for gpgme python3 - gpgme + gpgme /usr/lib/python3*/site-packages/ @@ -50286,21 +50287,20 @@ Gnome session. Development files for gpgme-qt5 qt5-base-devel - gpgme - gpgme-qt5 - gpgme-devel + gpgme + gpgme-qt5 + gpgme-devel - /usr/lib/cmake/QGpgme - /usr/include/qgpgme/* - /usr/include/QGpgME/* + /usr/lib/cmake/QGpgme/QGpgmeConfig.cmake + /usr/lib/cmake/QGpgme/QGpgmeConfigVersion.cmake gpgme-qt6 Qt6 bindings for gpgme - gpgme + gpgme libgcc qt6-base libgpg-error @@ -50314,15 +50314,22 @@ Gnome session. Development files for gpgme-qt6 qt6-base-devel - gpgme - gpgme-qt6 - gpgme-devel + gpgme + gpgme-qt6 + gpgme-devel /usr/lib/cmake/QGpgmeQt6 + + 2024-03-06 + 1.23.2 + Rebuild. + Mustafa Cinasal + muscnsl@gmail.com + 2023-11-29 1.23.2 @@ -128637,6 +128644,75 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + akonadi-calendar-tools-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + desktop.kde6.applications + CLI tools to manage akonadi calendars + CLI tools to manage akonadi calendars + http://download.kde.org/stable/release-service/24.02.0/src/akonadi-calendar-tools-24.02.0.tar.xz + + boost-devel + akonadi-kf6-devel + akonadi-calendar-kf6-devel + extra-cmake-modules-kf6 + kdoctools-kf6-devel + qt6-base-devel + kcompletion-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + kcontacts-kf6-devel + kcalendarcore-kf6-devel + kunitconversion-kf6-devel + akonadi-contacts-kf6-devel + kcalutils-kf6-devel + libkdepim-kf6-devel + calendarsupport-kf6-devel + kmime-kf6-devel + kidentitymanagement-kf6-devel + akonadi-notes-kf6-devel + + desktop/kde6/applications/akonadi-calendar-tools-kf6/pspec.xml + + + akonadi-calendar-tools-kf6 + CLI tools to manage akonadi calendars + + ki18n-kf6 + libgcc + akonadi-kf6 + kconfig-kf6 + kcalendarcore-kf6 + qt6-base + kcalutils-kf6 + kcoreaddons-kf6 + calendarsupport-kf6 + akonadi-calendar-kf6 + akonadi-notes-kf6 + + + /etc/xdg + /usr/bin + /usr/share + /usr/share/doc + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + kpat-kf6 @@ -128875,6 +128951,125 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + incidenceeditor-kf6 + https://community.kde.org/KDE_PIM + + Alihan Öztürk + alihan@pisilinux.org + + LGPLv2 + app:console + desktop.kde6.applications + KDE PIM incidence editor. + KDE PIM incidence editor. + http://download.kde.org/stable/release-service/24.02.0/src/incidenceeditor-24.02.0.tar.xz + + extra-cmake-modules-kf6 + qt6-base-devel + akonadi-kf6-devel + kcompletion-kf6-devel + kjobwidgets-kf6-devel + kcoreaddons-kf6-devel + kservice-kf6-devel + solid-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + kdoctools-kf6-devel + kunitconversion-kf6-devel + boost-devel + kmime-kf6-devel + kldap-kf6-devel + cyrus-sasl-devel + calendarsupport-kf6-devel + kidentitymanagement-kf6-devel + akonadi-calendar-kf6-devel + kcalendarcore-kf6-devel + kcontacts-kf6-devel + eventviews-kf6-devel + kcalutils-kf6-devel + kdiagram-kf6-devel + kmailtransport-kf6-devel + libkdepim-kf6-devel + akonadi-mime-kf6-devel + akonadi-contacts-kf6-devel + pimcommon-kf6-devel + kimap-kf6-devel + kiconthemes-kf6-devel + + desktop/kde6/applications/incidenceeditor-kf6/pspec.xml + + + incidenceeditor-kf6 + KDE PIM incidence editor. + + kio-kf6 + ki18n-kf6 + kldap-kf6 + kmime-kf6 + kimap-kf6 + libgcc + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kxmlgui-kf6 + kdiagram-kf6 + kservice-kf6 + kcalutils-kf6 + kcontacts-kf6 + libkdepim-kf6 + pimcommon-kf6 + eventviews-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kitemmodels-kf6 + kjobwidgets-kf6 + kpimtextedit-kf6 + ktextwidgets-kf6 + akonadi-mime-kf6 + kcalendarcore-kf6 + kconfigwidgets-kf6 + kmailtransport-kf6 + kwidgetsaddons-kf6 + calendarsupport-kf6 + akonadi-contacts-kf6 + akonadi-calendar-kf6 + kidentitymanagement-kf6 + qt6-base + + + /etc/xdg + /usr/lib + /usr/lib/qt6 + /usr/share + /usr/share/doc + /usr/share/locale + + + + incidenceeditor-kf6-devel + Development files for incidenceeditor-kf6. + + incidenceeditor-kf6 + + + /usr/include + /usr/lib/pkgconfig + /usr/lib/cmake + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + khelpcenter-kf6 @@ -129996,6 +130191,108 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + calendarsupport-kf6 + https://community.kde.org/KDE_PIM + + Alihan Öztürk + alihan@pisilinux.org + + LGPLv2 + app:console + desktop.kde6.applications + Calendar support library + Calendar support library + mirrors://kde/stable/release-service/24.02.0/src/calendarsupport-24.02.0.tar.xz + + extra-cmake-modules-kf6 + qt6-base-devel + akonadi-kf6-devel + kmime-kf6-devel + ki18n-kf6-devel + kcodecs-kf6-devel + kcompletion-kf6-devel + kjobwidgets-kf6-devel + kcoreaddons-kf6-devel + kservice-kf6-devel + solid-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + kdoctools-kf6-devel + kunitconversion-kf6-devel + boost-devel + kcalutils-kf6-devel + kcalendarcore-kf6-devel + kidentitymanagement-kf6-devel + kholidays-kf6-devel + akonadi-calendar-kf6-devel + kcontacts-kf6-devel + pimcommon-kf6-devel + kimap-kf6-devel + cyrus-sasl-devel + akonadi-mime-kf6-devel + akonadi-contacts-kf6-devel + akonadi-notes-kf6-devel + kguiaddons-kf6-devel + + desktop/kde6/applications/calendarsupport-kf6/pspec.xml + + + calendarsupport-kf6 + Calendar support library + + kio-kf6 + ki18n-kf6 + kmime-kf6 + libgcc + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kcalendarcore-kf6 + qt6-base + kcalutils-kf6 + kholidays-kf6 + pimcommon-kf6 + kguiaddons-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kjobwidgets-kf6 + kwidgetsaddons-kf6 + akonadi-calendar-kf6 + kidentitymanagement-kf6 + + + /etc + /usr/lib/qt6 + /usr/lib + /usr/share + /usr/share/kservice-kf6types5 + /usr/share/locale + + + + calendarsupport-kf6-devel + Development files for calendarsupport-kf6 + + calendarsupport-kf6 + + + /usr/include + /usr/lib/cmake + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + kdegraphics-thumbnailers-kf6 @@ -131472,6 +131769,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol kcodecs-kf6-devel kdoctools-kf6-devel boost-devel + kio-kf6-devel kitemmodels-kf6-devel kunitconversion-kf6-devel kmailtransport-kf6-devel @@ -135119,6 +135417,107 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + eventviews-kf6 + https://community.kde.org/KDE_PIM + + Alihan Öztürk + alihan@pisilinux.org + + LGPLv2 + app:console + desktop.kde6.applications + Library for creating events. + Library for creating events. + mirrors://kde/stable/release-service/24.02.0/src/eventviews-24.02.0.tar.xz + + extra-cmake-modules-kf6 + qt6-base-devel + akonadi-kf6-devel + kcompletion-kf6-devel + kjobwidgets-kf6-devel + kcoreaddons-kf6-devel + kservice-kf6-devel + solid-kf6-devel + kxmlgui-kf6-devel + kitemmodels-kf6-devel + kdoctools-kf6-devel + kunitconversion-kf6-devel + boost-devel + libkdepim-kf6-devel + kcontacts-kf6-devel + kcalendarcore-kf6-devel + kcalutils-kf6-devel + calendarsupport-kf6-devel + kmime-kf6-devel + kidentitymanagement-kf6-devel + akonadi-calendar-kf6-devel + akonadi-contacts-kf6-devel + kdiagram-kf6-devel + kholidays-kf6-devel + kguiaddons-kf6-devel + kiconthemes-kf6-devel + + desktop/kde6/applications/eventviews-kf6/pspec.xml + + + eventviews-kf6 + Library for creating events. + + ki18n-kf6 + libgcc + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kcalendarcore-kf6 + kdiagram-kf6 + kservice-kf6 + qt6-base + kcalutils-kf6 + kcontacts-kf6 + libkdepim-kf6 + kguiaddons-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kitemmodels-kf6 + kconfigwidgets-kf6 + kwidgetsaddons-kf6 + calendarsupport-kf6 + akonadi-calendar-kf6 + + + /etc + /usr/lib + /usr/lib/qt6 + /usr/share + /usr/share/doc + /usr/share/kservice-kf6types5 + /usr/share/locale + + + + eventviews-kf6-devel + Development files for eventviews-kf6. + + eventviews-kf6 + + + /usr/include + /usr/lib/cmake + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + lokalize-kf6 @@ -136653,6 +137052,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol libkdepim-kf6-devel gpgme-devel gpgme-qt6-devel + gpgme-qt5-devel grantlee-qt5-devel qt6-declarative-devel qt6-webengine-devel @@ -137727,6 +138127,110 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + akregator-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + desktop.kde6.applications + A KDE blogging client + akregator-kf6 helps you to keep informed about new stories on websites like KDE Dot News and Planet KDE blogs. The technology used is RSS and many sites support it. + http://download.kde.org/stable/release-service/24.02.0/src/akregator-24.02.0.tar.xz + + boost-devel + extra-cmake-modules-kf6 + kblog-kf6-devel + kdoctools-kf6-devel + kio-kf6-devel + ktexteditor-kf6-devel + python-devel + qt6-base-devel + qt6-webengine-devel + grantlee-qt5-devel + kcmutils-kf6-devel + knotifyconfig-kf6-devel + akonadi-mime-kf6-devel + akonadi-kf6-devel + kitemmodels-kf6-devel + grantleetheme-kf6-devel + kcontacts-kf6-devel + kontactinterface-kf6-devel + libkdepim-kf6-devel + akonadi-contacts-kf6-devel + libkleo-kf6-devel + gpgme-devel + gpgme-qt6-devel + messagelib-kf6-devel + pimcommon-kf6-devel + kimap-kf6-devel + kmime-kf6-devel + cyrus-sasl-devel + kpimtextedit-kf6-devel + ksyndication-kf6-devel + ffmpeg-devel + knotifyconfig-kf6-devel + knotifications-kf6-devel + kuserfeedback-kf6-devel + libXScrnSaver-devel + + desktop/kde6/applications/akregator-kf6/pspec.xml + + + akregator-kf6 + A Feed Reader by KDE + + kio-kf6 + ki18n-kf6 + kcrash-kf6 + kparts-kf6 + libgcc + kcodecs-kf6 + kconfig-kf6 + kxmlgui-kf6 + kcmutils-kf6 + kservice-kf6 + qt6-base + libkdepim-kf6 + pimcommon-kf6 + messagelib-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kjobwidgets-kf6 + kpimtextedit-kf6 + ksyndication-kf6 + ktextwidgets-kf6 + grantleetheme-kf6 + knotifyconfig-kf6 + qt6-webengine + kconfigwidgets-kf6 + knotifications-kf6 + kwidgetsaddons-kf6 + kontactinterface-kf6 + + + /etc/xdg + /usr/bin + /usr/lib + /usr/lib/qt6 + /usr/share + /usr/share/doc + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + granatier-kf6 @@ -137800,6 +138304,112 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + akonadiconsole-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + desktop.kde6.applications + Akonadi management and debugging console + Akonadi management and debugging console + http://download.kde.org/stable/release-service/24.02.0/src/akonadiconsole-24.02.0.tar.xz + + akonadi-contacts-kf6-devel + akonadi-kf6-devel + akonadi-calendar-kf6-devel + pimcommon-kf6-devel + akonadi-mime-kf6-devel + calendarsupport-kf6-devel + extra-cmake-modules-kf6 + kimap-kf6-devel + kcalendarcore-kf6-devel + kcompletion-kf6-devel + kconfig-kf6-devel + kconfigwidgets-kf6-devel + kcontacts-kf6-devel + kcrash-kf6-devel + kdbusaddons-kf6-devel + kdoctools-kf6-devel + ki18n-kf6-devel + kitemmodels-kf6-devel + kmime-kf6-devel + kpimtextedit-kf6-devel + ktextwidgets-kf6-devel + kwidgetsaddons-kf6-devel + kxmlgui-kf6-devel + kio-kf6-devel + kitemviews-kf6-devel + akonadi-search-kf6-devel + libkdepim-kf6-devel + libkleo-kf6-devel + messagelib-kf6-devel + qt6-base-devel + qt6-sql-mysql + qt6-sql-postgresql + qt6-sql-sqlite + qt6-sql-odbc + kunitconversion-kf6-devel + kidentitymanagement-kf6-devel + cyrus-sasl-devel + gpgme-devel + gpgme-qt6-devel + ffmpeg-devel + libXScrnSaver-devel + qt6-webengine-devel + + desktop/kde6/applications/akonadiconsole-kf6/pspec.xml + + + akonadiconsole-kf6 + Akonadi management and debugging console + + akonadi-kf6 + akonadi-contacts-kf6 + akonadi-mime-kf6 + calendarsupport-kf6 + kcalendarcore-kf6 + qt6-base + ki18n-kf6 + kmime-kf6 + kcrash-kf6 + libgcc + kconfig-kf6 + kxmlgui-kf6 + kcontacts-kf6 + libkdepim-kf6 + kitemviews-kf6 + messagelib-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kdbusaddons-kf6 + kitemmodels-kf6 + kpimtextedit-kf6 + ktextwidgets-kf6 + kconfigwidgets-kf6 + kwidgetsaddons-kf6 + + + /etc/xdg + /usr/bin + /usr/share + /usr/share/doc + /usr/lib + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + kio-extras-kf6 @@ -137943,6 +138553,133 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + mailcommon-kf6 + https://www.kde.org + + Pisi Linux Admins + admin@pisilinux.org + + LGPLv2 + library + app:library + desktop.kde6.applications + KDE PIM library providing support for mail applications + KDE PIM library providing support for mail applications + mirrors://kde/stable/release-service/24.02.0/src/mailcommon-24.02.0.tar.xz + + qt6-base-devel + qt6-phonon-devel + extra-cmake-modules-kf6 + boost-devel + glibc-devel + libical-devel + gettext-devel + qt6-designer-devel + kdoctools-kf6-devel + mailimporter-kf6-devel + messagelib-kf6-devel + libgravatar-kf6-devel + kidentitymanagement-kf6-devel + kmailtransport-kf6-devel + kmbox-kf6-devel + akonadi-kf6-devel + kjobwidgets-kf6-devel + solid-kf6-devel + kitemmodels-kf6-devel + kunitconversion-kf6-devel + kmime-kf6-devel + kcontacts-kf6-devel + kcalendarcore-kf6-devel + kpimtextedit-kf6-devel + kimap-kf6-devel + kldap-kf6-devel + grantleetheme-kf6-devel + pimcommon-kf6-devel + libkleo-kf6-devel + libkdepim-kf6-devel + gpgme-devel + gpgme-qt6-devel + akonadi-mime-kf6-devel + akonadi-contacts-kf6-devel + grantlee-qt5-devel + openldap-client + cyrus-sasl-devel + syntax-highlighting-kf6-devel + karchive-kf6-devel + kguiaddons-kf6-devel + qt6-webengine-devel + + desktop/kde6/applications/mailcommon-kf6/pspec.xml + + + mailcommon-kf6 + + qt6-base + qt6-webengine + akonadi-contacts-kf6 + libgcc + libkdepim-kf6 + akonadi-mime-kf6 + mailimporter-kf6 + kio-kf6 + ki18n-kf6 + kmime-kf6 + akonadi-kf6 + kcodecs-kf6 + kconfig-kf6 + kxmlgui-kf6 + karchive-kf6 + kcontacts-kf6 + pimcommon-kf6 + kitemviews-kf6 + messagelib-kf6 + qt6-phonon + kguiaddons-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kiconthemes-kf6 + kitemmodels-kf6 + kpimtextedit-kf6 + ktextwidgets-kf6 + kwindowsystem-kf6 + kconfigwidgets-kf6 + kmailtransport-kf6 + kwidgetsaddons-kf6 + kidentitymanagement-kf6 + + + /etc + /usr/share + /usr/lib/qt6 + /usr/lib + /usr/share/doc + + + + mailcommon-kf6-devel + Development files for mailcommon-kf6 + + qt6-webengine-devel + mailcommon-kf6 + + + /usr/include + /usr/lib/cmake + /usr/lib/pkgconfig + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + mailimporter-kf6 @@ -138383,6 +139120,144 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + kdepim-runtime-kf6 + https://community.kde.org/KDE_PIM + + PisiLinux Community + admins@pisilinux.org + + LGPLv2 + library + app:gui + desktop.kde6.applications + kde6 PIM Runtime Environment + kde6 PIM (Kişisel Bilgi Yönetimi) çalışma zamanı ortamı + kdepim-runtime-kf6 contains kde6 PIM (Personal Information Management) runtime environment like akonadi agents. + kdepim-runtime-kf6, kdelibs kullanarak yazılmış olan Akonadi ajanları da dahil olmak üzere kde6 PIM (Personal Information Management - Kişisel Bilgi Yönetimi) çalışma zamanı ortamını içerir. + kontact-kf6 + mirrors://kde/stable/release-service/24.02.0/src/kdepim-runtime-24.02.0.tar.xz + + kdoctools-kf6-devel + boost-devel + shared-mime-info + akonadi-kf6-devel + akonadi-calendar-kf6-devel + akonadi-search-kf6-devel + kcmutils-kf6-devel + kitemmodels-kf6-devel + kunitconversion-kf6-devel + knotifyconfig-kf6-devel + kmailtransport-kf6-devel + kidentitymanagement-kf6-devel + kalarm-kf6 + kcalutils-kf6-devel + kmbox-kf6-devel + kimap-kf6-devel + libkgapi-kf6-devel + kholidays-kf6-devel + ksyndication-kf6-devel + pimcommon-kf6-devel + cyrus-sasl-devel + qt6-declarative-devel + qt6-webengine-devel + extra-cmake-modules-kf6 + qt6-location-devel + qt6-networkauth-kf6-devel + akonadi-mime-kf6-devel + akonadi-notes-kf6-devel + akonadi-contacts-kf6-devel + qt6-speech-devel + kdav-kf6-devel + ffmpeg-devel + kldap-kf6-devel + libkdepim-kf6-devel + libXScrnSaver-devel + qca2-qt6-devel + qt6-keychain-devel + + desktop/kde6/applications/kdepim-runtime-kf6/pspec.xml + + + kdepim-runtime-kf6 + + akonadi-kf6 + libkgapi-kf6 + kio-kf6 + ki18n-kf6 + kimap-kf6 + kmbox-kf6 + kmime-kf6 + libgcc + kcodecs-kf6 + kconfig-kf6 + kwallet-kf6 + kxmlgui-kf6 + kcalendarcore-kf6 + kcmutils-kf6 + kservice-kf6 + qt6-base + kalarm-kf6 + kcalutils-kf6 + kitemviews-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kdbusaddons-kf6 + kitemmodels-kf6 + pimcommon-kf6 + kcontacts-kf6 + kjobwidgets-kf6 + knotifyconfig-kf6 + kwindowsystem-kf6 + kconfigwidgets-kf6 + kmailtransport-kf6 + ktextwidgets-kf6 + knotifications-kf6 + kwidgetsaddons-kf6 + qt6-speech + akonadi-calendar-kf6 + cyrus-sasl + akonadi-mime-kf6 + akonadi-notes-kf6 + qt6-webengine + qt6-networkauth-kf6 + akonadi-contacts-kf6 + kidentitymanagement-kf6 + kdav-kf6 + kldap-kf6 + libkdepim-kf6 + qt6-keychain + + + /etc/xdg + /usr/lib + /usr/bin + /usr/share + /usr/share/mime + /usr/share/kservice-kf6types5 + /usr/share/kservice-kf6s5 + /usr/share/knotifications-kf65 + /usr/share/icons + /usr/share/dbus-1 + /usr/share/akonadi + /usr/share/ontology + /usr/share/autostart + /usr/share/applications + /usr/share/doc + /usr/share/locale + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + libkcompactdisc-kf6 @@ -138794,6 +139669,100 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol + + + grantlee-editor-kf6 + https://community.kde.org/KDE_PIM + + Stefan Gronewold + groni@pisilinux.org + + GPLv2 + desktop.kde6.applications + Editor for Grantlee themes + Editor for Grantlee themes + mirrors://kde/stable/release-service/24.02.0/src/grantlee-editor-24.02.0.tar.xz + + qt6-webengine-devel + kcrash-kf6-devel + extra-cmake-modules-kf6 + kdbusaddons-kf6-devel + kdoctools-kf6-devel + kxmlgui-kf6-devel + qt6-base-devel + ktexteditor-kf6-devel + kwallet-kf6-devel + knewstuff-kf6-devel + karchive-kf6-devel + pimcommon-kf6-devel + messagelib-kf6-devel + grantleetheme-kf6-devel + akonadi-mime-kf6-devel + kpimtextedit-kf6-devel + libkdepim-kf6-devel + syntax-highlighting-kf6-devel + libkleo-kf6-devel + kparts-kf6-devel + gpgme-devel + gpgme-qt6-devel + cyrus-sasl-devel + akonadi-kf6-devel + kitemmodels-kf6-devel + kcontacts-kf6-devel + akonadi-contacts-kf6-devel + kimap-kf6-devel + kmime-kf6-devel + grantlee-qt5-devel + ffmpeg-devel + libXScrnSaver-devel + + desktop/kde6/applications/grantlee-editor-kf6/pspec.xml + + + grantlee-editor-kf6 + Editor for Grantlee themes + + kio-kf6 + ki18n-kf6 + kmime-kf6 + kcrash-kf6 + libgcc + kconfig-kf6 + kxmlgui-kf6 + karchive-kf6 + qt6-base + kcontacts-kf6 + knewstuff-kf6 + pimcommon-kf6 + messagelib-kf6 + kcompletion-kf6 + kcoreaddons-kf6 + kdbusaddons-kf6 + kpimtextedit-kf6 + qt6-webengine + kconfigwidgets-kf6 + kwidgetsaddons-kf6 + akonadi-contacts-kf6 + syntax-highlighting-kf6 + + + /etc/xdg + /usr/bin + /usr/lib + /usr/share + /usr/share/doc + + + + + 2024-03-03 + 24.02.0 + First release + Mustafa Cinasal + muscnsl@gmail.com + + + kqtquickcharts-kf6 diff --git a/pisi-index.xml.sha1sum b/pisi-index.xml.sha1sum index 4072fd8a08..740e0d7c70 100644 --- a/pisi-index.xml.sha1sum +++ b/pisi-index.xml.sha1sum @@ -1 +1 @@ -05574e9557b0f60ff40a21e009e246d7adfecd7a \ No newline at end of file +69fbdc64a265d21e8df0dec3c028f79657b4c5aa \ No newline at end of file diff --git a/pisi-index.xml.xz b/pisi-index.xml.xz index 6db45cc453286a0cffc79fc9bf279e2e71026923..2b656d53da409de36d634044dcdd207bbc123c15 100644 GIT binary patch delta 899786 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

nJ%9#F6~*T&O5m3onHghl@q811;{F_Jx< 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