open webapp by clicking desktop notification
This commit is contained in:
parent
7c41b22881
commit
0acf8f77ba
4 changed files with 24 additions and 12 deletions
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue