open webapp by clicking desktop notification

This commit is contained in:
Artem Anufrij 2017-09-10 22:51:20 +02:00
parent 7c41b22881
commit 0acf8f77ba
4 changed files with 24 additions and 12 deletions

View file

@ -48,6 +48,15 @@ namespace Webpin {
app_launcher = application_id + ".desktop"; app_launcher = application_id + ".desktop";
flags |= GLib.ApplicationFlags.HANDLES_OPEN; flags |= GLib.ApplicationFlags.HANDLES_OPEN;
app_list = new GLib.List<WebWindow> (); app_list = new GLib.List<WebWindow> ();
var open_web_app = new SimpleAction ("open-web-app", GLib.VariantType.STRING);
add_action (open_web_app);
open_web_app.activate.connect ((parameter) => {
if (parameter != null) {
debug ("start web app over action: '%s'", parameter.get_string ());
start_webapp (parameter.get_string ());
}
});
} }
public Gtk.Window mainwindow; public Gtk.Window mainwindow;
@ -64,24 +73,27 @@ namespace Webpin {
} }
public override void open (File[] files, string hint) { public override void open (File[] files, string hint) {
debug (files [0].get_uri ()); debug ("%s", files [0].get_uri ());
start_webapp (files [0].get_uri ()); start_webapp (files [0].get_uri ());
} }
public void start_webapp (string url) { public void start_webapp (string url) {
foreach (var item in app_list) { foreach (var item in app_list) {
debug ("running webapp: %s", item.desktop_file.url);
if (item.desktop_file.url == url) { if (item.desktop_file.url == url) {
debug ("open runing app: %s", url);
item.present (); item.present ();
return; return;
} }
} }
debug ("create a new web app: %s", url);
var app_info = Webpin.DesktopFile.get_app_by_url (url); var app_info = Webpin.DesktopFile.get_app_by_url (url);
var desktop_file = new Webpin.DesktopFile.from_desktopappinfo(app_info); var desktop_file = new Webpin.DesktopFile.from_desktopappinfo(app_info);
var app = new WebWindow(desktop_file); var app = new WebWindow (desktop_file);
app_list.append (app);
app.destroy.connect (() => { app_list.remove (app); }); app.destroy.connect (() => { app_list.remove (app); });
app.set_application (this); app.set_application (this);
app_list.append (app);
} }
} }
} }

View file

@ -180,10 +180,13 @@ namespace Webpin {
var desktop_app = new GLib.DesktopAppInfo(app.get_id ()); var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
var exec = desktop_app.get_string ("Exec").replace ("%%", "%"); var exec = desktop_app.get_string ("Exec");
if (exec != null && exec.contains (url)) { if (exec != null) {
return desktop_app; exec = exec.replace ("%%", "%");
if (exec.contains (url)) {
return desktop_app;
}
} }
} }
return null; return null;

View file

@ -37,7 +37,6 @@ namespace Webpin {
Gtk.Spinner spinner; Gtk.Spinner spinner;
public DesktopFile desktop_file { get; private set; } public DesktopFile desktop_file { get; private set; }
private Notification desktop_notification;
public WebWindow (DesktopFile desktop_file) { public WebWindow (DesktopFile desktop_file) {
this.desktop_file = desktop_file; this.desktop_file = desktop_file;
@ -46,8 +45,6 @@ namespace Webpin {
set_wmclass (desktop_file.url, desktop_file.url); set_wmclass (desktop_file.url, desktop_file.url);
web_app = new WebApp (desktop_file.url); web_app = new WebApp (desktop_file.url);
desktop_notification = new Notification ("");
var headerbar = new Gtk.HeaderBar (); var headerbar = new Gtk.HeaderBar ();
headerbar.title = desktop_file.name; headerbar.title = desktop_file.name;
headerbar.show_close_button = true; headerbar.show_close_button = true;
@ -105,9 +102,10 @@ namespace Webpin {
}); });
web_app.desktop_notification.connect ((title, body, icon) => { web_app.desktop_notification.connect ((title, body, icon) => {
desktop_notification.set_title (title); var desktop_notification = new Notification (title);
desktop_notification.set_body (body); desktop_notification.set_body (body);
desktop_notification.set_icon (icon); desktop_notification.set_icon (icon);
desktop_notification.add_button_with_target_value (_("Open %s").printf (desktop_file.name), "app.open-web-app", new GLib.Variant.string (desktop_file.url));
WebpinApp.instance.send_notification (null, desktop_notification); WebpinApp.instance.send_notification (null, desktop_notification);
}); });

View file

@ -108,7 +108,6 @@ namespace Webpin {
try { try {
icon = new Gtk.Image.from_pixbuf (new Gdk.Pixbuf.from_file_at_scale (file.icon, 48, 48, true)); icon = new Gtk.Image.from_pixbuf (new Gdk.Pixbuf.from_file_at_scale (file.icon, 48, 48, true));
icon_for_notification = GLib.Icon.new_for_string (file.icon); icon_for_notification = GLib.Icon.new_for_string (file.icon);
} catch (Error e) { } catch (Error e) {
warning (e.message); warning (e.message);
icon = new Gtk.Image.from_icon_name ("artemanufrij.webpin", Gtk.IconSize.DIALOG); icon = new Gtk.Image.from_icon_name ("artemanufrij.webpin", Gtk.IconSize.DIALOG);