271 UiContext *ctx = data; |
271 UiContext *ctx = data; |
272 char *s = ptr; |
272 char *s = ptr; |
273 ui_free(ctx, ptr); |
273 ui_free(ctx, ptr); |
274 } |
274 } |
275 |
275 |
|
276 static void secretstore_newmasterpw(UiEvent *event, void *userdata) { |
|
277 SettingsWindow *settings = event->window; |
|
278 if(event->intval == 1) { |
|
279 pwdstore_setpassword(settings->pwdstore, event->eventdata); |
|
280 set_pwdstore(settings->pwdstore); |
|
281 pwdstore_save(settings->pwdstore); |
|
282 settings->pwdstore = NULL; |
|
283 } |
|
284 ui_close(event->obj); |
|
285 } |
276 |
286 |
277 void settings_ok(UiEvent *event, void *userdata) { |
287 void settings_ok(UiEvent *event, void *userdata) { |
278 SettingsWindow *settings = event->window; |
288 SettingsWindow *settings = event->window; |
279 settings->config_saved = TRUE; |
|
280 // save any changed settings |
289 // save any changed settings |
281 settings_store_repository(settings); |
290 settings_store_repository(settings); |
282 settings_credentials_save(settings); |
291 settings_credentials_save(settings); |
283 |
292 |
284 set_config(settings->config); // TODO: free old config |
293 set_config(settings->config); // TODO: free old config |
285 if(store_config()) { |
294 if(store_config()) { |
286 ui_dialog(event->obj, .title = "Error", .content = "Cannot store settings", .closebutton_label = "OK"); |
295 ui_dialog(event->obj, .title = "Error", .content = "Cannot store settings", .closebutton_label = "OK"); |
287 } |
296 } |
288 settings->config = NULL; |
297 application_update_repolist(get_application()); settings->config = NULL; |
289 if(settings->credentials_modified) { |
298 if(settings->credentials_modified) { |
290 set_pwdstore(settings->pwdstore); |
299 if(settings->pwdstore->key) { |
291 pwdstore_save(settings->pwdstore); |
300 set_pwdstore(settings->pwdstore); |
|
301 pwdstore_save(settings->pwdstore); |
|
302 } else { |
|
303 ui_dialog(event->obj, |
|
304 .title = "Secret Store", |
|
305 .content = "Master password", |
|
306 .password = TRUE, |
|
307 .result = secretstore_newmasterpw, |
|
308 .button1_label = "Create Secret Store", |
|
309 .closebutton_label = "Cancel", |
|
310 .result = secretstore_newmasterpw); |
|
311 return; |
|
312 } |
292 settings->pwdstore = NULL; |
313 settings->pwdstore = NULL; |
293 } |
314 } |
294 application_update_repolist(get_application()); |
|
295 ui_close(event->obj); |
315 ui_close(event->obj); |
296 } |
316 } |
297 |
317 |
298 void settings_close(UiEvent *event, void *userdata) { |
318 void settings_close(UiEvent *event, void *userdata) { |
299 SettingsWindow *settings = event->window; |
319 SettingsWindow *settings = event->window; |
300 if(settings->config_saved) { |
|
301 // function was called as context closefunc by ui_close |
|
302 // in settings_ok |
|
303 // don't free anything |
|
304 return; |
|
305 } |
|
306 if(settings->config) { |
320 if(settings->config) { |
307 dav_config_free(settings->config); |
321 dav_config_free(settings->config); |
308 } |
322 } |
309 if(settings->pwdstore) { |
323 if(settings->pwdstore) { |
310 pwdstore_free(settings->pwdstore); |
324 pwdstore_free(settings->pwdstore); |
311 } |
325 } |
312 } |
326 } |
313 |
327 |
314 void settings_cancel(UiEvent *event, void *userdata) { |
328 void settings_cancel(UiEvent *event, void *userdata) { |
315 SettingsWindow *settings = event->window; |
|
316 ui_close(event->obj); |
329 ui_close(event->obj); |
317 } |
330 } |
318 |
331 |
319 void settings_window_open() { |
332 void settings_window_open() { |
320 DavConfig *config = load_config_file(); |
333 DavConfig *config = load_config_file(); |