using Gee;
public interface IIdentityCardStore : Object {
// Methods
+ public enum StoreType {
+ FLAT_FILE,
+ KEYRING
+ }
+
public abstract void add_card(IdCard card);
public abstract void remove_card(IdCard card);
public abstract void update_card(IdCard card);
+ public abstract StoreType get_store_type();
public abstract LinkedList<IdCard> get_card_list();
}
card_list_changed();
}
+ public void set_store_type(IIdentityCardStore.StoreType type) {
+ if ((store != null) && (store.get_store_type() == type))
+ return;
+ switch (type) {
+#if GNOME_KEYRING
+ case IIdentityCardStore.StoreType.KEYRING:
+ store = new KeyringStore();
+ break;
+#endif
+ case IIdentityCardStore.StoreType.FLAT_FILE:
+ default:
+ store = new LocalFlatFileStore();
+ break;
+ }
+ }
+
+ public IIdentityCardStore.StoreType get_store_type() {
+ return store.get_store_type();
+ }
+
+ public bool HasNonTrivialIdentities() {
+ var identities = store.get_card_list();
+ return !identities.is_empty;
+ }
+
+
private IdentityManagerApp parent;
- public IdentityManagerModel(IdentityManagerApp parent_app, bool use_flat_file_store) {
+ public IdentityManagerModel(IdentityManagerApp parent_app, IIdentityCardStore.StoreType store_type) {
parent = parent_app;
-#if IPC_MSRPC
- store = new LocalFlatFileStore();
-#else
- if (use_flat_file_store)
- store = new LocalFlatFileStore();
- else
- store = new KeyringStore();
-#endif
+ set_store_type(store_type);
}
}
}
public IdentityManagerApp (bool headless, bool use_flat_file_store) {
- model = new IdentityManagerModel(this, headless || use_flat_file_store);
+#if GNOME_KEYRING
+ bool keyring_available = GnomeKeyring.is_available();
+#else
+ bool keyring_available = false;
+#endif
+ IIdentityCardStore.StoreType store_type;
+ if (headless || use_flat_file_store || !keyring_available)
+ store_type = IIdentityCardStore.StoreType.FLAT_FILE;
+ else
+ store_type = IIdentityCardStore.StoreType.KEYRING;
+
+ model = new IdentityManagerModel(this, store_type);
+ /* if headless, but we have nothing in the flat file store
+ * and keyring is available, switch to keyring */
+ if (headless && keyring_available && !use_flat_file_store && !model.HasNonTrivialIdentities())
+ model.set_store_type(IIdentityCardStore.StoreType.KEYRING);
+
if (!headless)
view = new IdentityManagerView(this);
LinkedList<IdCard> card_list = model.get_card_list() ;
store_id_cards ();
}
+ public IIdentityCardStore.StoreType get_store_type() {
+ return IIdentityCardStore.StoreType.KEYRING;
+ }
+
public LinkedList<IdCard> get_card_list() {
return id_card_list;
}
public LinkedList<IdCard> get_card_list() {
return id_card_list;
}
+
+ public IIdentityCardStore.StoreType get_store_type() {
+ return IIdentityCardStore.StoreType.FLAT_FILE;
+ }
private void load_id_cards() {
id_card_list.clear();