From f24b47c44db03a8d9ba611f827e71aeb1f63d0bd Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sun, 12 Mar 2017 14:44:09 +0100 Subject: PGP module: store data in own db, use pgp key as specified in account settings --- plugins/openpgp/src/account_settings_widget.vala | 100 +++++++++++++++-------- 1 file changed, 68 insertions(+), 32 deletions(-) (limited to 'plugins/openpgp/src/account_settings_widget.vala') diff --git a/plugins/openpgp/src/account_settings_widget.vala b/plugins/openpgp/src/account_settings_widget.vala index b9e6edbd..71739096 100644 --- a/plugins/openpgp/src/account_settings_widget.vala +++ b/plugins/openpgp/src/account_settings_widget.vala @@ -1,60 +1,96 @@ +using Gtk; + using Dino.Entities; namespace Dino.Plugins.OpenPgp { [GtkTemplate (ui = "/org/dino-im/account_settings_item.ui")] -private class AccountSettingsWidget : Gtk.Stack, Plugins.AccountSettingsWidget { - [GtkChild] private Gtk.Label pgp_label; - [GtkChild] private Gtk.Button pgp_button; - [GtkChild] private Gtk.ComboBox pgp_combobox; +private class AccountSettingsWidget : Stack, Plugins.AccountSettingsWidget { + [GtkChild] private Label label; + [GtkChild] private Button button; + [GtkChild] private ComboBox combobox; + private Plugin plugin; + private Account current_account; private Gtk.ListStore list_store = new Gtk.ListStore(2, typeof(string), typeof(string?)); - public AccountSettingsWidget() { - Gtk.CellRendererText renderer = new Gtk.CellRendererText(); + public AccountSettingsWidget(Plugin plugin) { + this.plugin = plugin; + + CellRendererText renderer = new CellRendererText(); renderer.set_padding(0, 0); - pgp_combobox.pack_start(renderer, true); - pgp_combobox.add_attribute(renderer, "markup", 0); - pgp_button.clicked.connect(() => { activated(); this.set_visible_child_name("entry"); pgp_combobox.popup(); }); + combobox.pack_start(renderer, true); + combobox.add_attribute(renderer, "markup", 0); + + button.clicked.connect(on_button_clicked); + combobox.changed.connect(key_changed); } public void deactivate() { this.set_visible_child_name("label"); } - private void key_changed() { - Gtk.TreeIter selected; - pgp_combobox.get_active_iter(out selected); - Value text; - list_store.get_value(selected, 0, out text); - pgp_label.set_markup((string) text); - deactivate(); - } - public void set_account(Account account) { - populate_pgp_combobox(account); + this.current_account = account; + populate(account); } - private void populate_pgp_combobox(Account account) { - pgp_combobox.changed.disconnect(key_changed); + private void on_button_clicked() { + activated(); + this.set_visible_child_name("entry"); + combobox.popup(); + } - Gtk.TreeIter iter; - pgp_combobox.set_model(list_store); + private void populate(Account account) { + TreeIter iter; + combobox.set_model(list_store); list_store.clear(); - list_store.append(out iter); - pgp_label.set_markup("Disabled\nSelect key"); - list_store.set(iter, 0, "Disabled\nSelect key", 1, null); - Gee.List list = GPGHelper.get_keylist(null, true); - foreach (GPG.Key key in list) { + try { + Gee.List keys = GPGHelper.get_keylist(null, true); + + list_store.append(out iter); + list_store.set(iter, 0, "Disabled\nSelect key", 1, null); + set_label_active(iter, 0); + for (int i = 0; i < keys.size; i++) { + list_store.append(out iter); + string text = @"$(Markup.escape_text(keys[i].uids[0].uid))\n0x$(Markup.escape_text(keys[i].fpr[0:16]))"; + list_store.set(iter, 0, text); + list_store.set(iter, 1, keys[i].fpr); + if (keys[i].fpr == plugin.db.get_account_key(account)) { + set_label_active(iter, i + 1); + } + } + } catch (Error e){ list_store.append(out iter); - list_store.set(iter, 0, @"$(Markup.escape_text(key.uids[0].uid))\n0x$(Markup.escape_text(key.fpr[0:16]))"); - list_store.set(iter, 1, key.fpr); + list_store.set(iter, 0, @"Disabled\nError: $(Markup.escape_text(e.message))", 1, null); } + } + + private void set_label_active(TreeIter iter, int i = -1) { + Value text; + list_store.get_value(iter, 0, out text); + label.set_markup((string) text); + if (i != -1) combobox.active = i; + } - pgp_combobox.set_active(0); - pgp_combobox.changed.connect(key_changed); + private void key_changed() { + TreeIter selected; + bool iter_valid = combobox.get_active_iter(out selected); + if (iter_valid) { + Value key_value; + list_store.get_value(selected, 1, out key_value); + string? key_id = key_value as string; + if (key_id != null) { + if (plugin.modules.has_key(current_account)) { + plugin.modules[current_account].set_private_key_id(key_id); + } + plugin.db.set_account_key(current_account, key_id); + } + set_label_active(selected); + deactivate(); + } } } -- cgit v1.2.3-54-g00ecf