X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmoonshot-identity-management-view.vala;h=37d30e166664bfcab4924b4bf56b8f4707a96d4c;hb=42149cca76e48ed37d70c7b790eb61038fdbb85d;hp=e9e630d6695d2397d15376e29878a4fad0c956d0;hpb=58c6ee608421b6a645d94e9d8f71523cd80138ba;p=moonshot-ui.git diff --git a/src/moonshot-identity-management-view.vala b/src/moonshot-identity-management-view.vala index e9e630d..37d30e1 100644 --- a/src/moonshot-identity-management-view.vala +++ b/src/moonshot-identity-management-view.vala @@ -4,7 +4,6 @@ using Gtk; public class IdentityManagerView : Window { private const int WINDOW_WIDTH = 400; private const int WINDOW_HEIGHT = 500; - private const int RIGHT_PANE_WIDTH = 275; protected IdentityManagerApp parent_app; #if OS_MACOS public OSXApplication osxApp; @@ -17,10 +16,12 @@ public class IdentityManagerView : Window { private CustomVBox custom_vbox; private VBox services_internal_vbox; + private Entry issuer_entry; private Entry username_entry; private Entry password_entry; private Label prompting_service; private Label no_identity_title; + private CheckButton remember_checkbutton; private ListStore* listmodel; private TreeModelFilter filter; @@ -189,6 +190,11 @@ public class IdentityManagerView : Window { } private void load_id_cards () { + string current_idcard_nai = null; + if (this.custom_vbox.current_idcard != null) { + current_idcard_nai = custom_vbox.current_idcard.id_card.nai; + custom_vbox.current_idcard = null; + } var children = this.custom_vbox.get_children (); foreach (var id_card_widget in children) { remove_id_card_widget((IdCardWidget)id_card_widget); @@ -201,30 +207,39 @@ public class IdentityManagerView : Window { foreach (IdCard id_card in card_list) { add_id_card_data (id_card); - add_id_card_widget (id_card); + IdCardWidget id_card_widget = add_id_card_widget (id_card); + if (id_card_widget.id_card.nai == current_idcard_nai) { + fill_details(id_card_widget); + id_card_widget.expand(); + } } + if (custom_vbox.current_idcard == null) + fill_details(null); } - private void fill_details (IdCardWidget id_card_widget) + private void fill_details (IdCardWidget? id_card_widget) { - var id_card = id_card_widget.id_card; - var vr_children = this.vbox_right.get_children(); - foreach (var vr_child in vr_children) - this.vbox_right.remove(vr_child); - if (id_card.display_name == IdCard.NO_IDENTITY) { - this.vbox_right.pack_start(no_identity_title, false, true, 0); - } else { - this.username_entry.set_text (id_card.username); - this.password_entry.set_text (id_card.password ?? ""); - this.vbox_right.pack_start(login_vbox, false, true, 0); - } - this.vbox_right.pack_start (services_vbox, false, true, 0); + var vr_children = this.vbox_right.get_children(); + foreach (var vr_child in vr_children) + this.vbox_right.remove(vr_child); + if (id_card_widget != null) { + var id_card = id_card_widget.id_card; + if (id_card.display_name == IdCard.NO_IDENTITY) { + this.vbox_right.pack_start(no_identity_title, false, true, 0); + } else { + this.issuer_entry.set_text (id_card.issuer); + this.username_entry.set_text (id_card.username); + this.password_entry.set_text (id_card.password ?? ""); + this.vbox_right.pack_start(login_vbox, false, true, 0); + this.remember_checkbutton.active = id_card.store_password; + } + this.vbox_right.pack_start (services_vbox, false, true, 0); - var children = this.services_internal_vbox.get_children (); - foreach (var hbox in children) - services_internal_vbox.remove(hbox); - fill_services_vbox (id_card_widget.id_card); -// identities_manager.store_id_cards(); + var children = this.services_internal_vbox.get_children (); + foreach (var hbox in children) + services_internal_vbox.remove(hbox); + fill_services_vbox (id_card_widget.id_card); + } } private void show_details (IdCard id_card) @@ -249,12 +264,10 @@ public class IdentityManagerView : Window { id_card.display_name = dialog.display_name; id_card.issuer = dialog.issuer; - if (id_card.issuer == "") - id_card.issuer = "Issuer"; id_card.username = dialog.username; id_card.password = dialog.password; + id_card.store_password = dialog.store_password; id_card.services = {}; - id_card.set_data("pixbuf", find_icon ("avatar-default", 48)); return id_card; } @@ -264,7 +277,7 @@ public class IdentityManagerView : Window { TreeIter iter; Gdk.Pixbuf pixbuf; this.listmodel->append (out iter); - pixbuf = id_card.get_data("pixbuf"); + pixbuf = get_pixbuf(id_card); listmodel->set (iter, Columns.IDCARD_COL, id_card, Columns.LOGO_COL, pixbuf, @@ -295,7 +308,7 @@ public class IdentityManagerView : Window { } } - private void add_id_card_widget (IdCard id_card) + private IdCardWidget add_id_card_widget (IdCard id_card) { var id_card_widget = new IdCardWidget (id_card); this.custom_vbox.add_id_card_widget (id_card_widget); @@ -304,48 +317,10 @@ public class IdentityManagerView : Window { id_card_widget.send_id.connect ((w) => send_identity_cb (w.id_card)); id_card_widget.expanded.connect (this.custom_vbox.receive_expanded_event); id_card_widget.expanded.connect (fill_details); + return id_card_widget; } - /* This method finds a valid display name */ - public bool display_name_is_valid (string name, - out string? candidate) - { - foreach (IdCard id_card in identities_manager.get_card_list()) - { - if (id_card.display_name == name) - { - if (&candidate != null) - { - for (int i=0; i<1000; i++) - { - string tmp = "%s %d".printf (name, i); - if (display_name_is_valid (tmp, null)) - { - candidate = tmp; - break; - } - } - } - return false; - } - } - - return true; - } - - public void insert_id_card (IdCard id_card) - { - string candidate; - - if (!display_name_is_valid (id_card.display_name, out candidate)) - { - id_card.display_name = candidate; - } - - this.identities_manager.add_card(id_card); - } - - public bool add_identity (IdCard id_card) + public bool add_identity (IdCard id_card, bool force_flat_file_store) { #if OS_MACOS /* @@ -354,21 +329,44 @@ public class IdentityManagerView : Window { */ var ret = Gtk.ResponseType.YES; #else - - var dialog = new Gtk.MessageDialog (this, + Gtk.MessageDialog dialog; + IdCard? prev_id = identities_manager.find_id_card(id_card.nai, force_flat_file_store); + if (prev_id!=null) { + int flags = prev_id.Compare(id_card); + if (flags == 0) { + return false; // no changes, no need to update + } else if ((flags & (1< 0); candidates = null; var request = this.request_queue.pop_head (); - bool reset_password = false; - - if ((identity.password == null) && !identity.IsNoIdentity()) - { - var dialog = new AddPasswordDialog (); - var result = dialog.run (); - - switch (result) { - case ResponseType.OK: - identity.password = dialog.password; - reset_password = ! dialog.remember; - break; - default: - identity = null; - break; - } - - dialog.destroy (); - } - + identity = check_add_password(identity, request, identities_manager); if (this.request_queue.is_empty()) { candidates = null; @@ -511,10 +524,6 @@ public class IdentityManagerView : Window { parent_app.default_id_card = identity; request.return_identity (identity); - - if (reset_password) - identity.password = null; - } private void label_make_bold (Label label) @@ -558,43 +567,40 @@ public class IdentityManagerView : Window { remove_button.clicked.connect ((remove_button) => { + var candidate = service_button_map.lookup (remove_button); + if (candidate == null) + return; var dialog = new Gtk.MessageDialog (this, Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, _("Are you sure you want to stop '%s' ID Card from being used with %s?"), custom_vbox.current_idcard.id_card.display_name, - _("this service")); + candidate); var ret = dialog.run(); dialog.hide(); if (ret == Gtk.ResponseType.YES) { IdCard idcard = custom_vbox.current_idcard.id_card; - var candidate = service_button_map.lookup (remove_button); - - SList services = new SList(); - - foreach (string srv in idcard.services) - { - if (srv == candidate) - continue; - services.append (srv); - } + if (idcard != null) { + SList services = new SList(); - idcard.services = new string[services.length()]; - for (int j=0; j