+public class IdentityManagerModel : Object {
+ private const string FILE_NAME = "identities.txt";
+ private PasswordHashTable password_table;
+ private IIdentityCardStore store;
+ public LinkedList<IdCard> get_card_list() {
+ var identities = store.get_card_list();
+ identities.sort( (a, b) => {
+ IdCard id_a = (IdCard )a;
+ IdCard id_b = (IdCard )b;
+ if (id_a.IsNoIdentity() && !id_b.IsNoIdentity()) {
+ return -1;
+ } else if (id_b.IsNoIdentity() && !id_a.IsNoIdentity()) {
+ return 1;
+ }
+ return strcmp(id_a.display_name, id_b.display_name);
+ });
+ if (identities.is_empty || !identities[0].IsNoIdentity())
+ identities.insert(0, IdCard.NewNoIdentity());
+ foreach (IdCard id_card in identities) {
+ if (!id_card.store_password) {
+ password_table.RetrievePassword(id_card, store);
+ }
+ }
+ return identities;
+ }
+ public signal void card_list_changed();