ui_list_update_row(wdata->tab1_notebooks, index);
}
+void nbconfig_update_repositorylist(NotebookConfigDialog *wdata, Repository *repo) {
+ CxList *rplist = wdata->tab3_repositories->data;
+ size_t index = cxListFind(rplist, repo);
+ ui_list_update_row(wdata->tab3_repositories, index);
+ ui_list_update(wdata->tab1_repositories);
+}
+
void nbconfig_update_lists(NotebookConfigDialog *wdata) {
ui_list_clear(wdata->tab1_groups);
ui_list_clear(wdata->tab1_repositories);
static void nbconfig_close(UiEvent *event, void *userdata) {
NotebookConfigDialog *wdata = event->window;
nbconfig_notebook_save(wdata);
+ nbconfig_repository_save(wdata);
}
static int nbconfig_list_activate_event(UiEvent *event, UiList *list, void **listelm) {
// ---------------------------- Repo Config -----------------------------------
+static void repository_saved(UiEvent *event, int error, void *userdata) {
+ if(error != 0) {
+ fprintf(stderr, "Error: note_store_save_repository_async failed\n");
+ }
+}
+
void nbconfig_repository_save(NotebookConfigDialog *nbconfig) {
+ if(!nbconfig->selected_repository) {
+ return;
+ }
+
+ Repository *repo = nbconfig->selected_repository;
+
+ NoteStore *store = note_store_get();
+ const CxAllocator *a = store->mp->allocator;
+
+ char *prev_name = repo->name;
+ char *prev_local_path = repo->local_path;
+ char *prev_url = repo->url;
+ char *prev_default_key = repo->default_key;
+
+ // TODO: check changes and prepare migration
+
+ repo->name = cx_strdup_a(a, ui_get(nbconfig->tab3_repo_name)).ptr;
+ repo->local_path = cx_strdup_a(a, ui_get(nbconfig->tab3_repo_local_path)).ptr;
+ repo->url = cx_strdup_a(a, ui_get(nbconfig->tab3_repo_url)).ptr;
+ repo->default_key = NULL;
+ cxFree(a, prev_name);
+ cxFree(a, prev_local_path);
+ cxFree(a, prev_url);
+ cxFree(a, prev_default_key);
+
+ note_store_save_repository_async(application_global_obj(), repo, repository_saved, nbconfig);
}
static void nbconfig_load_repository(NotebookConfigDialog *wdata, Repository *repo) {
}
static void nbconfig_repolist_add(UiEvent *event, void *userdata) {
+ NotebookConfigDialog *wdata = event->window;
+ NoteStore *store = note_store_get();
+ UiContext *ctx = wdata->obj->ctx;
+
+ nbconfig_repository_save(wdata);
+
+ Repository *repo = cxZalloc(store->mp->allocator, sizeof(Repository));
+ wdata->selected_repository = repo;
+ cxListAdd(wdata->repositories, repo);
+ nbconfig_update_lists(wdata);
+
+ size_t nrepos = cxListSize(wdata->repositories);
+ ui_list_setselection2(wdata->tab3_repositories, nrepos-1, FALSE);
+
+ nbconfig_load_repository(wdata, repo);
+
+ ui_free(ctx, wdata->selected_repository_name);
+ wdata->selected_repository_name = ui_strdup(ctx, "New");
+ ui_set(wdata->tab3_repo_name, wdata->selected_repository_name); // override name textfield
}
static void nbconfig_repolist_delete(UiEvent *event, void *userdata) {
}
static void nbconfig_repolist_onselect(UiEvent *event, void *userdata) {
- NotebookConfigDialog *wdata = userdata;
+ NotebookConfigDialog *wdata = event->window;
if(wdata->valuechange) {
return;
}
#define SQL_REPOSITORY_NEW \
"insert into repositories(name, url, encryption, default_key, authmethod, local_path) " \
- "values (?, ?, ?, ?, ?, ?) repository_id;"
+ "values (?, ?, ?, ?, ?, ?) returning repository_id;"
#define SQL_REPOSITORY_SAVE \
"update repositories set " \
} else {
dbuQuerySetParamNull(q, 2);
}
- dbuQuerySetParamInt(q, 4, repo->encryption);
+ dbuQuerySetParamInt(q, 3, repo->encryption);
if(repo->url) {
dbuQuerySetParamString(q, 4, cx_str(repo->default_key));
} else {