aboutsummaryrefslogtreecommitdiff
path: root/plugins/openpgp/src/account_settings_widget.vala
diff options
context:
space:
mode:
authorfiaxh <git@mx.ax.lt>2017-03-12 14:44:09 +0100
committerfiaxh <git@mx.ax.lt>2017-03-12 14:44:09 +0100
commitf24b47c44db03a8d9ba611f827e71aeb1f63d0bd (patch)
tree85a2622877dab97b15ff4862505f3770adaf4bd0 /plugins/openpgp/src/account_settings_widget.vala
parentdbbe5e39d069196aa17951b12575492cfa8c7976 (diff)
downloaddino-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.vala100
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();
+ }
}
}