diff options
Diffstat (limited to 'libdino/src')
-rw-r--r-- | libdino/src/application.vala | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libdino/src/application.vala b/libdino/src/application.vala index 4b5f3b64..a04f6897 100644 --- a/libdino/src/application.vala +++ b/libdino/src/application.vala @@ -15,6 +15,8 @@ public interface Dino.Application : GLib.Application { { null } }; + public abstract void handle_uri(string jid, string query, Gee.Map<string, string> options); + public void init() throws Error { if (DirUtils.create_with_parents(get_storage_dir(), 0700) == -1) { throw new Error(-1, 0, "Could not create storage dir \"%s\": %s", get_storage_dir(), FileUtils.error_from_errno(errno).to_string()); @@ -38,6 +40,40 @@ public interface Dino.Application : GLib.Application { stream_interaction.connection_manager.log_options = print_xmpp; restore(); }); + open.connect((files, hint) => { + if (files.length != 1) { + warning("Can't handle more than one URI at once."); + return; + } + File file = files[0]; + if (!file.has_uri_scheme("xmpp")) { + warning("xmpp:-URI expected"); + return; + } + string uri = file.get_uri(); + if (!uri.contains(":")) { + warning("Invalid URI"); + return; + } + string r = uri.split(":", 2)[1]; + string[] m = r.split("?", 2); + string jid = m[0]; + while (jid[0] == '/') { + jid = jid.substring(1); + } + string query = "message"; + Gee.Map<string, string> options = new Gee.HashMap<string,string>(); + if (m.length == 2) { + string[] cmds = m[1].split(";"); + query = cmds[0]; + for (int i = 1; i < cmds.length; ++i) { + string[] opt = cmds[i].split("=", 2); + options[opt[0]] = opt.length == 2 ? opt[1] : ""; + } + } + activate(); + handle_uri(jid, query, options); + }); add_main_option_entries(options); } |