git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #150372 from bobby285271/pantheon

pantheon.appcenter: re-add patch for disable packagekit backend

commitebb5bd223c87b644540a4633a713c476d5ec1eb6 authorBobby Rong <rjl931189261@126.com> dateSun 12 Dec 2021, 13:30 (5 years ago) parente09a539c65f685
3 files changed+261−6
nixos/modules/services/x11/desktop-managers/pantheon.xml+7−1 pkgs/desktops/pantheon/apps/appcenter/add-packagekit-backend-option.patch+240 pkgs/desktops/pantheon/apps/appcenter/default.nix+14−5
nixos/modules/services/x11/desktop-managers/pantheon.xml+7−1
@@ -105,8 +105,14 @@ switchboard-with-plugs.override {
105105 </term>
106106 <listitem>
107107 <para>
108− AppCenter has been available since 20.03, but it is of little use. This is because there is no functioning PackageKit backend for Nix 2.0. The Flatpak backend will not work before <link xlink:href="https://github.com/elementary/appcenter/issues/1076">flag for Flatpak-only</link> is provided. See this <link xlink:href="https://github.com/NixOS/nixpkgs/issues/70214">issue</link>.
108+ AppCenter has been available since 20.03, but it is of little use. This is because there is no functioning PackageKit backend for Nix 2.0. Starting from 21.11, the Flatpak backend should work so you can install some Flatpak applications using it. See this <link xlink:href="https://github.com/NixOS/nixpkgs/issues/70214">issue</link>.
109109 </para>
110+ <para>
111+ To use AppCenter on NixOS, add <literal>pantheon.appcenter</literal> to <xref linkend="opt-environment.systemPackages" />, <link linkend="module-services-flatpak">enable Flatpak support</link> and optionally add the <literal>appcenter</literal> Flatpak remote:
112+ </para>
113+<screen>
114+<prompt>$ </prompt>flatpak remote-add --if-not-exists appcenter https://flatpak.elementary.io/repo.flatpakrepo
115+</screen>
110116 </listitem>
111117 </varlistentry>
112118 </variablelist>
pkgs/desktops/pantheon/apps/appcenter/add-packagekit-backend-option.patchnew file+240
@@ -0,0 +1,240 @@
1+From b5d7cb20713eff3b3729e5c5fdd2f15680a29385 Mon Sep 17 00:00:00 2001
2+From: Bobby Rong <rjl931189261@126.com>
3+Date: Sun, 31 Oct 2021 23:12:46 +0800
4+Subject: [PATCH] build: add packagekit_backend option
5+
6+---
7+ .github/workflows/main.yml | 7 +++++++
8+ meson_options.txt | 1 +
9+ src/Application.vala | 4 ++++
10+ src/Core/BackendAggregator.vala | 2 ++
11+ src/Core/Package.vala | 21 +++++++++++++--------
12+ src/Core/UpdateManager.vala | 6 ++++++
13+ src/Views/Homepage.vala | 4 ++++
14+ src/meson.build | 10 ++++++++--
15+ 8 files changed, 45 insertions(+), 10 deletions(-)
16+
17+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
18+index daf13654..5dc5a2fb 100644
19+--- a/.github/workflows/main.yml
20++++ b/.github/workflows/main.yml
21+@@ -42,6 +42,13 @@ jobs:
22+ meson configure -Dcurated=false -Dpayments=false -Dsharing=false -Dname=Pop\!_Shop build
23+ ninja -C build install
24+
25++ - name: Build (NixOS)
26++ env:
27++ DESTDIR: out
28++ run: |
29++ meson configure -Dcurated=false -Dpayments=false -Dpackagekit_backend=false build
30++ ninja -C build install
31++
32+ lint:
33+
34+ runs-on: ubuntu-latest
35+diff --git a/meson_options.txt b/meson_options.txt
36+index 0ae93d07..37a6cd8a 100644
37+--- a/meson_options.txt
38++++ b/meson_options.txt
39+@@ -4,3 +4,4 @@ option('name', type : 'string', value : 'AppCenter', description : 'The name of
40+ option('payments', type : 'boolean', value : true, description : 'Enable payment features and display paid apps')
41+ option('sharing', type : 'boolean', value : true, description : 'Display sharing features, i.e. copyable URLs to appcenter.elementary.io')
42+ option('hide_upstream_distro_apps', type : 'boolean', value : true, description : 'Used for hiding Ubuntu repo apps on elementary OS')
43++option('packagekit_backend', type : 'boolean', value : true, description : 'Enable PackageKit backend')
44+diff --git a/src/Application.vala b/src/Application.vala
45+index 65fae5aa..7c075076 100644
46+--- a/src/Application.vala
47++++ b/src/Application.vala
48+@@ -167,9 +167,11 @@ public class AppCenter.App : Gtk.Application {
49+
50+ var client = AppCenterCore.Client.get_default ();
51+
52++#if PACKAGEKIT_BACKEND
53+ if (fake_update_packages != null) {
54+ AppCenterCore.PackageKitBackend.get_default ().fake_packages = fake_update_packages;
55+ }
56++#endif
57+
58+ if (silent) {
59+ NetworkMonitor.get_default ().network_changed.connect ((available) => {
60+@@ -183,6 +185,7 @@ public class AppCenter.App : Gtk.Application {
61+ return;
62+ }
63+
64++#if PACKAGEKIT_BACKEND
65+ if (local_path != null) {
66+ var file = File.new_for_commandline_arg (local_path);
67+
68+@@ -192,6 +195,7 @@ public class AppCenter.App : Gtk.Application {
69+ warning ("Failed to load local AppStream XML file: %s", e.message);
70+ }
71+ }
72++#endif
73+
74+ if (main_window == null) {
75+ main_window = new MainWindow (this);
76+diff --git a/src/Core/BackendAggregator.vala b/src/Core/BackendAggregator.vala
77+index 539dba98..feb1eaa9 100644
78+--- a/src/Core/BackendAggregator.vala
79++++ b/src/Core/BackendAggregator.vala
80+@@ -26,8 +26,10 @@ public class AppCenterCore.BackendAggregator : Backend, Object {
81+
82+ construct {
83+ backends = new Gee.ArrayList<unowned Backend> ();
84++#if PACKAGEKIT_BACKEND
85+ backends.add (PackageKitBackend.get_default ());
86+ backends.add (UbuntuDriversBackend.get_default ());
87++#endif
88+ backends.add (FlatpakBackend.get_default ());
89+
90+ unowned Gtk.Application app = (Gtk.Application) GLib.Application.get_default ();
91+diff --git a/src/Core/Package.vala b/src/Core/Package.vala
92+index d6f12f15..8dbd7a22 100644
93+--- a/src/Core/Package.vala
94++++ b/src/Core/Package.vala
95+@@ -328,7 +328,14 @@ public class AppCenterCore.Package : Object {
96+ public string origin_description {
97+ owned get {
98+ unowned string origin = component.get_origin ();
99+- if (backend is PackageKitBackend) {
100++ if (backend is FlatpakBackend) {
101++ var fp_package = this as FlatpakPackage;
102++ if (fp_package != null && fp_package.installation == FlatpakBackend.system_installation) {
103++ return _("%s (system-wide)").printf (origin);
104++ }
105++ return origin;
106++#if PACKAGEKIT_BACKEND
107++ } else if (backend is PackageKitBackend) {
108+ if (origin == APPCENTER_PACKAGE_ORIGIN) {
109+ return _("AppCenter");
110+ } else if (origin == ELEMENTARY_STABLE_PACKAGE_ORIGIN) {
111+@@ -336,15 +343,9 @@ public class AppCenterCore.Package : Object {
112+ } else if (origin.has_prefix ("ubuntu-")) {
113+ return _("Ubuntu (non-curated)");
114+ }
115+- } else if (backend is FlatpakBackend) {
116+- var fp_package = this as FlatpakPackage;
117+- if (fp_package != null && fp_package.installation == FlatpakBackend.system_installation) {
118+- return _("%s (system-wide)").printf (origin);
119+- }
120+-
121+- return origin;
122+ } else if (backend is UbuntuDriversBackend) {
123+ return _("Ubuntu Drivers");
124++#endif
125+ }
126+
127+ return _("Unknown Origin (non-curated)");
128+@@ -434,11 +435,15 @@ public class AppCenterCore.Package : Object {
129+ _author_title = null;
130+ backend_details = null;
131+
132++#if PACKAGEKIT_BACKEND
133+ // The version on a PackageKit package comes from the package not AppStream, so only reset the version
134+ // on other backends
135+ if (!(backend is PackageKitBackend)) {
136+ _latest_version = null;
137+ }
138++#else
139++ _latest_version = null;
140++#endif
141+
142+ this.component = component;
143+ }
144+diff --git a/src/Core/UpdateManager.vala b/src/Core/UpdateManager.vala
145+index 9deceaf5..c92c0d37 100644
146+--- a/src/Core/UpdateManager.vala
147++++ b/src/Core/UpdateManager.vala
148+@@ -52,6 +52,7 @@ public class AppCenterCore.UpdateManager : Object {
149+ installed_package.update_state ();
150+ }
151+
152++#if PACKAGEKIT_BACKEND
153+ Pk.Results pk_updates;
154+ unowned PackageKitBackend client = PackageKitBackend.get_default ();
155+ try {
156+@@ -60,10 +61,12 @@ public class AppCenterCore.UpdateManager : Object {
157+ warning ("Unable to get updates from PackageKit backend: %s", e.message);
158+ return 0;
159+ }
160++#endif
161+
162+ uint os_count = 0;
163+ string os_desc = "";
164+
165++#if PACKAGEKIT_BACKEND
166+ var package_array = pk_updates.get_package_array ();
167+ debug ("PackageKit backend reports %d updates", package_array.length);
168+
169+@@ -87,6 +90,7 @@ public class AppCenterCore.UpdateManager : Object {
170+ );
171+ }
172+ });
173++#endif
174+
175+ os_updates.component.set_pkgnames ({});
176+ os_updates.change_information.clear_update_info ();
177+@@ -159,6 +163,7 @@ public class AppCenterCore.UpdateManager : Object {
178+ count += 1;
179+ }
180+
181++#if PACKAGEKIT_BACKEND
182+ pk_updates.get_details_array ().foreach ((pk_detail) => {
183+ var pk_package = new Pk.Package ();
184+ try {
185+@@ -181,6 +186,7 @@ public class AppCenterCore.UpdateManager : Object {
186+ critical (e.message);
187+ }
188+ });
189++#endif
190+
191+ os_updates.update_state ();
192+ return count;
193+diff --git a/src/Views/Homepage.vala b/src/Views/Homepage.vala
194+index 3673903f..2e128e77 100644
195+--- a/src/Views/Homepage.vala
196++++ b/src/Views/Homepage.vala
197+@@ -107,9 +107,13 @@ public class AppCenter.Homepage : AbstractView {
198+ column_spacing = 24,
199+ orientation = Gtk.Orientation.VERTICAL
200+ };
201++#if PACKAGEKIT_BACKEND
202+ grid.add (banner_revealer);
203+ grid.add (recently_updated_revealer);
204+ grid.add (categories_label);
205++#else
206++ category_flow.margin_top = 12;
207++#endif
208+ grid.add (category_flow);
209+
210+ scrolled_window = new Gtk.ScrolledWindow (null, null) {
211+diff --git a/src/meson.build b/src/meson.build
212+index 7b319fc6..d1d77931 100644
213+--- a/src/meson.build
214++++ b/src/meson.build
215+@@ -12,10 +12,8 @@ appcenter_files = files(
216+ 'Core/FlatpakBackend.vala',
217+ 'Core/Job.vala',
218+ 'Core/Package.vala',
219+- 'Core/PackageKitBackend.vala',
220+ 'Core/ScreenshotCache.vala',
221+ 'Core/Task.vala',
222+- 'Core/UbuntuDriversBackend.vala',
223+ 'Core/UpdateManager.vala',
224+ 'Dialogs/InstallFailDialog.vala',
225+ 'Dialogs/NonCuratedWarningDialog.vala',
226+@@ -76,6 +74,14 @@ if get_option('hide_upstream_distro_apps')
227+ args += '--define=HIDE_UPSTREAM_DISTRO_APPS'
228+ endif
229+
230++if get_option('packagekit_backend')
231++ args += '--define=PACKAGEKIT_BACKEND'
232++ appcenter_files += files(
233++ 'Core/PackageKitBackend.vala',
234++ 'Core/UbuntuDriversBackend.vala',
235++ )
236++endif
237++
238+ executable(
239+ meson.project_name(),
240+ appcenter_files,
pkgs/desktops/pantheon/apps/appcenter/default.nix+14−5
@@ -39,11 +39,12 @@ stdenv.mkDerivation rec {
3939 sha256 = "sha256-xktIHQHmz5gh72NEz9UQ9fMvBlj1BihWxHgxsHmTIB0=";
4040 };
4141
42− passthru = {
43− updateScript = nix-update-script {
44− attrPath = "pantheon.${pname}";
45− };
46− };
42+ patches = [
43+ # Introduces a packagekit_backend meson flag.
44+ # Makes appcenter actually work by using only the flatpak backend.
45+ # https://github.com/elementary/appcenter/pull/1739
46+ ./add-packagekit-backend-option.patch
47+ ];
4748
4849 nativeBuildInputs = [
4950 appstream-glib
@@ -78,6 +79,8 @@ stdenv.mkDerivation rec {
7879 mesonFlags = [
7980 "-Dpayments=false"
8081 "-Dcurated=false"
82+ # This option is introduced in add-packagekit-backend-option.patch
83+ "-Dpackagekit_backend=false"
8184 ];
8285
8386 postPatch = ''
@@ -85,6 +88,12 @@ stdenv.mkDerivation rec {
8588 patchShebangs meson/post_install.py
8689 '';
8790
91+ passthru = {
92+ updateScript = nix-update-script {
93+ attrPath = "pantheon.${pname}";
94+ };
95+ };
96+
8897 meta = with lib; {
8998 homepage = "https://github.com/elementary/appcenter";
9099 description = "An open, pay-what-you-want app store for indie developers, designed for elementary OS";