59 if(settings->selected_repo >= 0) { |
59 if(settings->selected_repo >= 0) { |
60 settings_edit_repository(settings, settings->selected_repo); |
60 settings_edit_repository(settings, settings->selected_repo); |
61 } |
61 } |
62 } |
62 } |
63 |
63 |
|
64 static void repolist_add(UiEvent *event, void *userdata) { |
|
65 SettingsWindow *settings = event->window; |
|
66 settings->repo_new = TRUE; |
|
67 settings->selected_repo = -1; |
|
68 // switch to editing tab |
|
69 ui_set(settings->repo_tabview, 1); |
|
70 } |
|
71 |
64 static void repolist_remove(UiEvent *event, void *userdata) { |
72 static void repolist_remove(UiEvent *event, void *userdata) { |
65 // TODO |
73 SettingsWindow *settings = event->window; |
|
74 DavCfgRepository *repo = ui_list_get(settings->repos, settings->selected_repo); |
|
75 if(!repo) { |
|
76 fprintf(stderr, "Error: cannot get repository at index %d\n", settings->selected_repo); |
|
77 return; |
|
78 } |
|
79 dav_repository_remove_and_free(settings->config, repo); |
|
80 settings_update_repolist(settings); |
|
81 settings->selected_repo = -1; |
|
82 ui_unset_group(event->obj->ctx, SETTINGS_STATE_REPOLIST_SELECTED); |
66 } |
83 } |
67 |
84 |
68 static void editrepo_go_back(UiEvent *event, void *userdata) { |
85 static void editrepo_go_back(UiEvent *event, void *userdata) { |
69 SettingsWindow *settings = event->window; |
86 SettingsWindow *settings = event->window; |
70 settings_store_repository(settings); |
87 settings_store_repository(settings); |
126 |
143 |
127 ui_tabview(obj, .value = wdata->repo_tabview, .margin = 10, .tabview = UI_TABVIEW_INVISIBLE) { |
144 ui_tabview(obj, .value = wdata->repo_tabview, .margin = 10, .tabview = UI_TABVIEW_INVISIBLE) { |
128 ui_tab(obj, "list") { |
145 ui_tab(obj, "list") { |
129 ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10) { |
146 ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10) { |
130 ui_hbox(obj, .spacing = 10) { |
147 ui_hbox(obj, .spacing = 10) { |
131 ui_button(obj, .label = "Add"); |
148 ui_button(obj, .label = "Add", .onclick = repolist_add); |
132 ui_button(obj, .label = "Edit", .onclick = repolist_edit, .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED)); |
149 ui_button(obj, .label = "Edit", .onclick = repolist_edit, .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED)); |
133 ui_button(obj, .label = "Remove", .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED)); |
150 ui_button(obj, .label = "Remove", .onclick = repolist_remove, .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED)); |
134 } |
151 } |
135 ui_newline(obj); |
152 ui_newline(obj); |
136 |
153 |
137 UiModel* model = ui_model(obj->ctx, UI_STRING, "Name", UI_STRING, "URL", UI_STRING, "User", UI_STRING, "Encrypted", -1); |
154 UiModel* model = ui_model(obj->ctx, UI_STRING, "Name", UI_STRING, "URL", UI_STRING, "User", UI_STRING, "Encrypted", -1); |
138 model->getvalue = (ui_getvaluefunc) settings_repolist_getvalue; |
155 model->getvalue = (ui_getvaluefunc) settings_repolist_getvalue; |
382 return ret; |
399 return ret; |
383 } |
400 } |
384 |
401 |
385 void settings_store_repository(SettingsWindow *settings) { |
402 void settings_store_repository(SettingsWindow *settings) { |
386 DavConfig *config = settings->config; |
403 DavConfig *config = settings->config; |
387 DavCfgRepository *repo = ui_list_get(settings->repos, settings->selected_repo); |
404 DavCfgRepository *repo; |
388 if(!repo) { |
405 if(settings->repo_new) { |
389 fprintf(stderr, "Error: cannot get repository at index %d\n", settings->selected_repo); |
406 settings->repo_new = FALSE; |
390 return; |
407 char *name = ui_get(settings->repo_name); |
|
408 if(strlen(name) == 0) { |
|
409 return; |
|
410 } |
|
411 repo = dav_repository_new(config); |
|
412 dav_config_add_repository(config, repo); |
|
413 } else { |
|
414 repo = ui_list_get(settings->repos, settings->selected_repo); |
|
415 if(!repo) { |
|
416 fprintf(stderr, "Error: cannot get repository at index %d\n", settings->selected_repo); |
|
417 return; |
|
418 } |
391 } |
419 } |
392 |
420 |
393 // always store name/url nodes |
421 // always store name/url nodes |
394 dav_cfg_string_set_value(config, &repo->name, repo->node, cx_str(ui_get(settings->repo_name)), "name"); |
422 dav_cfg_string_set_value(config, &repo->name, repo->node, cx_str(ui_get(settings->repo_name)), "name"); |
395 dav_cfg_string_set_value(config, &repo->url, repo->node, cx_str(ui_get(settings->repo_url)), "url"); |
423 dav_cfg_string_set_value(config, &repo->url, repo->node, cx_str(ui_get(settings->repo_url)), "url"); |
443 dav_cfg_int_set_value(config, &repo->ssl_version, repo->node, tlsversion, "ssl-version"); |
471 dav_cfg_int_set_value(config, &repo->ssl_version, repo->node, tlsversion, "ssl-version"); |
444 } else { |
472 } else { |
445 dav_cfg_int_remove(&repo->ssl_version); |
473 dav_cfg_int_remove(&repo->ssl_version); |
446 } |
474 } |
447 |
475 |
|
476 settings_update_repolist(settings); |
448 settings->selected_repo = -1; |
477 settings->selected_repo = -1; |
449 } |
478 } |
450 |
479 |
451 void settings_update_repolist(SettingsWindow *settings) { |
480 void settings_update_repolist(SettingsWindow *settings) { |
452 DavConfig *config = settings->config; |
481 DavConfig *config = settings->config; |
453 |
482 |
454 ui_list_clear(settings->repos); |
483 ui_list_clear(settings->repos); |
455 |
484 |
456 for (DavCfgRepository *repo = config->repositories; repo; repo = repo->next) { |
485 for (DavCfgRepository *repo = config->repositories; repo; repo = repo->next) { |
457 ui_list_append(settings->repos, repo); |
486 ui_list_append(settings->repos, repo); |
|
487 } |
|
488 |
|
489 if(settings->repos->update) { |
|
490 ui_list_update(settings->repos); |
458 } |
491 } |
459 } |
492 } |
460 |
493 |
461 void* settings_repolist_getvalue(DavCfgRepository *repo, int col) { |
494 void* settings_repolist_getvalue(DavCfgRepository *repo, int col) { |
462 switch(col) { |
495 switch(col) { |