diff options
author | fiaxh <git@mx.ax.lt> | 2017-03-12 14:44:09 +0100 |
---|---|---|
committer | fiaxh <git@mx.ax.lt> | 2017-03-12 14:44:09 +0100 |
commit | f24b47c44db03a8d9ba611f827e71aeb1f63d0bd (patch) | |
tree | 85a2622877dab97b15ff4862505f3770adaf4bd0 /plugins/openpgp/src/account_settings_widget.vala | |
parent | dbbe5e39d069196aa17951b12575492cfa8c7976 (diff) | |
download | dino-f24b47c44db03a8d9ba611f827e71aeb1f63d0bd.tar.gz dino-f24b47c44db03a8d9ba611f827e71aeb1f63d0bd.zip |
PGP module: store data in own db, use pgp key as specified in account settings
Diffstat (limited to 'plugins/openpgp/src/account_settings_widget.vala')
-rw-r--r-- | plugins/openpgp/src/account_settings_widget.vala | 100 |
1 files changed, 68 insertions, 32 deletions
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\n<span font='9'>Select key</span>"); - list_store.set(iter, 0, "Disabled\n<span font='9'>Select key</span>", 1, null); - Gee.List<GPG.Key> list = GPGHelper.get_keylist(null, true); - foreach (GPG.Key key in list) { + try { + Gee.List<GPG.Key> keys = GPGHelper.get_keylist(null, true); + + list_store.append(out iter); + list_store.set(iter, 0, "Disabled\n<span font='9'>Select key</span>", 1, null); + set_label_active(iter, 0); + for (int i = 0; i < keys.size; i++) { + list_store.append(out iter); + string text = @"<span font='11'>$(Markup.escape_text(keys[i].uids[0].uid))</span>\n<span font='9'>0x$(Markup.escape_text(keys[i].fpr[0:16]))</span>"; + 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, @"<span font='11'>$(Markup.escape_text(key.uids[0].uid))</span>\n<span font='9'>0x$(Markup.escape_text(key.fpr[0:16]))</span>"); - list_store.set(iter, 1, key.fpr); + list_store.set(iter, 0, @"Disabled\n<span font='9'>Error: $(Markup.escape_text(e.message))</span>", 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(); + } } } |