diff --git a/desktop/budgie/budgie-desktop/actions.py b/desktop/budgie/budgie-desktop/actions.py new file mode 100644 index 0000000000..d34594f1a7 --- /dev/null +++ b/desktop/budgie/budgie-desktop/actions.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 2 +# See the file http://www.gnu.org/copyleft/gpl.txt + +from pisi.actionsapi import mesontools +from pisi.actionsapi import pisitools + +def setup(): + mesontools.configure("-Dwith-gtk-doc=false") + +def build(): + mesontools.build() + +def install(): + mesontools.install() + + pisitools.dodoc("README.md", "LICENSE*") diff --git a/desktop/budgie/budgie-desktop/pspec.xml b/desktop/budgie/budgie-desktop/pspec.xml new file mode 100644 index 0000000000..f6ed0d1192 --- /dev/null +++ b/desktop/budgie/budgie-desktop/pspec.xml @@ -0,0 +1,112 @@ + + + + + budgie-desktop + https://github.com/solus-project/budgie-desktop + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + LGPLv2.1 + Modern desktop environment from the Solus Project. + Budgie is a desktop environment that uses GNOME technologies such as GTK3 and is developed by the Solus project. + https://github.com/solus-project/budgie-desktop/releases/download/v10.5.3/budgie-desktop-v10.5.3.tar.xz + + vala-devel + intltool + glib2-devel + gobject-introspection-devel + sassc + budgie-screensaver + alsa-lib-devel + libnotify-devel + accountsservice-devel + libpeas-devel + libwnck3-devel + mutter-devel + ibus-devel + gnome-desktop-devel + libseccomp-devel + pulseaudio-libs-devel + upower-devel + gtk3-devel + polkit-devel + gnome-bluetooth-devel + gnome-menus-devel + gnome-settings-daemon-devel + meson + mesa-devel + + + + + budgie-desktop + + gtk3 + ibus + cairo + glib2 + pango + libX11 + mutter + polkit + upower + libpeas + alsa-lib + libwnck3 + libnotify + gdk-pixbuf + gnome-menus + gnome-desktop + libXcomposite + libutil-linux + gnome-bluetooth + pulseaudio-libs + gobject-introspection + + + /etc/xdg + /usr/bin + /usr/lib/lib*.so* + /usr/lib/budgie-desktop + /usr/lib/girepository-1.0 + /usr/share/locale + /usr/share/icons + /usr/share/backgrounds + /usr/share/budgie-desktop + /usr/share/doc + /usr/share/xsessions + /usr/share/applications + /usr/share/gnome-session + /usr/share/glib-2.0 + + + + + budgie-desktop-devel + + budgie-desktop + gtk3-devel + glib2-devel + libpeas-devel + + + /usr/include + /usr/lib/pkgconfig + /usr/share/vala + /usr/share/gir-1.0 + + + + + + 2021-06-05 + 10.5.3 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/budgie/budgie-screensaver/actions.py b/desktop/budgie/budgie-screensaver/actions.py new file mode 100644 index 0000000000..a42eec345e --- /dev/null +++ b/desktop/budgie/budgie-screensaver/actions.py @@ -0,0 +1,20 @@ +#!/usr/bin/env 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 autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + autotools.configure() + +def build(): + autotools.make() + +def install(): + autotools.rawInstall("DESTDIR=%s" % get.installDIR()) + + pisitools.dodoc("COPYING*", "NEWS", "README*", "AUTHORS", "ChangeLog") diff --git a/desktop/budgie/budgie-screensaver/files/0001-Fix-killing-gjs.patch b/desktop/budgie/budgie-screensaver/files/0001-Fix-killing-gjs.patch new file mode 100644 index 0000000000..4c162ae3c9 --- /dev/null +++ b/desktop/budgie/budgie-screensaver/files/0001-Fix-killing-gjs.patch @@ -0,0 +1,93 @@ +From 1553374b9c5db3db8232738dc8fa747684b070d1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= +Date: Fri, 30 Apr 2021 15:58:22 +0200 +Subject: [PATCH] Fix killing gjs + +--- + src/gnome-screensaver.c | 22 +++++++++++----------- + src/gs-listener-dbus.c | 29 ++++++++++++----------------- + 2 files changed, 23 insertions(+), 28 deletions(-) + +diff --git a/src/gnome-screensaver.c b/src/gnome-screensaver.c +index d2ccae3..96a7d49 100644 +--- a/src/gnome-screensaver.c ++++ b/src/gnome-screensaver.c +@@ -82,17 +82,17 @@ main (int argc, + exit (1); + } + +- gchar** env_vars = g_get_environ(); // Get our list of environment variables +- gchar* desktop = g_environ_getenv(env_vars, "XDG_CURRENT_DESKTOP"); // Get the current desktop value +- +- if (desktop != NULL) { // Got a value +- if (!g_str_has_prefix(desktop, "Budgie")) { // Does not start with Budgie +- g_message("Not running under Budgie, exiting."); +- exit(1); +- } +- } +- +- g_strfreev(env_vars); // Free our environment variables ++ if (g_find_program_in_path("pkill") != NULL) { // Have pkill ++ g_spawn_command_line_sync("pkill -9 -f '/usr/bin/gjs /usr/share/gnome-shell/org.gnome.ScreenSaver'", ++ NULL, ++ NULL, ++ NULL, ++ &error); ++ if (error) { ++ g_warning("Failed to kill gjs: %s", error->message); ++ g_error_free (error); ++ } ++ } + + gs_debug_init (debug, FALSE); + gs_debug ("initializing budgie-screensaver %s", VERSION); +diff --git a/src/gs-listener-dbus.c b/src/gs-listener-dbus.c +index 124d83a..f667127 100644 +--- a/src/gs-listener-dbus.c ++++ b/src/gs-listener-dbus.c +@@ -1334,6 +1334,14 @@ gs_listener_acquire (GSListener *listener, + _("not connected to the message bus")); + return FALSE; + } ++ if (screensaver_is_running (listener->priv->connection)) { ++ g_set_error (error, ++ GS_LISTENER_ERROR, ++ GS_LISTENER_ERROR_ACQUISITION_FAILURE, ++ "%s", ++ _("screensaver already running in this session")); ++ return FALSE; ++ } + + dbus_error_init (&buserror); + +@@ -1345,23 +1353,10 @@ gs_listener_acquire (GSListener *listener, + return FALSE; + } + +- if (g_find_program_in_path("pkill") != NULL) { // Have pkill +- char *argv[5]; +- argv[0] = "pkill"; +- argv[1] = "-9"; +- argv[2] = "-f"; +- argv[3] = "'/usr/bin/gjs /usr/share/gnome-shell/org.gnome.ScreenSaver'"; +- argv[4] = NULL; +- +- g_autoptr(GError) error = NULL; +- gboolean kill_ret = g_spawn_sync(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, NULL, &error); +- +- if (!kill_ret) { +- g_warning("Failed to kill gjs: %s", error->message); +- } +- } +- +- res = dbus_bus_request_name (listener->priv->connection, GS_SERVICE, DBUS_NAME_FLAG_REPLACE_EXISTING, &buserror); ++ res = dbus_bus_request_name (listener->priv->connection, ++ GS_SERVICE, ++ DBUS_NAME_FLAG_DO_NOT_QUEUE | DBUS_NAME_FLAG_ALLOW_REPLACEMENT, ++ &buserror); + if (dbus_error_is_set (&buserror)) { + g_set_error (error, + GS_LISTENER_ERROR, +-- +2.31.1 + diff --git a/desktop/budgie/budgie-screensaver/pspec.xml b/desktop/budgie/budgie-screensaver/pspec.xml new file mode 100644 index 0000000000..7861f13620 --- /dev/null +++ b/desktop/budgie/budgie-screensaver/pspec.xml @@ -0,0 +1,69 @@ + + + + + budgie-screensaver + https://github.com/solus-project/budgie-desktop + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + Fork of GNOME Screensaver for Budgie 10. + Budgie Screensaver is a fork of gnome-screensaver intended for use with Budgie Desktop and is similar in purpose to other screensavers such as MATE Screensaver. + https://github.com/getsolus/budgie-screensaver/releases/download/v4.0/budgie-screensaver-v4.0.tar.xz + + dbus-glib-devel + gnome-desktop-devel + pam-devel + elogind-devel + gsettings-desktop-schemas-devel + gtk3-devel + libseccomp-devel + intltool + glib2-devel + + + 0001-Fix-killing-gjs.patch + + + + + budgie-screensaver + + pam + dbus + gtk3 + cairo + glib2 + libX11 + elogind + libXext + dbus-glib + gdk-pixbuf + libXxf86vm + libXxf86misc + gnome-desktop + + + /etc/pam.d + /usr/bin + /usr/lib + /usr/libexec + /usr/share/locale + /usr/share/doc + /usr/share/man + /usr/share/applications + + + + + + 2021-06-05 + 4.0 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/font/adobe-source-code-pro-fonts/actions.py b/desktop/font/adobe-source-code-pro-fonts/actions.py new file mode 100644 index 0000000000..d8962883a7 --- /dev/null +++ b/desktop/font/adobe-source-code-pro-fonts/actions.py @@ -0,0 +1,13 @@ +#!/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 + +def install(): + pisitools.insinto("/usr/share/fonts/adobe-source-code-pro-fonts/", "OTF/*.otf") + pisitools.insinto("/usr/share/fonts/adobe-source-code-pro-fonts/", "VAR/*.otf") + + pisitools.dodoc("LICENSE.md", "README.md") diff --git a/desktop/font/adobe-source-code-pro-fonts/pspec.xml b/desktop/font/adobe-source-code-pro-fonts/pspec.xml new file mode 100644 index 0000000000..27c2d1253b --- /dev/null +++ b/desktop/font/adobe-source-code-pro-fonts/pspec.xml @@ -0,0 +1,34 @@ + + + + + adobe-source-code-pro-fonts + http://www.gnome.org + + Pisi Linux Admins + admins@pisilinux.org + + Monospaced font family for user interface and coding environments. + Source Code Pro is a set of OpenType fonts that have been designed to work well in user interface (UI) environments. + OFL + https://github.com/adobe-fonts/source-code-pro/archive/refs/tags/2.038R-ro/1.058R-it/1.018R-VAR.tar.gz + + + + adobe-source-code-pro-fonts + + /usr/share/fonts + /usr/share/doc + + + + + + 2021-06-05 + 2.038R + First release for Pisi Linux. + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/gnome/apps/epiphany/actions.py b/desktop/gnome/apps/epiphany/actions.py new file mode 100644 index 0000000000..85c4cc1c2a --- /dev/null +++ b/desktop/gnome/apps/epiphany/actions.py @@ -0,0 +1,20 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file https://www.gnu.org/licenses/gpl-3.0.txt + +from pisi.actionsapi import mesontools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools + +def setup(): + mesontools.configure("-Dunit_tests=disabled") + +def build(): + mesontools.build() + +def install(): + mesontools.install() + + pisitools.dodoc("COPYING", "README.md", "CONTRIBUTING.md", "HACKING.md") diff --git a/desktop/gnome/apps/epiphany/pspec.xml b/desktop/gnome/apps/epiphany/pspec.xml new file mode 100644 index 0000000000..055c05629c --- /dev/null +++ b/desktop/gnome/apps/epiphany/pspec.xml @@ -0,0 +1,92 @@ + + + + + epiphany + https://gitlab.gnome.org/GNOME/epiphany + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + app:gui + Intuitive GNOME web browser. + Epiphany is a GNOME web browser based on the WebKit rendering engine. + + glib2-devel + itstool + NetworkManager-devel + avahi-glib-devel + gcr-devel + gnome-desktop-devel + json-glib-devel + libdazzle-devel + libhandy-devel + libnotify-devel + libsecret-devel + libsoup-gnome + libwnck3-devel + libxslt-devel + nettle-devel + nss-devel + webkit2gtk-devel + libportal-devel + libsoup-devel + libarchive-devel + appstream-glib-devel + gmp-devel + meson + + https://download.gnome.org/sources/epiphany/3.38/epiphany-3.38.5.tar.xz + + + + epiphany + + atk + cairo + gcr + gdk-pixbuf + glib2 + gmp + gtk3 + json-glib + libdazzle + libsecret + libsoup + libxml2 + nettle + pango + sqlite + webkit2gtk + libhandy + libportal + + + /usr/bin + /usr/lib + /usr/libexec + /usr/share/applications + /usr/share/dbus-1 + /usr/share/doc + /usr/share/epiphany + /usr/share/glib-2.0 + /usr/share/gnome-shell + /usr/share/help + /usr/share/icons + /usr/share/locale + /usr/share/man + /usr/share/metainfo + + + + + + 2021-06-07 + 3.38.5 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/gnome/apps/evolution/actions.py b/desktop/gnome/apps/evolution/actions.py new file mode 100644 index 0000000000..1dc5ddaafc --- /dev/null +++ b/desktop/gnome/apps/evolution/actions.py @@ -0,0 +1,27 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file https://www.gnu.org/licenses/gpl-3.0.txt +# TODO: Add libchamplain (Contact Maps) support. + +from pisi.actionsapi import cmaketools +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + cmaketools.configure("-DCMAKE_INSTALL_PREFIX=/usr \ + -DSYSCONF_INSTALL_DIR=/etc \ + -DENABLE_INSTALLED_TESTS=OFF \ + -DENABLE_PST_IMPORT=OFF \ + -DENABLE_YTNEF=OFF \ + -DENABLE_CONTACT_MAPS=OFF \ + -DENABLE_TEXT_HIGHLIGHT=OFF") + +def build(): + cmaketools.make() + +def install(): + cmaketools.rawInstall("DESTDIR=%s" % get.installDIR()) + + pisitools.dodoc("COPYING", "ChangeLog", "HACKING", "MAINTAINERS", "NEWS", "README.md") diff --git a/desktop/gnome/apps/evolution/pspec.xml b/desktop/gnome/apps/evolution/pspec.xml new file mode 100644 index 0000000000..3c31fc31c5 --- /dev/null +++ b/desktop/gnome/apps/evolution/pspec.xml @@ -0,0 +1,114 @@ + + + + + evolution + https://gitlab.gnome.org/GNOME/evolution + + Pisi Linux Admins + admin@pisilinux.org + + LGPLv2 + LGPLv3 + app:gui + Integrated mail, addressbook and calendaring for GNOME. + The Evolution package contains an integrated mail, calendar and address book suite designed for the GNOME environment. + https://download.gnome.org/sources/evolution/3.40/evolution-3.40.1.tar.xz + + gnome-desktop-devel + libcanberra-gtk3-devel + evolution-data-server-devel + gspell-devel + gnome-autoar-devel + libarchive-devel + intltool + itstool + docbook-xsl + NetworkManager-devel + yelp-tools + libgdata-devel + webkit2gtk-devel + enchant2-devel + libgweather-devel + libnotify-devel + clutter-gtk-devel + geoclue-devel + geocode-glib-devel + libseccomp-devel + openldap-client + cmake + + + + + evolution + + atk + gcr + nss + gtk3 + nspr + cairo + glib2 + pango + gspell + sqlite + libical + libsoup + libxml2 + enchant2 + libnotify + libsecret + gdk-pixbuf + webkit2gtk + libcanberra + libgweather + gnome-autoar + gnome-desktop + openldap-client + evolution-data-server + + + /usr/bin + /usr/lib/evolution-data-server + /usr/lib/evolution + /usr/libexec + /usr/share/GConf + /usr/share/applications + /usr/share/doc + /usr/share/evolution + /usr/share/glib-2.0 + /usr/share/icons + /usr/share/help + /usr/share/locale + /usr/share/man + /usr/share/metainfo + + + + + evolution-devel + + evolution + gtk3-devel + glib2-devel + gnome-desktop-devel + evolution-data-server-devel + webkit2gtk-devel + + + /usr/include + /usr/lib/pkgconfig + + + + + + 2021-06-05 + 3.40.1 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/gnome/base/gdm/actions.py b/desktop/gnome/base/gdm/actions.py new file mode 100644 index 0000000000..66440430d2 --- /dev/null +++ b/desktop/gnome/base/gdm/actions.py @@ -0,0 +1,34 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file https://www.gnu.org/licenses/gpl-3.0.txt + +from pisi.actionsapi import mesontools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools + +def setup(): + shelltools.system("sed -i 's@systemd@elogind@' data/pam-lfs/gdm-launch-environment.pam") + shelltools.system("sed -i 's@-session@session @' data/pam-lfs/gdm-launch-environment.pam") + + mesontools.configure("--prefix=/usr \ + --localstatedir=/var \ + --buildtype=release \ + -Ddefault-pam-config=lfs \ + -Dplymouth=disabled \ + -Dpam-mod-dir=/lib/security \ + -Dgdm-xsession=true \ + -Dsystemd-journal=false \ + -Dsystemdsystemunitdir=no \ + -Dsystemduserunitdir=no \ + -Dlogind-provider=elogind \ + -Dscreenshot-dir=/var/lib/gdm/greeter") + +def build(): + mesontools.build() + +def install(): + mesontools.install() + + pisitools.dodoc("NEWS", "README.md", "COPYING", "AUTHORS", "HACKING") diff --git a/desktop/gnome/base/gdm/comar/package.py b/desktop/gnome/base/gdm/comar/package.py new file mode 100644 index 0000000000..0fc996674c --- /dev/null +++ b/desktop/gnome/base/gdm/comar/package.py @@ -0,0 +1,25 @@ +#!/usr/bin/python + +import os, re + +OUR_ID = 42 +OUR_NAME = "gdm" +OUR_DESC = "GDM" + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + try: + os.system("groupadd -g %d %s" % (OUR_ID, OUR_NAME)) + os.system("useradd -m -d /var/lib/gdm -r -s /bin/false -u %d -g %d %s -c %s" % (OUR_ID, OUR_ID, OUR_NAME, OUR_DESC)) + os.system("passwd -ql %s" % (OUR_NAME)) + + os.system("/bin/chown gdm:gdm -R /var/lib/gdm") + os.system("/bin/chown root:gdm -R /var/log/gdm") + except: + pass + +def postRemove(): + try: + os.system("userdel %s" % OUR_NAME) + os.system("groupdel %s" % OUR_NAME) + except: + pass \ No newline at end of file diff --git a/desktop/gnome/base/gdm/comar/service.py b/desktop/gnome/base/gdm/comar/service.py new file mode 100644 index 0000000000..679c6940b1 --- /dev/null +++ b/desktop/gnome/base/gdm/comar/service.py @@ -0,0 +1,34 @@ +#!/usr/bin/python +#-*- coding: UTF-8 -*- + +from comar.service import * +import os + +serviceType = "server" +serviceDesc = _({ + "en": "GNOME Desktop", + "tr": "GNOME Masaüstü", +}) +serviceDefault="on" +PIDFILE="/var/run/gdm/gdm.pid" +DAEMON="/usr/sbin/gdm" + +@synchronized +def start(): + startService(command=DAEMON, + pidfile=PIDFILE, + detach=True, + donotify=True) + +@synchronized +def stop(): + stopService(pidfile=PIDFILE, + donotify=True) + + try: + os.unlink(PIDFILE) + except OSError: + pass + +def status(): + return isServiceRunning(PIDFILE) diff --git a/desktop/gnome/base/gdm/files/0000-Force-Xorg-use-on-the-login-screen.patch b/desktop/gnome/base/gdm/files/0000-Force-Xorg-use-on-the-login-screen.patch new file mode 100644 index 0000000000..7f135e07dd --- /dev/null +++ b/desktop/gnome/base/gdm/files/0000-Force-Xorg-use-on-the-login-screen.patch @@ -0,0 +1,25 @@ +From 1c8fc3f30630dec1526979d190c280902712b99d Mon Sep 17 00:00:00 2001 +From: Joshua Strobl +Date: Wed, 17 Apr 2019 12:50:33 +0300 +Subject: [PATCH 1/1] Force Xorg use on the login screen + +--- + data/gdm.conf-custom.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/data/gdm.conf-custom.in b/data/gdm.conf-custom.in +index 9b63ba95..4f220684 100644 +--- a/data/gdm.conf-custom.in ++++ b/data/gdm.conf-custom.in +@@ -2,7 +2,7 @@ + + [daemon] + # Uncomment the line below to force the login screen to use Xorg +-#WaylandEnable=false ++WaylandEnable=false + + [security] + +-- +2.21.0 + diff --git a/desktop/gnome/base/gdm/files/0001-pam-arch-Update-to-match-pambase-20200721.1-2.patch b/desktop/gnome/base/gdm/files/0001-pam-arch-Update-to-match-pambase-20200721.1-2.patch new file mode 100644 index 0000000000..9f4cce14fc --- /dev/null +++ b/desktop/gnome/base/gdm/files/0001-pam-arch-Update-to-match-pambase-20200721.1-2.patch @@ -0,0 +1,216 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Tue, 27 Oct 2020 18:59:14 +0000 +Subject: [PATCH] pam-arch: Update to match pambase 20200721.1-2 + +Update the PAM files for Arch Linux. This has been applied downstream +since Aug 2020. + +https://bugs.archlinux.org/task/67485 +--- + data/meson.build | 1 - + data/pam-arch/gdm-autologin.pam | 22 +++++++++-------- + data/pam-arch/gdm-fingerprint.pam | 31 +++++++++++++++--------- + data/pam-arch/gdm-launch-environment.pam | 24 ++++++++++-------- + data/pam-arch/gdm-password.pam | 17 +++++++------ + data/pam-arch/gdm-pin.pam | 13 ---------- + data/pam-arch/gdm-smartcard.pam | 31 +++++++++++++++--------- + 7 files changed, 75 insertions(+), 64 deletions(-) + delete mode 100644 data/pam-arch/gdm-pin.pam + +diff --git a/data/meson.build b/data/meson.build +index 23e2d7f9..7c5222ea 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -134,7 +134,6 @@ pam_data_files_map = { + 'gdm-fingerprint', + 'gdm-smartcard', + 'gdm-password', +- 'gdm-pin', + ], + 'none': [], + # We should no longer have 'autodetect' at this point +diff --git a/data/pam-arch/gdm-autologin.pam b/data/pam-arch/gdm-autologin.pam +index 99b14209..30bdf529 100644 +--- a/data/pam-arch/gdm-autologin.pam ++++ b/data/pam-arch/gdm-autologin.pam +@@ -1,13 +1,15 @@ +-auth requisite pam_nologin.so +-auth required pam_env.so +-auth optional pam_gdm.so +-auth optional pam_gnome_keyring.so +-auth optional pam_permit.so ++#%PAM-1.0 + +-account include system-local-login ++auth required pam_shells.so ++auth requisite pam_nologin.so ++auth optional pam_permit.so ++auth required pam_env.so ++auth [success=ok default=1] pam_gdm.so ++auth optional pam_gnome_keyring.so + +-password include system-local-login ++account include system-local-login + +-session optional pam_keyinit.so force revoke +-session include system-local-login +-session optional pam_gnome_keyring.so auto_start ++password required pam_deny.so ++ ++session include system-local-login ++session optional pam_gnome_keyring.so auto_start +diff --git a/data/pam-arch/gdm-fingerprint.pam b/data/pam-arch/gdm-fingerprint.pam +index a4808617..cc660d9a 100644 +--- a/data/pam-arch/gdm-fingerprint.pam ++++ b/data/pam-arch/gdm-fingerprint.pam +@@ -1,14 +1,23 @@ +-auth required pam_tally.so onerr=succeed file=/var/log/faillog +-auth required pam_shells.so +-auth requisite pam_nologin.so +-auth required pam_env.so +-auth required pam_fprintd.so +-auth optional pam_permit.so ++#%PAM-1.0 + +-account include system-local-login ++auth required pam_shells.so ++auth requisite pam_nologin.so ++auth required pam_faillock.so preauth ++# Optionally use requisite above if you do not want to prompt for the fingerprint ++# on locked accounts. ++auth [success=1 default=ignore] pam_fprintd.so ++auth [default=die] pam_faillock.so authfail ++auth optional pam_permit.so ++auth required pam_env.so ++auth required pam_faillock.so authsucc ++# If you drop the above call to pam_faillock.so the lock will be done also ++# on non-consecutive authentication failures. ++auth [success=ok default=1] pam_gdm.so ++auth optional pam_gnome_keyring.so + +-password required pam_fprintd.so +-password optional pam_permit.so ++account include system-local-login + +-session optional pam_keyinit.so force revoke +-session include system-local-login ++password required pam_deny.so ++ ++session include system-local-login ++session optional pam_gnome_keyring.so auto_start +diff --git a/data/pam-arch/gdm-launch-environment.pam b/data/pam-arch/gdm-launch-environment.pam +index d59c9cb9..20d1810a 100644 +--- a/data/pam-arch/gdm-launch-environment.pam ++++ b/data/pam-arch/gdm-launch-environment.pam +@@ -1,13 +1,17 @@ +-auth required pam_env.so +-auth required pam_succeed_if.so audit quiet_success user = gdm +-auth optional pam_permit.so ++#%PAM-1.0 + +-account required pam_succeed_if.so audit quiet_success user = gdm +-account optional pam_permit.so ++auth required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup ++auth optional pam_permit.so ++auth required pam_env.so + +-password required pam_deny.so ++account required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup ++account optional pam_permit.so + +-session optional pam_keyinit.so force revoke +-session required pam_succeed_if.so audit quiet_success user = gdm +-session required pam_systemd.so +-session optional pam_permit.so ++password required pam_deny.so ++ ++session optional pam_loginuid.so ++session optional pam_keyinit.so force revoke ++session required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup ++session optional pam_permit.so ++-session optional pam_systemd.so ++session required pam_env.so user_readenv=1 +diff --git a/data/pam-arch/gdm-password.pam b/data/pam-arch/gdm-password.pam +index 8d34794e..137242a6 100644 +--- a/data/pam-arch/gdm-password.pam ++++ b/data/pam-arch/gdm-password.pam +@@ -1,11 +1,12 @@ +-auth include system-local-login +-auth optional pam_gnome_keyring.so ++#%PAM-1.0 + +-account include system-local-login ++auth include system-local-login ++auth optional pam_gnome_keyring.so + +-password include system-local-login +-password optional pam_gnome_keyring.so use_authtok ++account include system-local-login + +-session optional pam_keyinit.so force revoke +-session include system-local-login +-session optional pam_gnome_keyring.so auto_start ++password include system-local-login ++password optional pam_gnome_keyring.so use_authtok ++ ++session include system-local-login ++session optional pam_gnome_keyring.so auto_start +diff --git a/data/pam-arch/gdm-pin.pam b/data/pam-arch/gdm-pin.pam +deleted file mode 100644 +index 135e205e..00000000 +--- a/data/pam-arch/gdm-pin.pam ++++ /dev/null +@@ -1,13 +0,0 @@ +-auth requisite pam_pin.so +-auth include system-local-login +-auth optional pam_gnome_keyring.so +- +-account include system-local-login +- +-password include system-local-login +-password optional pam_pin.so +-password optional pam_gnome_keyring.so use_authtok +- +-session optional pam_keyinit.so force revoke +-session include system-local-login +-session optional pam_gnome_keyring.so auto_start +diff --git a/data/pam-arch/gdm-smartcard.pam b/data/pam-arch/gdm-smartcard.pam +index ec6f75d5..e6ec1299 100644 +--- a/data/pam-arch/gdm-smartcard.pam ++++ b/data/pam-arch/gdm-smartcard.pam +@@ -1,14 +1,23 @@ +-auth required pam_tally.so onerr=succeed file=/var/log/faillog +-auth required pam_shells.so +-auth requisite pam_nologin.so +-auth required pam_env.so +-auth required pam_pkcs11.so wait_for_card card_only +-auth optional pam_permit.so ++#%PAM-1.0 + +-account include system-local-login ++auth required pam_shells.so ++auth requisite pam_nologin.so ++auth required pam_faillock.so preauth ++# Optionally use requisite above if you do not want to prompt for the smartcard ++# on locked accounts. ++auth [success=1 default=ignore] pam_pkcs11.so wait_for_card card_only ++auth [default=die] pam_faillock.so authfail ++auth optional pam_permit.so ++auth required pam_env.so ++auth required pam_faillock.so authsucc ++# If you drop the above call to pam_faillock.so the lock will be done also ++# on non-consecutive authentication failures. ++auth [success=ok default=1] pam_gdm.so ++auth optional pam_gnome_keyring.so + +-password required pam_pkcs11.so +-password optional pam_permit.so ++account include system-local-login + +-session optional pam_keyinit.so force revoke +-session include system-local-login ++password required pam_deny.so ++ ++session include system-local-login ++session optional pam_gnome_keyring.so auto_start diff --git a/desktop/gnome/base/gdm/files/0002-Xsession-Don-t-start-ssh-agent-by-default.patch b/desktop/gnome/base/gdm/files/0002-Xsession-Don-t-start-ssh-agent-by-default.patch new file mode 100644 index 0000000000..568eb2c568 --- /dev/null +++ b/desktop/gnome/base/gdm/files/0002-Xsession-Don-t-start-ssh-agent-by-default.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sat, 20 Jun 2015 17:22:38 +0200 +Subject: [PATCH] Xsession: Don't start ssh-agent by default + +--- + data/Xsession.in | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/data/Xsession.in b/data/Xsession.in +index 2e4de4fe..29ebc30e 100755 +--- a/data/Xsession.in ++++ b/data/Xsession.in +@@ -207,14 +207,6 @@ if [ "x$command" = "xdefault" ] ; then + fi + fi + +-# add ssh-agent if found +-sshagent="`gdmwhich ssh-agent`" +-if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then +- command="$sshagent -- $command" +-elif [ -z "$sshagent" ] ; then +- echo "$0: ssh-agent not found!" +-fi +- + echo "$0: Setup done, will execute: $command" + + eval exec $command diff --git a/desktop/gnome/base/gdm/files/0003-enable-elogind-build.patch b/desktop/gnome/base/gdm/files/0003-enable-elogind-build.patch new file mode 100644 index 0000000000..b190a44595 --- /dev/null +++ b/desktop/gnome/base/gdm/files/0003-enable-elogind-build.patch @@ -0,0 +1,215 @@ +From a8bb1878df6a98798c66b87bbc555bc9f55fcec6 Mon Sep 17 00:00:00 2001 +From: Dudemanguy +Date: Tue, 27 Oct 2020 18:00:24 -0500 +Subject: [PATCH] enable elogind build + +--- + common/meson.build | 2 +- + data/meson.build | 62 ++++++++++++++---------- + data/pam-arch/gdm-launch-environment.pam | 1 + + libgdm/meson.build | 2 +- + meson.build | 36 +++++++++----- + meson_options.txt | 5 +- + 6 files changed, 66 insertions(+), 42 deletions(-) + +diff --git a/common/meson.build b/common/meson.build +index 074dd92e..bca58f7c 100644 +--- a/common/meson.build ++++ b/common/meson.build +@@ -11,7 +11,7 @@ libgdmcommon_src = files( + ) + + libgdmcommon_deps = [ +- libsystemd_dep, ++ logind_dep, + gobject_dep, + gio_dep, + gio_unix_dep, +diff --git a/data/meson.build b/data/meson.build +index 5d9e2847..56074489 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -169,41 +169,53 @@ else + service_config.set('PLYMOUTH_QUIT_SERVICE', '') + endif + +-if get_option('systemdsystemunitdir') != '' +- systemd_systemunitdir = get_option('systemdsystemunitdir') +-else +- systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir') ++systemdsystemunitdir = get_option('systemdsystemunitdir') ++if systemdsystemunitdir != 'no' ++ assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd system unit dir or disable it') ++ if get_option('systemdsystemunitdir') != '' ++ systemd_systemunitdir = get_option('systemdsystemunitdir') ++ else ++ systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir') ++ endif + endif + +-if get_option('systemduserunitdir') != '' +- systemd_userunitdir = get_option('systemduserunitdir') +-else +- systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir', +- define_variable: ['prefix', get_option('prefix')]) ++systemduserunitdir = get_option('systemduserunitdir') ++if systemduserunitdir != 'no' ++ assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd user unit dir or disable it') ++ if get_option('systemduserunitdir') != '' ++ systemd_userunitdir = get_option('systemduserunitdir') ++ else ++ systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir', ++ define_variable: ['prefix', get_option('prefix')]) ++ endif + endif + +-configure_file( +- input: 'gdm.service.in', +- output: '@BASENAME@', +- configuration: service_config, +- install_dir: systemd_systemunitdir, +- format: 'cmake' +-) ++if systemdsystemunitdir != 'no' ++ configure_file( ++ input: 'gdm.service.in', ++ output: '@BASENAME@', ++ configuration: service_config, ++ install_dir: systemd_systemunitdir, ++ format: 'cmake' ++ ) ++endif + + gdm_gnome_session_wanted_targets = [] + foreach component: gdm_gnome_user_session_wanted_components + gdm_gnome_session_wanted_targets += 'Wants=@0@.target'.format(component) + endforeach + +-configure_file( +- input: 'session.conf.in', +- output: 'session.conf', +- configuration: { +- 'requires_component': gdm_gnome_shell_component, +- 'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets), +- }, +- install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d', +-) ++if systemduserunitdir != 'no' ++ configure_file( ++ input: 'session.conf.in', ++ output: 'session.conf', ++ configuration: { ++ 'requires_component': gdm_gnome_shell_component, ++ 'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets), ++ }, ++ install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d', ++ ) ++endif + + # XSession + if get_option('gdm-xsession') +diff --git a/data/pam-arch/gdm-launch-environment.pam b/data/pam-arch/gdm-launch-environment.pam +index 20d1810a..d8910d0a 100644 +--- a/data/pam-arch/gdm-launch-environment.pam ++++ b/data/pam-arch/gdm-launch-environment.pam +@@ -14,4 +14,5 @@ session optional pam_keyinit.so force revoke + session required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup + session optional pam_permit.so + -session optional pam_systemd.so ++-session optional pam_elogind.so + session required pam_env.so user_readenv=1 +diff --git a/libgdm/meson.build b/libgdm/meson.build +index 3f8cafbb..83e95151 100644 +--- a/libgdm/meson.build ++++ b/libgdm/meson.build +@@ -56,7 +56,7 @@ libgdm_deps = [ + glib_dep, + gio_dep, + gio_unix_dep, +- libsystemd_dep, ++ logind_dep, + libgdmcommon_dep, + ] + +diff --git a/meson.build b/meson.build +index a729792c..e152c6ca 100644 +--- a/meson.build ++++ b/meson.build +@@ -93,21 +93,30 @@ xdmcp_dep = cc.find_library('Xdmcp', required: get_option('xdmcp')) + if xdmcp_dep.found() and get_option('tcp-wrappers') + libwrap_dep = cc.find_library('libwrap') + endif +-# systemd +-systemd_dep = dependency('systemd') +-libsystemd_dep = dependency('libsystemd') +-if meson.version().version_compare('>= 0.53') +- systemd_multiseat_x = find_program('systemd-multi-seat-x', +- required: false, +- dirs: [ +- systemd_dep.get_pkgconfig_variable('systemdutildir'), +- '/lib/systemd', +- '/usr/lib/systemd', +- ]) ++ ++logind_provider = get_option('logind-provider') ++systemd_dep = dependency('systemd', required: false) ++if logind_provider == 'systemd' ++ libsystemd_dep = dependency('libsystemd') ++ logind_dep = libsystemd_dep ++ if meson.version().version_compare('>= 0.53') ++ systemd_multiseat_x = find_program('systemd-multi-seat-x', ++ required: false, ++ dirs: [ ++ systemd_dep.get_pkgconfig_variable('systemdutildir'), ++ '/lib/systemd', ++ '/usr/lib/systemd', ++ ]) ++ else ++ systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false) ++ endif ++ systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x' + else +- systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false) ++ elogind_dep = dependency('libelogind') ++ logind_dep = elogind_dep ++ systemd_x_server = 'disabled' + endif +-systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x' ++ + # Plymouth + plymouth_dep = dependency('ply-boot-client', required: get_option('plymouth')) + # Check for Solaris auditing API (ADT) +@@ -314,6 +323,7 @@ summary({ + 'PAM Syslog': have_pam_syslog, + 'Supports PAM Extensions': pam_extensions_supported, + 'SeLinux': libselinux_dep.found(), ++ 'Logind Provider': get_option('logind-provider'), + 'Use GDM Xsession': get_option('gdm-xsession'), + 'Use UserDisplayServer': get_option('user-display-server'), + 'Use SystemdJournal': get_option('systemd-journal'), +diff --git a/meson_options.txt b/meson_options.txt +index 49550bc1..b01676da 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -13,6 +13,7 @@ option('initial-vt', type: 'integer', value: 1, description: 'Initial virtual te + option('ipv6', type: 'boolean', value: false, description: 'Enables compilation of IPv6 code.') + option('lang-file', type: 'string', value: '', description: 'File containing default language settings.') + option('libaudit', type: 'feature', value: 'auto', description: 'Add Linux audit support.') ++option('logind-provider', type: 'combo', choices: ['systemd', 'elogind'], value: 'systemd', description: 'Which logind library to use.') + option('log-dir', type: 'string', value: '/var/log/gdm', description: 'Log directory.') + option('pam-mod-dir', type: 'string', value: '', description: 'Directory to install PAM modules in.') + option('pam-prefix', type: 'string', value: '', description: 'Specify where PAM files go.') +@@ -28,8 +29,8 @@ option('solaris', type: 'boolean', value: false, description: 'Build for Solaris + option('split-authentication', type: 'boolean', value: true, description: 'Enable multiple simultaneous PAM conversations during login.') + option('sysconfsubdir', type: 'string', value: 'gdm', description: 'Directory name used under sysconfdir.') + option('systemd-journal', type: 'boolean', value: true, description: 'Use journald support.') +-option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files.') +-option('systemduserunitdir', type: 'string', value: '', description: 'Directory for systemd user service files.') ++option('systemdsystemunitdir', type: 'string', value: '', description: 'Directory for systemd service files, or \'no\' to disable.') ++option('systemduserunitdir', type: 'string', value: '', description: 'Directory for systemd user service files, or \'no\' to disable.') + option('tcp-wrappers', type: 'boolean', value: false, description: 'Use TCP wrappers.') + option('udev-dir', type: 'string', value: '', description: 'Directory for udev rules file.') + option('user', type: 'string', value: 'gdm', description: 'GDM\'s username.') +-- +2.29.1 + diff --git a/desktop/gnome/base/gdm/files/0004-gdm-CanGraphical-wait-meson.patch b/desktop/gnome/base/gdm/files/0004-gdm-CanGraphical-wait-meson.patch new file mode 100644 index 0000000000..da1ce2b265 --- /dev/null +++ b/desktop/gnome/base/gdm/files/0004-gdm-CanGraphical-wait-meson.patch @@ -0,0 +1,160 @@ +--- a/meson.build 2021-03-21 16:32:37.222883748 +0100 ++++ b/meson.build 2021-03-21 16:32:42.114763457 +0100 +@@ -38,6 +38,7 @@ + + # Dependencies + udev_dep = dependency('udev') ++gudev_dep = dependency('gudev-1.0') + + glib_min_version = '2.56.0' + + +--- a/data/meson.build 2021-03-21 16:07:53.023644342 +0100 ++++ b/data/meson.build 2021-03-21 16:09:14.557724574 +0100 +@@ -161,6 +161,7 @@ + # DBus service files + service_config = configuration_data() + service_config.set('sbindir', gdm_prefix / get_option('sbindir')) ++service_config.set('libexecdir', gdm_prefix / get_option('libexecdir')) + service_config.set('GDM_INITIAL_VT', get_option('initial-vt')) + service_config.set('LANG_CONFIG_FILE', lang_config_file) + if plymouth_dep.found() + +--- a/data/gdm.service.in ++++ b/data/gdm.service.in +@@ -30,6 +30,7 @@ StandardError=inherit + EnvironmentFile=-@LANG_CONFIG_FILE@ + ExecReload=/bin/kill -SIGHUP $MAINPID + KeyringMode=shared ++ExecStartPre=@libexecdir@/gdm-wait-for-drm + + [Install] + Alias=display-manager.service + +--- a/utils/meson.build.ori 2021-03-21 16:15:47.036216779 +0100 ++++ b/utils/meson.build 2021-03-21 16:15:25.328751199 +0100 +@@ -39,3 +39,16 @@ + install_dir: get_option('libexecdir'), + ) + ++# gdm-wait-for-drm ++gdm_wait_for_drm_deps = [ ++ glib_dep, ++ gudev_dep ++] ++ ++gdm_wait_for_drm = executable('gdm-wait-for-drm', ++ 'gdm-wait-for-drm.c', ++ dependencies: gdm_wait_for_drm_deps, ++ include_directories: config_h_dir, ++ install: true, ++ install_dir: get_option('libexecdir'), ++) + +--- /dev/null ++++ b/utils/gdm-wait-for-drm.c +@@ -0,0 +1,101 @@ ++#include ++#include ++ ++/* ++ * Workaround for LP: #1794280. ++ * ++ * That bug is because the DRM device isn't ready by the time GDM tries to ++ * start wayland/X. ++ * This is a script to add to ExecStartPre of gdm.service. It does the ++ * following: ++ * ++ * 1. Enumerate drm devices from udev, looking for a DRM master. If found, ++ * exit. ++ * 2. Connect to the 'uevent' signal of gudev, watching for the same to be ++ * added. Again exit if any are found. ++ * 3. If, after 10 seconds, we haven't seen anything, try to proceed anyway as ++ * a failsafe. ++ */ ++ ++static gboolean ++handle_device (GUdevDevice *device) ++{ ++ const gchar * const * tags; ++ tags = g_udev_device_get_tags (device); ++ g_debug ("%s\n", g_udev_device_get_name (device)); ++ if (g_strv_contains (tags, "master-of-seat")) ++ { ++ g_debug (" is seat master\n"); ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++static void ++uevent_cb (GUdevClient *client G_GNUC_UNUSED, ++ gchar *action, ++ GUdevDevice *device, ++ gpointer user_data) ++{ ++ GMainLoop *loop; ++ ++ g_debug ("uevent action: %s\n", action); ++ ++ loop = (GMainLoop *) user_data; ++ ++ if (g_strcmp0 (action, "add") == 0) ++ { ++ if (handle_device (device)) ++ { ++ g_debug (" this is good\n"); ++ g_main_loop_quit (loop); ++ } ++ else ++ { ++ g_debug (" this is bad\n"); ++ } ++ } ++} ++ ++int ++main() ++{ ++ const gchar * const subsystems[] = { "drm", NULL }; ++ ++ g_autoptr(GList) devices = NULL; ++ g_autoptr(GMainLoop) loop = NULL; ++ g_autoptr(GUdevClient) udev_client = NULL; ++ g_autoptr(GUdevEnumerator) enumerator = NULL; ++ ++ loop = g_main_loop_new (NULL, FALSE); ++ ++ udev_client = g_udev_client_new (subsystems); ++ enumerator = g_udev_enumerator_new (udev_client); ++ g_udev_enumerator_add_match_is_initialized (enumerator); ++ g_udev_enumerator_add_match_subsystem (enumerator, "drm"); ++ ++ devices = g_udev_enumerator_execute (enumerator); ++ ++ g_debug ("enumerating devices...\n"); ++ ++ for (GList *l = devices; l != NULL; l = l->next) ++ { ++ g_autoptr(GUdevDevice) device = G_UDEV_DEVICE (l->data); ++ ++ if (handle_device (device)) ++ { ++ g_debug (" good enough for gdm\n"); ++ return EXIT_SUCCESS; ++ } ++ } ++ ++ g_signal_connect (udev_client, "uevent", G_CALLBACK (uevent_cb), loop); ++ ++ /* after 10 seconds we try anyway */ ++ g_timeout_add_seconds (10, (GSourceFunc) g_main_loop_quit, loop); ++ ++ g_main_loop_run (loop); ++ ++ return EXIT_SUCCESS; ++} +-- +2.17.0 + diff --git a/desktop/gnome/base/gdm/files/Xsession b/desktop/gnome/base/gdm/files/Xsession new file mode 100644 index 0000000000..d5726cfcd2 --- /dev/null +++ b/desktop/gnome/base/gdm/files/Xsession @@ -0,0 +1,2 @@ +#!/bin/sh +exec $@ diff --git a/desktop/gnome/base/gdm/files/gdm.sysusers b/desktop/gnome/base/gdm/files/gdm.sysusers new file mode 100644 index 0000000000..a40ab96820 --- /dev/null +++ b/desktop/gnome/base/gdm/files/gdm.sysusers @@ -0,0 +1,2 @@ +g gdm 42 - +u gdm 42 "GDM" /var/lib/gdm \ No newline at end of file diff --git a/desktop/gnome/base/gdm/files/gdm.tmpfiles b/desktop/gnome/base/gdm/files/gdm.tmpfiles new file mode 100644 index 0000000000..a5ef733357 --- /dev/null +++ b/desktop/gnome/base/gdm/files/gdm.tmpfiles @@ -0,0 +1,15 @@ +d /var/cache/gdm 0755 gdm gdm +d /var/lib/gdm 0755 gdm gdm +d /var/lib/gdm/.local/share/applications 0755 gdm gdm +d /run/gdm/greeter 0755 gdm gdm +d /var/log/gdm 0755 - - + +d /var/lib/gdm/.config 0755 gdm gdm +d /var/lib/gdm/.cache 0755 gdm gdm +d /var/lib/gdm/.local 0755 gdm gdm +d /var/lib/gdm/.local/share 0755 gdm gdm +d /var/lib/gdm/.local/share/applications 0755 gdm gdm + + +d /var/lib/gdm/.config/pulse 0755 gdm gdm +C /var/lib/gdm/.config/pulse/client.conf - gdm gdm - diff --git a/desktop/gnome/base/gdm/pspec.xml b/desktop/gnome/base/gdm/pspec.xml new file mode 100644 index 0000000000..53b06d3546 --- /dev/null +++ b/desktop/gnome/base/gdm/pspec.xml @@ -0,0 +1,117 @@ + + + + + gdm + https://gitlab.gnome.org/GNOME/gdm + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + GNOME Graphical Display Manager + A graphical login manager for your desktop, integrated within the GNOME desktop environment + https://download.gnome.org/sources/gdm/40/gdm-40.0.tar.xz + + dconf-devel + gettext-devel + itstool + accountsservice-devel + elogind-devel + glib2-devel + gtk3-devel + iso-codes-devel + libSM-devel + libcanberra-devel + libcanberra-gtk3-devel + nss-devel + pam-devel + audit-devel + upower-devel + libdaemon-devel + gobject-introspection-devel + meson + + + 0000-Force-Xorg-use-on-the-login-screen.patch + 0001-pam-arch-Update-to-match-pambase-20200721.1-2.patch + 0002-Xsession-Don-t-start-ssh-agent-by-default.patch + 0003-enable-elogind-build.patch + 0004-gdm-CanGraphical-wait-meson.patch + + + + + gdm + + lxdm + sddm + lightdm + + + pam + gtk3 + glib2 + libX11 + libXau + libxcb + elogind + libXdmcp + gdk-pixbuf + libcanberra + accountsservice + libcanberra-gtk3 + audit + keyutils + libgudev + + + /etc + /lib + /usr/bin + /usr/lib/girepository-1.0 + /usr/lib/sysusers.d + /usr/lib/libgdm.so* + /usr/libexec + /usr/sbin + /usr/share/dconf + /usr/share/doc + /usr/share/gdm + /usr/share/glib-2.0 + /usr/share/gnome-session + /usr/share/help + /usr/share/locale + + + gdm.sysusers + + + System.Service + System.Package + + + + + gdm-devel + + gdm + glib2-devel + elogind-devel + + + /usr/include + /usr/lib/pkgconfig + /usr/share/gir-1.0 + + + + + + 2021-06-05 + 40.0 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + \ No newline at end of file diff --git a/desktop/gnome/base/gdm/translations.xml b/desktop/gnome/base/gdm/translations.xml new file mode 100644 index 0000000000..4c58d07589 --- /dev/null +++ b/desktop/gnome/base/gdm/translations.xml @@ -0,0 +1,8 @@ + + + + gdm + GNOME ekran yöneticisi + GDM, yerel veya uzak makinelerde farklı oturumlar açmayı sağlar. + + \ No newline at end of file diff --git a/desktop/gnome/base/gnome-initial-setup/actions.py b/desktop/gnome/base/gnome-initial-setup/actions.py new file mode 100644 index 0000000000..7b4bbafdae --- /dev/null +++ b/desktop/gnome/base/gnome-initial-setup/actions.py @@ -0,0 +1,24 @@ +#!/usr/bin/env 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 autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import mesontools +from pisi.actionsapi import get + +def setup(): + mesontools.configure("-Dsoftware-sources=disabled \ + -Dparental_controls=disabled \ + -Dsystemd=false") + +def build(): + mesontools.build() + +def install(): + mesontools.install() + + pisitools.dodoc("COPYING", "NEWS", "README*") diff --git a/desktop/gnome/base/gnome-initial-setup/pspec.xml b/desktop/gnome/base/gnome-initial-setup/pspec.xml new file mode 100644 index 0000000000..fff481185a --- /dev/null +++ b/desktop/gnome/base/gnome-initial-setup/pspec.xml @@ -0,0 +1,93 @@ + + + + + gnome-initial-setup + https://gitlab.gnome.org/GNOME/gnome-initial-setup + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + GNOME Initial Setup application. + After acquiring or installing a new system there are a few essential things to set up before use. gnome-initial-setup aims to provide a simple, easy, and safe way to prepare a new system. + https://download.gnome.org/sources/gnome-initial-setup/40/gnome-initial-setup-40.1.tar.xz + + glib2-devel + gettext-devel + NetworkManager-devel + accountsservice-devel + gnome-desktop-devel + cheese-devel + libgweather-devel + webkit2gtk-devel + gnome-online-accounts-devel + gdm-devel + libpwquality-devel + vala-devel + mit-kerberos + libnma-devel + polkit-devel + librest-devel + libsecret-devel + ibus-devel + iso-codes-devel + geoclue-devel + pango-devel + meson + gnome-desktop-devel + libseccomp-devel + e2fsprogs-devel + + + + + gnome-initial-setup + + gdm + gtk3 + ibus + cairo + glib2 + pango + cheese + libnma + polkit + geoclue + librest + json-glib + libsecret + fontconfig + gdk-pixbuf + webkit2gtk + libgweather + libpwquality + mit-kerberos + gnome-desktop + NetworkManager + accountsservice + gnome-online-accounts + + + /etc + /usr/libexec/gnome-initial-setup* + /usr/share/applications + /usr/share/gnome-session + /usr/share/gnome-shell + /usr/share/polkit-1 + /usr/share/doc + /usr/share/glib-2.0 + /usr/share/locale + + + + + + 2021-04-21 + 40.1 + First release. + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/gnome/base/gnome-online-miners/actions.py b/desktop/gnome/base/gnome-online-miners/actions.py new file mode 100644 index 0000000000..c743dc22ad --- /dev/null +++ b/desktop/gnome/base/gnome-online-miners/actions.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt +# +# TODO: Add libzapojit (Hotmail&Skydrive) support. + +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import get + +def setup(): + shelltools.export("TRACKER_LIBS","-ltracker-sparql-3.0") + shelltools.export("TRACKER_CFLAGS","-I/usr/include/tracker-3.0") + + autotools.autoreconf("-fi") + autotools.configure("--disable-silent-rules \ + --disable-static \ + --disable-windows-live") + + pisitools.dosed("libtool", " -shared ", " -Wl,-O1,--as-needed -shared ") + +def build(): + autotools.make() + +def install(): + autotools.rawInstall("DESTDIR=%s" % get.installDIR()) + + pisitools.dodoc("ChangeLog", "COPYING", "NEWS", "README") diff --git a/desktop/gnome/base/gnome-online-miners/files/tracker3-support.patch b/desktop/gnome/base/gnome-online-miners/files/tracker3-support.patch new file mode 100644 index 0000000000..c948f65c79 --- /dev/null +++ b/desktop/gnome/base/gnome-online-miners/files/tracker3-support.patch @@ -0,0 +1,1554 @@ +From 53869ebc2783c9d08bb32d59c543ab692770c121 Mon Sep 17 00:00:00 2001 +From: Sam Thursfield +Date: Fri, 15 May 2020 01:11:24 +0200 +Subject: [PATCH 1/5] Use GInitable interface for GomMiner class + +This allows for better error reporting. +--- + src/gom-application.c | 7 +++++- + src/gom-miner.c | 58 +++++++++++++++++++++++++++++-------------- + 2 files changed, 45 insertions(+), 20 deletions(-) + +diff --git a/src/gom-application.c b/src/gom-application.c +index fadd388..bfa99ec 100644 +--- a/src/gom-application.c ++++ b/src/gom-application.c +@@ -229,10 +229,15 @@ gom_application_constructed (GObject *object) + { + GomApplication *self = GOM_APPLICATION (object); + const gchar *display_name; ++ GError *error = NULL; + + G_OBJECT_CLASS (gom_application_parent_class)->constructed (object); + +- self->miner = g_object_new (self->miner_type, NULL); ++ self->miner = g_initable_new (self->miner_type, NULL, &error, NULL); ++ ++ if (self->miner == NULL) ++ g_error ("%s", error->message); ++ + display_name = gom_miner_get_display_name (self->miner); + gom_dbus_set_display_name (self->skeleton, display_name); + } +diff --git a/src/gom-miner.c b/src/gom-miner.c +index 7147b33..1dd9bb8 100644 +--- a/src/gom-miner.c ++++ b/src/gom-miner.c +@@ -28,7 +28,11 @@ + + #include "gom-miner.h" + +-G_DEFINE_TYPE (GomMiner, gom_miner, G_TYPE_OBJECT) ++static void gom_miner_initable_interface_init (GInitableIface *iface); ++ ++G_DEFINE_TYPE_WITH_CODE (GomMiner, gom_miner, G_TYPE_OBJECT, ++ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gom_miner_initable_interface_init)) ++ + + struct _GomMinerPrivate { + GoaClient *client; +@@ -132,20 +136,21 @@ gom_miner_dispose (GObject *object) + } + + static void +-gom_miner_init_goa (GomMiner *self) ++gom_miner_init_goa (GomMiner *self, ++ GError **error) + { + GoaAccount *account; + GoaObject *object; + const gchar *provider_type; + GList *accounts, *l; + GomMinerClass *miner_class = GOM_MINER_GET_CLASS (self); ++ GError *inner_error = NULL; + +- self->priv->client = goa_client_new_sync (NULL, &self->priv->client_error); ++ self->priv->client = goa_client_new_sync (NULL, &inner_error); + +- if (self->priv->client_error != NULL) ++ if (inner_error) + { +- g_critical ("Unable to create GoaClient: %s - indexing for %s will not work", +- self->priv->client_error->message, miner_class->goa_provider_type); ++ g_propagate_error (error, inner_error); + return; + } + +@@ -170,16 +175,34 @@ gom_miner_init_goa (GomMiner *self) + g_list_free_full (accounts, g_object_unref); + } + +-static void +-gom_miner_constructed (GObject *obj) ++static gboolean ++gom_miner_initable_init (GInitable *initable, ++ GCancellable *cancellable, ++ GError **error) + { +- GomMiner *self = GOM_MINER (obj); ++ GError *inner_error = NULL; ++ GomMiner *self; + +- G_OBJECT_CLASS (gom_miner_parent_class)->constructed (obj); ++ self = GOM_MINER (initable); + +- gom_miner_init_goa (self); ++ self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error); ++ if (inner_error) ++ { ++ g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: "); ++ return FALSE; ++ } ++ ++ gom_miner_init_goa (self, &inner_error); ++ if (inner_error) ++ { ++ g_propagate_prefixed_error (error, inner_error, "Unable to connect to GNOME Online Accounts: "); ++ return FALSE; ++ } ++ ++ return TRUE; + } + ++ + static void + gom_miner_init (GomMiner *self) + { +@@ -187,14 +210,12 @@ gom_miner_init (GomMiner *self) + + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GOM_TYPE_MINER, GomMinerPrivate); + self->priv->display_name = g_strdup (""); ++} + +- self->priv->connection = tracker_sparql_connection_get (NULL, &self->priv->connection_error); +- if (self->priv->connection_error != NULL) +- { +- g_critical ("Unable to create TrackerSparqlConnection: %s - indexing for %s will not work", +- self->priv->connection_error->message, +- klass->goa_provider_type); +- } ++static void ++gom_miner_initable_interface_init (GInitableIface *iface) ++{ ++ iface->init = gom_miner_initable_init; + } + + static void +@@ -202,7 +223,6 @@ gom_miner_class_init (GomMinerClass *klass) + { + GObjectClass *oclass = G_OBJECT_CLASS (klass); + +- oclass->constructed = gom_miner_constructed; + oclass->dispose = gom_miner_dispose; + + cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL); +-- +GitLab + + +From a2b53970e1c1486a61a1522010e345732ed6ca54 Mon Sep 17 00:00:00 2001 +From: Sam Thursfield +Date: Fri, 15 May 2020 01:19:58 +0200 +Subject: [PATCH 2/5] Initial port to Tracker 3 + +Each miner now stores its data in a private Tracker database, under +the $XDG_CACHE_HOME/gnome-online-miners/$busname directory. + +Each miner now supports the org.freedesktop.Tracker3.Endpoint D-Bus +interface which apps can use to query data directly from the miners. +--- + configure.ac | 4 +- + src/gom-application.c | 4 +- + src/gom-miner.c | 120 +++++++++++++++++++++++++++++++++++++++++- + src/gom-miner.h | 1 + + src/gom-tracker.c | 2 +- + 5 files changed, 125 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index e91e4af..8ee6315 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -21,7 +21,7 @@ AC_HEADER_STDC + + GDATA_MIN_VERSION=0.15.2 + GFBGRAPH_MIN_VERSION=0.2.2 +-GLIB_MIN_VERSION=2.35.1 ++GLIB_MIN_VERSION=2.56.0 + GOA_MIN_VERSION=3.13.3 + GRILO_MIN_VERSION=0.3.0 + ZAPOJIT_MIN_VERSION=0.0.2 +@@ -36,7 +36,7 @@ PKG_CHECK_MODULES(GIO, [gio-2.0 gio-unix-2.0]) + PKG_CHECK_MODULES(GOA, [goa-1.0 >= $GOA_MIN_VERSION]) + AC_DEFINE([GOA_API_IS_SUBJECT_TO_CHANGE], [], [We are aware that GOA's API can change]) + +-PKG_CHECK_MODULES(TRACKER, [tracker-miner-2.0 tracker-sparql-2.0]) ++PKG_CHECK_MODULES(TRACKER, [tracker-sparql-3.0]) + + # Facebook + AC_ARG_ENABLE([facebook], [AS_HELP_STRING([--enable-facebook], [Enable Facebook miner])], [], [enable_facebook=yes]) +diff --git a/src/gom-application.c b/src/gom-application.c +index bfa99ec..86546ed 100644 +--- a/src/gom-application.c ++++ b/src/gom-application.c +@@ -233,7 +233,9 @@ gom_application_constructed (GObject *object) + + G_OBJECT_CLASS (gom_application_parent_class)->constructed (object); + +- self->miner = g_initable_new (self->miner_type, NULL, &error, NULL); ++ self->miner = g_initable_new (self->miner_type, NULL, &error, ++ "bus-name", g_application_get_application_id (G_APPLICATION (self)), ++ NULL); + + if (self->miner == NULL) + g_error ("%s", error->message); +diff --git a/src/gom-miner.c b/src/gom-miner.c +index 1dd9bb8..f349d01 100644 +--- a/src/gom-miner.c ++++ b/src/gom-miner.c +@@ -38,7 +38,9 @@ struct _GomMinerPrivate { + GoaClient *client; + GError *client_error; + ++ gchar *bus_name; + TrackerSparqlConnection *connection; ++ TrackerEndpointDBus *endpoint; + GError *connection_error; + + gchar *display_name; +@@ -62,6 +64,14 @@ typedef struct { + gpointer service; + } InsertSharedContentData; + ++typedef enum ++{ ++ PROP_BUS_NAME = 1, ++ N_PROPERTIES ++} GomMinerProperty; ++ ++static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; ++ + static GThreadPool *cleanup_pool; + + static void cleanup_job (gpointer data, gpointer user_data); +@@ -135,6 +145,58 @@ gom_miner_dispose (GObject *object) + G_OBJECT_CLASS (gom_miner_parent_class)->dispose (object); + } + ++static void ++gom_miner_init_database (GomMiner *self, ++ GCancellable *cancellable, ++ GError **error) ++{ ++ TrackerSparqlConnectionFlags flags; ++ g_autoptr (GFile) store_path = NULL; ++ g_autoptr (GDBusConnection) bus = NULL; ++ GError *inner_error = NULL; ++ ++ flags = TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STEMMER | ++ TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_UNACCENT | ++ TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STOP_WORDS | ++ TRACKER_SPARQL_CONNECTION_FLAGS_FTS_IGNORE_NUMBERS; ++ ++ store_path = g_file_new_build_filename (g_get_user_cache_dir (), ++ "gnome-online-miners", ++ self->priv->bus_name, ++ NULL); ++ ++ self->priv->connection = tracker_sparql_connection_new (flags, ++ store_path, ++ tracker_sparql_get_ontology_nepomuk (), ++ cancellable, ++ &inner_error); ++ ++ if (inner_error) ++ { ++ g_propagate_error (error, inner_error); ++ return; ++ } ++ ++ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error); ++ ++ if (inner_error) ++ { ++ g_propagate_error (error, inner_error); ++ return; ++ } ++ ++ self->priv->endpoint = tracker_endpoint_dbus_new (self->priv->connection, ++ bus, ++ NULL, /* object path */ ++ cancellable, ++ &inner_error); ++ if (inner_error) ++ { ++ g_propagate_error (error, inner_error); ++ return; ++ } ++} ++ + static void + gom_miner_init_goa (GomMiner *self, + GError **error) +@@ -185,10 +247,10 @@ gom_miner_initable_init (GInitable *initable, + + self = GOM_MINER (initable); + +- self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error); ++ gom_miner_init_database (self, cancellable, &inner_error); + if (inner_error) + { +- g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: "); ++ g_propagate_prefixed_error (error, inner_error, "Unable to set up Tracker database: "); + return FALSE; + } + +@@ -212,6 +274,47 @@ gom_miner_init (GomMiner *self) + self->priv->display_name = g_strdup (""); + } + ++static void ++gom_miner_set_property (GObject *object, ++ guint property_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GomMiner *self = GOM_MINER (object); ++ ++ switch ((GomMinerProperty) property_id) ++ { ++ case PROP_BUS_NAME: ++ g_free (self->priv->bus_name); ++ self->priv->bus_name = g_value_dup_string (value); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ break; ++ } ++} ++ ++static void ++gom_miner_get_property (GObject *object, ++ guint property_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GomMiner *self = GOM_MINER (object); ++ ++ switch ((GomMinerProperty) property_id) ++ { ++ case PROP_BUS_NAME: ++ g_value_set_string (value, self->priv->bus_name); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ break; ++ } ++} ++ + static void + gom_miner_initable_interface_init (GInitableIface *iface) + { +@@ -224,6 +327,19 @@ gom_miner_class_init (GomMinerClass *klass) + GObjectClass *oclass = G_OBJECT_CLASS (klass); + + oclass->dispose = gom_miner_dispose; ++ oclass->set_property = gom_miner_set_property; ++ oclass->get_property = gom_miner_get_property; ++ ++ obj_properties[PROP_BUS_NAME] = g_param_spec_string ("bus-name", ++ "Bus Name", ++ "D-Bus name of the miner", ++ NULL /* default value */, ++ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | ++ G_PARAM_STATIC_STRINGS); ++ ++ g_object_class_install_properties (oclass, ++ N_PROPERTIES, ++ obj_properties); + + cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL); + +diff --git a/src/gom-miner.h b/src/gom-miner.h +index 8f83139..5dcfc8d 100644 +--- a/src/gom-miner.h ++++ b/src/gom-miner.h +@@ -61,6 +61,7 @@ typedef struct _GomMinerPrivate GomMinerPrivate; + typedef struct { + GomMiner *miner; + TrackerSparqlConnection *connection; ++ gchar *bus_name; + + GoaAccount *account; + GHashTable *services; +diff --git a/src/gom-tracker.c b/src/gom-tracker.c +index 68818c4..5666c16 100644 +--- a/src/gom-tracker.c ++++ b/src/gom-tracker.c +@@ -408,7 +408,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection + gchar *retval = NULL; + gchar *select = NULL; + +- g_return_val_if_fail (TRACKER_SPARQL_IS_CONNECTION (connection), NULL); ++ g_return_val_if_fail (TRACKER_IS_SPARQL_CONNECTION (connection), NULL); + g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + g_return_val_if_fail (make != NULL || model != NULL, NULL); +-- +GitLab + + +From 3e77eff8a677c1ecd9aa129094ed857da802d787 Mon Sep 17 00:00:00 2001 +From: Sam Thursfield +Date: Fri, 15 May 2020 01:37:28 +0200 +Subject: [PATCH 3/5] Add DataObject class to our resources + +We need this to set nie:dataSource property. I don't understand +how this worked in the past. +--- + src/gom-tracker.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gom-tracker.c b/src/gom-tracker.c +index 5666c16..63a4c29 100644 +--- a/src/gom-tracker.c ++++ b/src/gom-tracker.c +@@ -208,7 +208,7 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection + insert = g_string_new (NULL); + g_string_append_printf + (insert, +- "INSERT OR REPLACE %s { <%s> a nie:InformationElement ; %s %s }", ++ "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }", + graph_str, resource, property_name, quoted); + g_free (quoted); + +-- +GitLab + + +From e742a60cf9dea1391d1ff409ce5696d21f423bed Mon Sep 17 00:00:00 2001 +From: Sam Thursfield +Date: Fri, 15 May 2020 02:13:11 +0200 +Subject: [PATCH 4/5] Organize data into content-based graphs + +Previously GOM used a graph per account and per resource but this +cannot be done in Tracker 3. + +In Tracker 3, each graph is stored as a separate SQLite database +and currently a maximum of ten graphs can be included in a single +query due to SQLite's limitations. + +The new layout is modelled after how tracker-miner-fs uses graphs: +we use a graph per content type (Contacts, Documents, Pictures), +plus an extra graph to store accounts and folders/collections. +--- + src/gom-facebook-miner.c | 12 ++--- + src/gom-flickr-miner.c | 24 +++++----- + src/gom-gdata-miner.c | 31 ++++++------ + src/gom-media-server-miner.c | 10 ++-- + src/gom-miner.c | 40 ++++++++++++---- + src/gom-miner.h | 1 - + src/gom-owncloud-miner.c | 22 +++++---- + src/gom-tracker.c | 93 +++++++++++++++++------------------- + src/gom-tracker.h | 14 +++++- + src/gom-zpj-miner.c | 22 ++++----- + 10 files changed, 150 insertions(+), 119 deletions(-) + +diff --git a/src/gom-facebook-miner.c b/src/gom-facebook-miner.c +index ff42ca5..fc89096 100644 +--- a/src/gom-facebook-miner.c ++++ b/src/gom-facebook-miner.c +@@ -70,7 +70,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_PICTURES_GRAPH, identifier, + "nfo:RemoteDataObject", class, NULL); + + if (*error != NULL) +@@ -239,7 +239,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:url", album_link); + + if (*error != NULL) +@@ -248,7 +248,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:description", album_description); + + if (*error != NULL) +@@ -257,7 +257,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:title", album_name); + + if (*error != NULL) +@@ -274,7 +274,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nco:creator", contact_resource); + g_free (contact_resource); + +@@ -284,7 +284,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:contentCreated", album_created_time); + + if (*error != NULL) +diff --git a/src/gom-flickr-miner.c b/src/gom-flickr-miner.c +index 9ac338e..dc7349e 100644 +--- a/src/gom-flickr-miner.c ++++ b/src/gom-flickr-miner.c +@@ -143,14 +143,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_PICTURES_GRAPH, identifier, + "nfo:RemoteDataObject", class, NULL); + + if (*error != NULL) + goto out; + + gom_tracker_update_datasource (connection, datasource_urn, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -166,7 +166,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + parent_resource_urn = gom_tracker_sparql_connection_ensure_resource + (connection, cancellable, error, + NULL, +- datasource_urn, parent_identifier, ++ TRACKER_PICTURES_GRAPH, parent_identifier, + "nfo:RemoteDataObject", "nfo:DataContainer", NULL); + g_free (parent_identifier); + +@@ -176,7 +176,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:isPartOf", parent_resource_urn); + g_free (parent_resource_urn); + +@@ -187,7 +187,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:title", grl_media_get_title (entry->media)); + + if (*error != NULL) +@@ -202,7 +202,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + created_time = modification_date = grl_media_get_creation_date (entry->media); + new_mtime = g_date_time_to_unix (modification_date); + mtime_changed = gom_tracker_update_mtime (connection, new_mtime, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -221,7 +221,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:contentCreated", date); + g_free (date); + } +@@ -233,7 +233,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:url", url); + + if (*error != NULL) +@@ -242,7 +242,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:description", grl_media_get_description (entry->media)); + + if (*error != NULL) +@@ -254,7 +254,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:mimeType", mime); + g_free (mime); + +@@ -265,7 +265,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + contact_resource = gom_tracker_utils_ensure_contact_resource + (connection, + cancellable, error, +- datasource_urn, grl_media_get_author (entry->media)); ++ TRACKER_PICTURES_GRAPH, grl_media_get_author (entry->media)); + + if (*error != NULL) + goto out; +@@ -273,7 +273,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nco:creator", contact_resource); + g_free (contact_resource); + +diff --git a/src/gom-gdata-miner.c b/src/gom-gdata-miner.c +index 7872431..d0deb80 100644 +--- a/src/gom-gdata-miner.c ++++ b/src/gom-gdata-miner.c +@@ -120,7 +120,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_DOCUMENTS_GRAPH, identifier, + "nfo:RemoteDataObject", class, NULL); + + if (*error != NULL) +@@ -187,7 +187,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection, + parent_resource_urn = gom_tracker_sparql_connection_ensure_resource + (connection, cancellable, error, + NULL, +- datasource_urn, parent_resource_id, ++ GOM_GRAPH, parent_resource_id, + "nfo:RemoteDataObject", "nfo:DataContainer", NULL); + g_free (parent_resource_id); + +@@ -219,7 +219,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection, + gom_tracker_sparql_connection_toggle_favorite + (connection, + cancellable, error, +- resource, starred); ++ TRACKER_PICTURES_GRAPH, resource, starred); + + if (*error != NULL) + goto out; +@@ -400,14 +400,14 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_PICTURES_GRAPH, identifier, + "nfo:RemoteDataObject", "nmm:Photo", NULL); + + if (*error != NULL) + goto out; + + gom_tracker_update_datasource (connection, datasource_urn, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + if (*error != NULL) + goto out; +@@ -566,6 +566,7 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection, + equipment_resource = gom_tracker_utils_ensure_equipment_resource (connection, + cancellable, + error, ++ TRACKER_PICTURES_GRAPH, + make, + model); + +@@ -665,7 +666,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_PICTURES_GRAPH, identifier, + "nfo:RemoteDataObject", "nfo:DataContainer", + NULL); + +@@ -674,7 +675,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + + gom_tracker_update_datasource + (connection, datasource_urn, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -685,7 +686,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + */ + new_mtime = gdata_entry_get_updated (GDATA_ENTRY (album)); + mtime_changed = gom_tracker_update_mtime (connection, new_mtime, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -703,7 +704,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:url", alternate_uri); + + if (*error != NULL) +@@ -713,7 +714,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:description", summary); + + if (*error != NULL) +@@ -723,7 +724,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:title", title); + + if (*error != NULL) +@@ -743,7 +744,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nco:creator", contact_resource); + g_free (contact_resource); + +@@ -755,7 +756,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:contentCreated", date); + g_free (date); + +@@ -865,7 +866,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection, + if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection, + cancellable, + &local_error, +- datasource_urn, ++ TRACKER_PICTURES_GRAPH, + source_urn, + "nie:relatedTo", + photo_resource_urn)) +@@ -878,7 +879,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection, + if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection, + cancellable, + &local_error, +- datasource_urn, ++ TRACKER_PICTURES_GRAPH, + photo_resource_urn, + "nie:links", + source_urn)) +diff --git a/src/gom-media-server-miner.c b/src/gom-media-server-miner.c +index 490869e..32e08c6 100644 +--- a/src/gom-media-server-miner.c ++++ b/src/gom-media-server-miner.c +@@ -65,14 +65,14 @@ account_miner_job_process_photo (GomAccountMinerJob *job, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_PICTURES_GRAPH, identifier, + "nfo:RemoteDataObject", class, NULL); + + if (*error != NULL) + goto out; + + gom_tracker_update_datasource (connection, datasource_urn, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + if (*error != NULL) + goto out; +@@ -81,7 +81,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:url", photo->url); + + if (*error != NULL) +@@ -90,7 +90,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:mimeType", photo->mimetype); + + if (*error != NULL) +@@ -99,7 +99,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:title", photo->name); + + if (*error != NULL) +diff --git a/src/gom-miner.c b/src/gom-miner.c +index f349d01..32892fa 100644 +--- a/src/gom-miner.c ++++ b/src/gom-miner.c +@@ -376,7 +376,7 @@ gom_miner_ensure_datasource (GomMiner *self, + " <%s> a nie:DataSource ; nao:identifier \"%s\" . " + " <%s> a nie:InformationElement ; nie:rootElementOf <%s> ; nie:version \"%d\"" + "}", +- datasource_urn, ++ GOM_GRAPH, + datasource_urn, klass->miner_identifier, + root_element_urn, datasource_urn, klass->version); + +@@ -401,8 +401,8 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job, + + select = g_string_new (NULL); + g_string_append_printf (select, +- "SELECT ?urn nao:identifier(?urn) WHERE { ?urn nie:dataSource <%s> }", +- job->datasource_urn); ++ "SELECT ?urn ?id WHERE { GRAPH <%s> { ?urn nie:dataSource <%s> ; nao:identifier ?id . } }", ++ GOM_GRAPH, job->datasource_urn); + + cursor = tracker_sparql_connection_query (job->connection, + select->str, +@@ -415,9 +415,21 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job, + + while (tracker_sparql_cursor_next (cursor, cancellable, error)) + { +- g_hash_table_insert (job->previous_resources, +- g_strdup (tracker_sparql_cursor_get_string (cursor, 1, NULL)), +- g_strdup (tracker_sparql_cursor_get_string (cursor, 0, NULL))); ++ const gchar *urn, *identifier; ++ ++ urn = tracker_sparql_cursor_get_string (cursor, 0, NULL); ++ identifier = tracker_sparql_cursor_get_string (cursor, 1, NULL); ++ ++ if (identifier != NULL) ++ { ++ g_hash_table_insert (job->previous_resources, ++ g_strdup (identifier), ++ g_strdup (urn)); ++ } ++ else ++ { ++ g_warning ("Missing identifier for urn %s", urn); ++ } + } + + g_object_unref (cursor); +@@ -489,16 +501,19 @@ gom_account_miner_job (GTask *task, + if (error != NULL) + goto out; + ++ g_debug ("account miner: Querying existing accounts stored in database"); + gom_account_miner_job_query_existing (job, &error); + + if (error != NULL) + goto out; + ++ g_debug ("account miner: Querying remote server"); + gom_account_miner_job_query (job, &error); + + if (error != NULL) + goto out; + ++ g_debug ("account miner: Removing stale accounts"); + gom_account_miner_job_cleanup_previous (job, &error); + + if (error != NULL) +@@ -752,10 +767,15 @@ cleanup_job (gpointer data, + + /* find all our datasources in the tracker DB */ + select = g_string_new (NULL); +- g_string_append_printf (select, "SELECT ?datasource nie:version(?root) WHERE { " +- "?datasource a nie:DataSource . " +- "?datasource nao:identifier \"%s\" . " +- "OPTIONAL { ?root nie:rootElementOf ?datasource } }", ++ g_string_append_printf (select, ++ "SELECT ?datasource nie:version(?root) WHERE { " ++ " GRAPH <%s> { " ++ " ?datasource a nie:DataSource . " ++ " ?datasource nao:identifier \"%s\" . " ++ " OPTIONAL { ?root nie:rootElementOf ?datasource } " ++ " }" ++ "}", ++ GOM_GRAPH, + klass->miner_identifier); + + cursor = tracker_sparql_connection_query (self->priv->connection, +diff --git a/src/gom-miner.h b/src/gom-miner.h +index 5dcfc8d..8f83139 100644 +--- a/src/gom-miner.h ++++ b/src/gom-miner.h +@@ -61,7 +61,6 @@ typedef struct _GomMinerPrivate GomMinerPrivate; + typedef struct { + GomMiner *miner; + TrackerSparqlConnection *connection; +- gchar *bus_name; + + GoaAccount *account; + GHashTable *services; +diff --git a/src/gom-owncloud-miner.c b/src/gom-owncloud-miner.c +index 34d303b..623f2e1 100644 +--- a/src/gom-owncloud-miner.c ++++ b/src/gom-owncloud-miner.c +@@ -100,14 +100,14 @@ account_miner_job_process_file (GomAccountMinerJob *job, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_DOCUMENTS_GRAPH, identifier, + "nfo:RemoteDataObject", class, NULL); + + if (*error != NULL) + goto out; + + gom_tracker_update_datasource (connection, datasource_urn, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_DOCUMENTS_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -117,7 +117,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, + modification_time = g_date_time_new_from_timeval_local (&tv); + new_mtime = g_date_time_to_unix (modification_time); + mtime_changed = gom_tracker_update_mtime (connection, new_mtime, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_DOCUMENTS_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -133,7 +133,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_DOCUMENTS_GRAPH, resource, + "nie:url", uri); + + if (*error != NULL) +@@ -156,7 +156,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, + parent_resource_urn = gom_tracker_sparql_connection_ensure_resource + (connection, cancellable, error, + NULL, +- datasource_urn, parent_identifier, ++ GOM_GRAPH, parent_identifier, + "nfo:RemoteDataObject", "nfo:DataContainer", NULL); + g_checksum_reset (checksum); + g_free (parent_identifier); +@@ -168,7 +168,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_DOCUMENTS_GRAPH, resource, + "nie:isPartOf", parent_resource_urn); + g_free (parent_resource_urn); + +@@ -182,7 +182,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_DOCUMENTS_GRAPH, resource, + "nie:mimeType", mime); + + if (*error != NULL) +@@ -194,7 +194,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_DOCUMENTS_GRAPH, resource, + "nfo:fileName", display_name); + + if (*error != NULL) +@@ -416,6 +416,11 @@ query_owncloud (GomAccountMinerJob *job, + mount = g_volume_get_mount (volume); + if (mount == NULL) + { ++ g_autofree gchar *volume_name; ++ ++ volume_name = g_volume_get_name (volume); ++ g_debug ("Mounting Online Account volume %s", volume_name); ++ + data.error = error; + + context = g_main_context_new (); +@@ -436,6 +441,7 @@ query_owncloud (GomAccountMinerJob *job, + } + + root = g_mount_get_root (mount); ++ g_debug ("Got volume from gnome-online-accounts: root is %s", g_file_peek_path (root)); + account_miner_job_traverse_dir (job, connection, previous_resources, datasource_urn, root, TRUE, cancellable, error); + + g_object_unref (root); +diff --git a/src/gom-tracker.c b/src/gom-tracker.c +index 63a4c29..0d1766c 100644 +--- a/src/gom-tracker.c ++++ b/src/gom-tracker.c +@@ -26,16 +26,11 @@ + #include "gom-tracker.h" + #include "gom-utils.h" + +-static gchar * +-_tracker_utils_format_into_graph (const gchar *graph) +-{ +- return (graph != NULL) ? g_strdup_printf ("INTO <%s> ", graph) : g_strdup (""); +-} +- + static gboolean + gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *connection, + GCancellable *cancellable, + GError **error, ++ const gchar *graph, + const gchar *resource, + const gchar *attribute, + gchar **value) +@@ -45,8 +40,8 @@ gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *con + const gchar *string_value = NULL; + gboolean res; + +- g_string_append_printf (select, "SELECT ?val { <%s> %s ?val }", +- resource, attribute); ++ g_string_append_printf (select, "SELECT ?val { GRAPH <%s> { <%s> %s ?val } }", ++ graph, resource, attribute); + cursor = tracker_sparql_connection_query (connection, + select->str, + cancellable, error); +@@ -86,7 +81,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti + const gchar *class, + ...) + { +- GString *select, *insert, *inner; ++ GString *select, *inner; ++ gchar *insert; + va_list args; + const gchar *arg; + TrackerSparqlCursor *cursor; +@@ -98,6 +94,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti + gchar *key = NULL, *val = NULL; + gboolean exists = FALSE; + ++ g_return_val_if_fail (graph != NULL, NULL); ++ + /* build the inner query with all the classes */ + va_start (args, class); + inner = g_string_new (NULL); +@@ -112,7 +110,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti + /* query if such a resource is already in the DB */ + select = g_string_new (NULL); + g_string_append_printf (select, +- "SELECT ?urn WHERE { ?urn %s }", inner->str); ++ "SELECT ?urn WHERE { GRAPH <%s> { ?urn %s } }", graph, inner->str); + + cursor = tracker_sparql_connection_query (connection, + select->str, +@@ -138,19 +136,12 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti + } + + /* not found, create the resource */ +- insert = g_string_new (NULL); +- graph_str = _tracker_utils_format_into_graph (graph); +- +- g_string_append_printf (insert, "INSERT %s { _:res %s }", +- graph_str, inner->str); +- g_free (graph_str); +- g_string_free (inner, TRUE); +- ++ insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }", ++ graph, inner->str); + insert_res = +- tracker_sparql_connection_update_blank (connection, insert->str, ++ tracker_sparql_connection_update_blank (connection, insert, + G_PRIORITY_DEFAULT, NULL, error); +- +- g_string_free (insert, TRUE); ++ g_free (insert); + + if (*error != NULL) + goto out; +@@ -194,10 +185,10 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection + const gchar *property_value) + { + GString *insert; +- gchar *graph_str, *quoted; ++ gchar *quoted; + gboolean retval = TRUE; + +- graph_str = _tracker_utils_format_into_graph (graph); ++ g_return_val_if_fail (graph != NULL, FALSE); + + /* the "null" value must not be quoted */ + if (property_value == NULL) +@@ -208,8 +199,8 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection + insert = g_string_new (NULL); + g_string_append_printf + (insert, +- "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }", +- graph_str, resource, property_name, quoted); ++ "INSERT OR REPLACE INTO <%s> { <%s> a nie:InformationElement, nie:DataObject ; %s %s }", ++ graph, resource, property_name, quoted); + g_free (quoted); + + g_debug ("Insert or replace triple: query %s", insert->str); +@@ -223,8 +214,6 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection + if (*error != NULL) + retval = FALSE; + +- g_free (graph_str); +- + return retval; + } + +@@ -271,6 +260,7 @@ gboolean + gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection, + GCancellable *cancellable, + GError **error, ++ const gchar *graph, + const gchar *resource, + gboolean favorite) + { +@@ -279,15 +269,15 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti + gboolean retval = TRUE; + + if (favorite) +- op_str = "INSERT OR REPLACE"; ++ op_str = "INSERT OR REPLACE INTO"; + else +- op_str = "DELETE"; ++ op_str = "DELETE FROM"; + + update = g_string_new (NULL); + g_string_append_printf + (update, +- "%s { <%s> nao:hasTag nao:predefined-tag-favorite }", +- op_str, resource); ++ "%s <%s> { <%s> nao:hasTag nao:predefined-tag-favorite }", ++ op_str, graph, resource); + + g_debug ("Toggle favorite: query %s", update->str); + +@@ -321,9 +311,13 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection, + mail_uri = g_strconcat ("mailto:", email, NULL); + select = g_string_new (NULL); + g_string_append_printf (select, +- "SELECT ?urn WHERE { ?urn a nco:Contact . " +- "?urn nco:hasEmailAddress ?mail . " +- "FILTER (fn:contains(?mail, \"%s\" )) }", mail_uri); ++ "SELECT ?urn WHERE { " ++ " GRAPH <%s> { " ++ " ?urn a nco:Contact . " ++ " ?urn nco:hasEmailAddress ?mail . " ++ " FILTER (fn:contains(?mail, \"%s\" )) " ++ " }" ++ "}", TRACKER_CONTACTS_GRAPH, mail_uri); + + cursor = tracker_sparql_connection_query (connection, + select->str, +@@ -351,8 +345,9 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection, + insert = g_string_new (NULL); + + g_string_append_printf (insert, +- "INSERT { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . " ++ "INSERT INTO <%s> { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . " + "_:res a nco:Contact ; nco:hasEmailAddress <%s> ; nco:fullname \"%s\" . }", ++ TRACKER_CONTACTS_GRAPH, + mail_uri, email, + mail_uri, fullname); + +@@ -397,6 +392,7 @@ gchar * + gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection, + GCancellable *cancellable, + GError **error, ++ const gchar *graph, + const gchar *make, + const gchar *model) + { +@@ -416,7 +412,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection + equip_uri = tracker_sparql_escape_uri_printf ("urn:equipment:%s:%s:", + make != NULL ? make : "", + model != NULL ? model : ""); +- select = g_strdup_printf ("SELECT <%s> WHERE { }", equip_uri); ++ select = g_strdup_printf ("ASK { GRAPH <%s> { <%s> a nfo:Equipment } }", graph, equip_uri); + + local_error = NULL; + cursor = tracker_sparql_connection_query (connection, select, cancellable, &local_error); +@@ -436,20 +432,19 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection + + if (res) + { +- const gchar *cursor_uri; +- +- cursor_uri = tracker_sparql_cursor_get_string (cursor, 0, NULL); +- if (g_strcmp0 (cursor_uri, equip_uri) == 0) ++ if (tracker_sparql_cursor_get_boolean (cursor, 0)) + { +- /* return the found resource */ +- retval = g_strdup (cursor_uri); ++ /* The resource exists */ ++ retval = equip_uri; ++ equip_uri = NULL; + g_debug ("Found resource in the store: %s", retval); + goto out; + } + } + + /* not found, create the resource */ +- insert = g_strdup_printf ("INSERT { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }", ++ insert = g_strdup_printf ("INSERT INTO <%s> { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }", ++ graph, + equip_uri, + make, + model); +@@ -480,7 +475,7 @@ void + gom_tracker_update_datasource (TrackerSparqlConnection *connection, + const gchar *datasource_urn, + gboolean resource_exists, +- const gchar *identifier, ++ const gchar *graph, + const gchar *resource, + GCancellable *cancellable, + GError **error) +@@ -498,7 +493,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection *connection, + + res = gom_tracker_sparql_connection_get_string_attribute + (connection, cancellable, error, +- resource, "nie:dataSource", &old_value); ++ graph, resource, "nie:dataSource", &old_value); + g_clear_error (error); + + if (res) +@@ -514,7 +509,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection *connection, + if (set_datasource) + gom_tracker_sparql_connection_set_triple + (connection, cancellable, error, +- identifier, resource, ++ graph, resource, + "nie:dataSource", datasource_urn); + } + +@@ -522,7 +517,7 @@ gboolean + gom_tracker_update_mtime (TrackerSparqlConnection *connection, + gint64 new_mtime, + gboolean resource_exists, +- const gchar *identifier, ++ const gchar *graph, + const gchar *resource, + GCancellable *cancellable, + GError **error) +@@ -536,7 +531,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection *connection, + { + res = gom_tracker_sparql_connection_get_string_attribute + (connection, cancellable, error, +- resource, "nie:contentLastModified", &old_value); ++ graph, resource, "nie:contentLastModified", &old_value); + g_clear_error (error); + + if (res) +@@ -552,7 +547,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection *connection, + date = gom_iso8601_from_timestamp (new_mtime); + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, cancellable, error, +- identifier, resource, ++ graph, resource, + "nie:contentLastModified", date); + g_free (date); + +diff --git a/src/gom-tracker.h b/src/gom-tracker.h +index 94a39e8..a5ae6fd 100644 +--- a/src/gom-tracker.h ++++ b/src/gom-tracker.h +@@ -29,6 +29,14 @@ + + G_BEGIN_DECLS + ++/* The graph where we store account meta information */ ++#define GOM_GRAPH "tracker.api.gnome.org/ontology/v3/gnome-online-miners" ++ ++/* Graphs where we store content information */ ++#define TRACKER_CONTACTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Contacts" ++#define TRACKER_DOCUMENTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Documents" ++#define TRACKER_PICTURES_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Pictures" ++ + gchar *gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connection, + GCancellable *cancellable, + GError **error, +@@ -57,6 +65,7 @@ gboolean gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *conn + gboolean gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection, + GCancellable *cancellable, + GError **error, ++ const gchar *graph, + const gchar *resource, + gboolean favorite); + +@@ -69,20 +78,21 @@ gchar* gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *conne + gchar *gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection, + GCancellable *cancellable, + GError **error, ++ const gchar *graph, + const gchar *make, + const gchar *model); + + void gom_tracker_update_datasource (TrackerSparqlConnection *connection, + const gchar *datasource_urn, + gboolean resource_exists, +- const gchar *identifier, ++ const gchar *graph, + const gchar *resource, + GCancellable *cancellable, + GError **error); + gboolean gom_tracker_update_mtime (TrackerSparqlConnection *connection, + gint64 new_mtime, + gboolean resource_exists, +- const gchar *identifier, ++ const gchar *graph, + const gchar *resource, + GCancellable *cancellable, + GError **error); +diff --git a/src/gom-zpj-miner.c b/src/gom-zpj-miner.c +index 6dff947..1372de5 100644 +--- a/src/gom-zpj-miner.c ++++ b/src/gom-zpj-miner.c +@@ -70,14 +70,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + (connection, + cancellable, error, + &resource_exists, +- datasource_urn, identifier, ++ TRACKER_PICTURES_GRAPH, identifier, + "nfo:RemoteDataObject", class, NULL); + + if (*error != NULL) + goto out; + + gom_tracker_update_datasource (connection, datasource_urn, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -86,7 +86,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + updated_time = zpj_skydrive_entry_get_updated_time (entry); + new_mtime = g_date_time_to_unix (updated_time); + mtime_changed = gom_tracker_update_mtime (connection, new_mtime, +- resource_exists, identifier, resource, ++ resource_exists, TRACKER_PICTURES_GRAPH, resource, + cancellable, error); + + if (*error != NULL) +@@ -102,7 +102,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:url", identifier); + + if (*error != NULL) +@@ -119,7 +119,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + parent_resource_urn = gom_tracker_sparql_connection_ensure_resource + (connection, cancellable, error, + NULL, +- datasource_urn, parent_identifier, ++ TRACKER_PICTURES_GRAPH, parent_identifier, + "nfo:RemoteDataObject", "nfo:DataContainer", NULL); + g_free (parent_identifier); + +@@ -129,7 +129,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:isPartOf", parent_resource_urn); + g_free (parent_resource_urn); + +@@ -142,7 +142,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:mimeType", mime); + g_free (mime); + +@@ -154,7 +154,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:description", zpj_skydrive_entry_get_description (entry)); + + if (*error != NULL) +@@ -163,7 +163,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nfo:fileName", name); + + if (*error != NULL) +@@ -180,7 +180,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nco:creator", contact_resource); + g_free (contact_resource); + +@@ -192,7 +192,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, + gom_tracker_sparql_connection_insert_or_replace_triple + (connection, + cancellable, error, +- datasource_urn, resource, ++ TRACKER_PICTURES_GRAPH, resource, + "nie:contentCreated", date); + g_free (date); + +-- +GitLab + + +From 34259944dd9e6e167663c97080142f6e8b7f00f2 Mon Sep 17 00:00:00 2001 +From: Sam Thursfield +Date: Mon, 27 Jul 2020 23:48:49 +0200 +Subject: [PATCH 5/5] Update for API changes in Tracker 2.99 + +--- + src/gom-miner.c | 3 --- + src/gom-tracker.c | 22 ++++++---------------- + 2 files changed, 6 insertions(+), 19 deletions(-) + +diff --git a/src/gom-miner.c b/src/gom-miner.c +index 32892fa..d9ccf67 100644 +--- a/src/gom-miner.c ++++ b/src/gom-miner.c +@@ -382,7 +382,6 @@ gom_miner_ensure_datasource (GomMiner *self, + + tracker_sparql_connection_update (self->priv->connection, + datasource_insert->str, +- G_PRIORITY_DEFAULT, + cancellable, + error); + +@@ -469,7 +468,6 @@ gom_account_miner_job_cleanup_previous (GomAccountMinerJob *job, + + tracker_sparql_connection_update (job->connection, + delete->str, +- G_PRIORITY_DEFAULT, + cancellable, + error); + +@@ -709,7 +707,6 @@ cleanup_job_do_cleanup (CleanupJob *job, GCancellable *cancellable) + + tracker_sparql_connection_update (self->priv->connection, + update->str, +- G_PRIORITY_DEFAULT, + cancellable, + &error); + g_string_free (update, TRUE); +diff --git a/src/gom-tracker.c b/src/gom-tracker.c +index 0d1766c..5f49f73 100644 +--- a/src/gom-tracker.c ++++ b/src/gom-tracker.c +@@ -138,9 +138,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti + /* not found, create the resource */ + insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }", + graph, inner->str); +- insert_res = +- tracker_sparql_connection_update_blank (connection, insert, +- G_PRIORITY_DEFAULT, NULL, error); ++ insert_res = tracker_sparql_connection_update_blank (connection, insert, NULL, error); + g_free (insert); + + if (*error != NULL) +@@ -205,9 +203,7 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection + + g_debug ("Insert or replace triple: query %s", insert->str); + +- tracker_sparql_connection_update (connection, insert->str, +- G_PRIORITY_DEFAULT, cancellable, +- error); ++ tracker_sparql_connection_update (connection, insert->str, cancellable, error); + + g_string_free (insert, TRUE); + +@@ -235,9 +231,7 @@ gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *connection, + "DELETE { <%s> %s ?val } WHERE { <%s> %s ?val }", resource, + property_name, resource, property_name); + +- tracker_sparql_connection_update (connection, delete->str, +- G_PRIORITY_DEFAULT, cancellable, +- error); ++ tracker_sparql_connection_update (connection, delete->str, cancellable, error); + + g_string_free (delete, TRUE); + if (*error != NULL) +@@ -281,9 +275,7 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti + + g_debug ("Toggle favorite: query %s", update->str); + +- tracker_sparql_connection_update (connection, update->str, +- G_PRIORITY_DEFAULT, cancellable, +- error); ++ tracker_sparql_connection_update (connection, update->str, cancellable, error); + + g_string_free (update, TRUE); + +@@ -351,9 +343,7 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection, + mail_uri, email, + mail_uri, fullname); + +- insert_res = +- tracker_sparql_connection_update_blank (connection, insert->str, +- G_PRIORITY_DEFAULT, cancellable, error); ++ insert_res = tracker_sparql_connection_update_blank (connection, insert->str, cancellable, error); + + g_string_free (insert, TRUE); + +@@ -450,7 +440,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection + model); + + local_error = NULL; +- tracker_sparql_connection_update (connection, insert, G_PRIORITY_DEFAULT, cancellable, &local_error); ++ tracker_sparql_connection_update (connection, insert, cancellable, &local_error); + if (local_error != NULL) + { + g_propagate_error (error, local_error); +-- +GitLab + diff --git a/desktop/gnome/base/gnome-online-miners/pspec.xml b/desktop/gnome/base/gnome-online-miners/pspec.xml new file mode 100644 index 0000000000..e93a7e2903 --- /dev/null +++ b/desktop/gnome/base/gnome-online-miners/pspec.xml @@ -0,0 +1,53 @@ + + + + + gnome-online-miners + https://gitlab.gnome.org/GNOME/gnome-online-miners + + Pisi Linux Admins + admin@pisilinux.org + + GPLv2 + GNOME Online Miners - crawls through your online content + GNOME Online Miners provides a set of crawlers that go through your online content and index them locally in Tracker + https://download.gnome.org/sources/gnome-online-miners/3.34/gnome-online-miners-3.34.0.tar.xz + + intltool + libxslt-devel + docbook-xsl + glib2-devel + libgdata-devel + grilo-devel + tracker-devel + libgfbgraph-devel + gnome-online-accounts-devel + autoconf-archive + + + tracker3-support.patch + + + + + gnome-online-miners + + glib2 + + + /usr/lib + /usr/share/dbus-1 + /usr/share/doc + + + + + + 2021-06-06 + 3.34.0 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/gnome/base/gnome-user-docs/actions.py b/desktop/gnome/base/gnome-user-docs/actions.py new file mode 100644 index 0000000000..d6acd75ac7 --- /dev/null +++ b/desktop/gnome/base/gnome-user-docs/actions.py @@ -0,0 +1,20 @@ +#!/usr/bin/env 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 autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + autotools.configure() + +def build(): + autotools.make() + +def install(): + autotools.rawInstall("DESTDIR=%s" % get.installDIR()) + + pisitools.dodoc("COPYING", "NEWS", "README") diff --git a/desktop/gnome/base/gnome-user-docs/pspec.xml b/desktop/gnome/base/gnome-user-docs/pspec.xml new file mode 100644 index 0000000000..31db953bca --- /dev/null +++ b/desktop/gnome/base/gnome-user-docs/pspec.xml @@ -0,0 +1,40 @@ + + + + + gnome-user-docs + https://gitlab.gnome.org/GNOME/gnome-user-docs + + Pisi Linux Admins + admins@pisilinux.org + + CCPL-Attribution-3.0 + data:doc + GNOME User Documentation + This package contains documents which are packaged together and shipped as gnome-user-docs in the core GNOME distribution. + https://download.gnome.org/sources/gnome-user-docs/40/gnome-user-docs-40.1.tar.xz + + libxml2-devel + itstool + + + + + gnome-user-docs + data:doc + + /usr/share/help + /usr/share/doc + + + + + + 2021-06-07 + 40.1 + First release for Pisi Linux + Berk Çakar + berk2238@hotmail.com + + + diff --git a/desktop/misc/lightdm/pspec.xml b/desktop/misc/lightdm/pspec.xml index c2c377d235..3275a6b359 100644 --- a/desktop/misc/lightdm/pspec.xml +++ b/desktop/misc/lightdm/pspec.xml @@ -42,6 +42,7 @@ lightdm + gdm lxdm sddm diff --git a/desktop/misc/sddm/pspec.xml b/desktop/misc/sddm/pspec.xml index 65d0c15b0d..3410493620 100644 --- a/desktop/misc/sddm/pspec.xml +++ b/desktop/misc/sddm/pspec.xml @@ -42,6 +42,7 @@ sddm + gdm lightdm lxdm mdm