Merge lp:~donadigo/appcenter/apt-link-support into lp:~elementary-apps/appcenter/appcenter

Proposed by Adam Bieńkowski
Status: Merged
Approved by: Corentin Noël
Approved revision: 357
Merged at revision: 356
Proposed branch: lp:~donadigo/appcenter/apt-link-support
Merge into: lp:~elementary-apps/appcenter/appcenter
Diff against target: 121 lines (+54/-1)
4 files modified
data/org.pantheon.appcenter.desktop.in.in (+1/-0)
src/Application.vala (+37/-1)
src/Core/Client.vala (+11/-0)
src/MainWindow.vala (+5/-0)
To merge this branch: bzr merge lp:~donadigo/appcenter/apt-link-support
Reviewer Review Type Date Requested Status
Corentin Noël Approve
Review via email: mp+313889@code.launchpad.net

Commit message

* Add support for appstream links

Description of the change

This branch fixes bug #1628476: "Affiliate AppCenter with x-scheme-handler/apt mime type".

Most of the scheme handling code was taken from the recent switchboard change at revision 691.

This branch actually implements handling for appstream links as discussed on Slack instead of apt links.

To test run e.g:
appcenter appstream://org.pantheon.snap.desktop

To post a comment you must log in.
357. By Adam Bieńkowski

Instead of apt, support appstream

Revision history for this message
Corentin Noël (tintou) wrote :

Tested with xdg-open appstream://org.pantheon.appcenter.desktop
Working as expected

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'data/org.pantheon.appcenter.desktop.in.in'
2--- data/org.pantheon.appcenter.desktop.in.in 2016-06-18 05:11:27 +0000
3+++ data/org.pantheon.appcenter.desktop.in.in 2016-12-27 23:46:08 +0000
4@@ -8,6 +8,7 @@
5 Type=Application
6 StartupNotify=true
7 Categories=GNOME;GTK;System;PackageManager;
8+MimeType=x-scheme-handler/appstream;
9 Actions=AboutDialog;
10 X-GNOME-UsesNotifications=true
11
12
13=== modified file 'src/Application.vala'
14--- src/Application.vala 2016-12-06 22:05:26 +0000
15+++ src/Application.vala 2016-12-27 23:46:08 +0000
16@@ -25,12 +25,14 @@
17
18 private const int SECONDS_AFTER_NETWORK_UP = 60;
19
20+ private static string? link = null;
21+
22 public static bool show_updates;
23 public static bool silent;
24 MainWindow main_window;
25 construct {
26 application_id = "org.pantheon.appcenter";
27- flags = ApplicationFlags.FLAGS_NONE;
28+ flags |= ApplicationFlags.HANDLES_OPEN;
29 Intl.setlocale (LocaleCategory.ALL, "");
30 Intl.textdomain (Build.GETTEXT_PACKAGE);
31
32@@ -63,10 +65,35 @@
33 }
34 });
35
36+ if (AppInfo.get_default_for_uri_scheme ("appstream") == null) {
37+ var appinfo = new DesktopAppInfo (app_launcher);
38+ try {
39+ appinfo.set_as_default_for_type ("x-scheme-handler/appstream");
40+ } catch (Error e) {
41+ critical ("Unable to set default for the settings scheme: %s", e.message);
42+ }
43+ }
44+
45 add_action (quit_action);
46 add_accelerator ("<Control>q", "app.quit", null);
47 }
48
49+ public override void open (File[] files, string hint) {
50+ var file = files[0];
51+ if (file == null) {
52+ return;
53+ }
54+
55+ if (file.has_uri_scheme ("appstream")) {
56+ link = file.get_uri ().replace ("appstream://", "");
57+ if (link.has_suffix ("/")) {
58+ link = link.substring (0, link.last_index_of_char ('/'));
59+ }
60+ }
61+
62+ activate ();
63+ }
64+
65 public override void activate () {
66 var client = AppCenterCore.Client.get_default ();
67 if (silent) {
68@@ -88,6 +115,15 @@
69 main_window = null;
70 });
71
72+ if (link != null) {
73+ var package = client.get_package_for_id (link);
74+ if (package != null) {
75+ main_window.show_package (package);
76+ } else {
77+ warning (_("Specified link '%s' could not be found, going back to the main panel").printf (link));
78+ }
79+ }
80+
81 add_window (main_window);
82 main_window.show_all ();
83 if (show_updates) {
84
85=== modified file 'src/Core/Client.vala'
86--- src/Core/Client.vala 2016-12-02 09:24:22 +0000
87+++ src/Core/Client.vala 2016-12-27 23:46:08 +0000
88@@ -466,6 +466,17 @@
89 return installed;
90 }
91
92+ public AppCenterCore.Package? get_package_for_id (string id) {
93+ foreach (var entry in package_list.entries) {
94+ var package = entry.value;
95+ if (package.component.id == id) {
96+ return package;
97+ }
98+ }
99+
100+ return null;
101+ }
102+
103 private static GLib.Once<Client> instance;
104 public static unowned Client get_default () {
105 return instance.once (() => { return new Client (); });
106
107=== modified file 'src/MainWindow.vala'
108--- src/MainWindow.vala 2016-11-06 15:33:30 +0000
109+++ src/MainWindow.vala 2016-12-27 23:46:08 +0000
110@@ -184,6 +184,11 @@
111 return false;
112 }
113
114+ public void show_package (AppCenterCore.Package package) {
115+ category_view.show_package (package);
116+ view_opened (_("Categories"), false, null);
117+ }
118+
119 public void go_to_installed () {
120 view_mode.selected = 1;
121 }

Subscribers

People subscribed via source and target branches