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";
 | 
			
		||||
            flags |= GLib.ApplicationFlags.HANDLES_OPEN;
 | 
			
		||||
            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;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,24 +73,27 @@ namespace Webpin {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        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 ());
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void start_webapp (string url) {
 | 
			
		||||
            foreach (var item in app_list) {
 | 
			
		||||
                debug ("running webapp: %s", item.desktop_file.url);
 | 
			
		||||
                if (item.desktop_file.url == url) {
 | 
			
		||||
                    debug ("open runing app: %s", url);
 | 
			
		||||
                    item.present ();
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            debug ("create a new web app: %s", url);
 | 
			
		||||
            var app_info = Webpin.DesktopFile.get_app_by_url (url);
 | 
			
		||||
            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.set_application (this);
 | 
			
		||||
            app_list.append (app);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,10 +180,13 @@ namespace Webpin {
 | 
			
		|||
 | 
			
		||||
                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)) {
 | 
			
		||||
                    return desktop_app;
 | 
			
		||||
                if (exec != null) {
 | 
			
		||||
                    exec = exec.replace ("%%", "%");
 | 
			
		||||
                    if (exec.contains (url)) {
 | 
			
		||||
                        return desktop_app;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return null;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,6 @@ namespace Webpin {
 | 
			
		|||
        Gtk.Spinner spinner;
 | 
			
		||||
 | 
			
		||||
        public DesktopFile desktop_file { get; private set; }
 | 
			
		||||
        private Notification desktop_notification;
 | 
			
		||||
 | 
			
		||||
        public WebWindow (DesktopFile desktop_file) {
 | 
			
		||||
            this.desktop_file = desktop_file;
 | 
			
		||||
| 
						 | 
				
			
			@ -46,8 +45,6 @@ namespace Webpin {
 | 
			
		|||
            set_wmclass (desktop_file.url, desktop_file.url);
 | 
			
		||||
            web_app = new WebApp (desktop_file.url);
 | 
			
		||||
 | 
			
		||||
            desktop_notification = new Notification ("");
 | 
			
		||||
 | 
			
		||||
            var headerbar = new Gtk.HeaderBar ();
 | 
			
		||||
            headerbar.title = desktop_file.name;
 | 
			
		||||
            headerbar.show_close_button = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -105,9 +102,10 @@ namespace Webpin {
 | 
			
		|||
            });
 | 
			
		||||
 | 
			
		||||
            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_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);
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,7 +108,6 @@ namespace Webpin {
 | 
			
		|||
                try {
 | 
			
		||||
                    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);
 | 
			
		||||
 | 
			
		||||
                } catch (Error e) {
 | 
			
		||||
                    warning (e.message);
 | 
			
		||||
                    icon = new Gtk.Image.from_icon_name ("artemanufrij.webpin", Gtk.IconSize.DIALOG);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue