Factor out item reload code
Adds a new function io_reload_data() which can be used to reload all appointments and TODO items. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
8553a99161
commit
7f06c25230
@ -256,102 +256,11 @@ static inline void key_generic_save(void)
|
|||||||
|
|
||||||
static inline void key_generic_reload(void)
|
static inline void key_generic_reload(void)
|
||||||
{
|
{
|
||||||
char *msg_um_asktype = NULL;
|
io_reload_data();
|
||||||
const char *reload_success =
|
|
||||||
_("The data files were reloaded successfully");
|
|
||||||
const char *enter = _("Press [ENTER] to continue");
|
|
||||||
|
|
||||||
if (io_get_modified()) {
|
|
||||||
const char *msg_um_prefix =
|
|
||||||
_("There are unsaved modifications:");
|
|
||||||
const char *msg_um_discard = _("(d)iscard");
|
|
||||||
const char *msg_um_merge = _("(m)erge");
|
|
||||||
const char *msg_um_keep = _("(k)eep and cancel");
|
|
||||||
const char *msg_um_choice = _("[dmk]");
|
|
||||||
|
|
||||||
asprintf(&msg_um_asktype, "%s %s, %s, %s", msg_um_prefix,
|
|
||||||
msg_um_discard, msg_um_merge, msg_um_keep);
|
|
||||||
|
|
||||||
char *path_apts_backup, *path_todo_backup;
|
|
||||||
const char *backup_ext = ".sav";
|
|
||||||
|
|
||||||
switch (status_ask_choice(msg_um_asktype, msg_um_choice, 3)) {
|
|
||||||
case 1:
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
asprintf(&path_apts_backup, "%s%s", path_apts,
|
|
||||||
backup_ext);
|
|
||||||
asprintf(&path_todo_backup, "%s%s", path_todo,
|
|
||||||
backup_ext);
|
|
||||||
|
|
||||||
io_save_mutex_lock();
|
|
||||||
io_save_apts(path_apts_backup);
|
|
||||||
io_save_todo(path_todo_backup);
|
|
||||||
io_save_mutex_unlock();
|
|
||||||
|
|
||||||
if (!io_files_equal(path_apts, path_apts_backup)) {
|
|
||||||
const char *arg_apts[] = { conf.mergetool,
|
|
||||||
path_apts,
|
|
||||||
path_apts_backup,
|
|
||||||
NULL };
|
|
||||||
wins_launch_external(arg_apts);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!io_files_equal(path_todo, path_todo_backup)) {
|
|
||||||
const char *arg_todo[] = { conf.mergetool,
|
|
||||||
path_todo,
|
|
||||||
path_todo_backup,
|
|
||||||
NULL };
|
|
||||||
wins_launch_external(arg_todo);
|
|
||||||
}
|
|
||||||
|
|
||||||
xfree(path_apts_backup);
|
|
||||||
xfree(path_todo_backup);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
default:
|
|
||||||
wins_update(FLAG_STA);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notify_bar())
|
|
||||||
notify_stop_main_thread();
|
|
||||||
|
|
||||||
/* Reinitialize data structures. */
|
|
||||||
apoint_llist_free();
|
|
||||||
event_llist_free();
|
|
||||||
recur_apoint_llist_free();
|
|
||||||
recur_event_llist_free();
|
|
||||||
todo_free_list();
|
|
||||||
|
|
||||||
apoint_llist_init();
|
|
||||||
event_llist_init();
|
|
||||||
recur_apoint_llist_init();
|
|
||||||
recur_event_llist_init();
|
|
||||||
todo_init_list();
|
|
||||||
|
|
||||||
io_load_data(NULL);
|
|
||||||
io_unset_modified();
|
|
||||||
ui_todo_load_items();
|
|
||||||
ui_todo_sel_reset();
|
|
||||||
|
|
||||||
if (conf.system_dialogs) {
|
|
||||||
status_mesg(reload_success, enter);
|
|
||||||
wgetch(win[KEY].p);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notify_bar())
|
|
||||||
notify_start_main_thread();
|
|
||||||
|
|
||||||
do_storage(0);
|
do_storage(0);
|
||||||
notify_check_next_app(1);
|
notify_check_next_app(1);
|
||||||
ui_calendar_monthly_view_cache_set_invalid();
|
ui_calendar_monthly_view_cache_set_invalid();
|
||||||
wins_update(FLAG_ALL);
|
wins_update(FLAG_ALL);
|
||||||
|
|
||||||
cleanup:
|
|
||||||
mem_free(msg_um_asktype);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void key_generic_import(void)
|
static inline void key_generic_import(void)
|
||||||
|
@ -797,6 +797,7 @@ void io_save_cal(enum save_display);
|
|||||||
void io_load_app(struct item_filter *);
|
void io_load_app(struct item_filter *);
|
||||||
void io_load_todo(struct item_filter *);
|
void io_load_todo(struct item_filter *);
|
||||||
void io_load_data(struct item_filter *);
|
void io_load_data(struct item_filter *);
|
||||||
|
void io_reload_data(void);
|
||||||
void io_load_keys(const char *);
|
void io_load_keys(const char *);
|
||||||
int io_check_dir(const char *);
|
int io_check_dir(const char *);
|
||||||
unsigned io_dir_exists(const char *);
|
unsigned io_dir_exists(const char *);
|
||||||
|
95
src/io.c
95
src/io.c
@ -693,6 +693,101 @@ void io_load_data(struct item_filter *filter)
|
|||||||
io_load_todo(filter);
|
io_load_todo(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void io_reload_data(void)
|
||||||
|
{
|
||||||
|
char *msg_um_asktype = NULL;
|
||||||
|
const char *reload_success =
|
||||||
|
_("The data files were reloaded successfully");
|
||||||
|
const char *enter = _("Press [ENTER] to continue");
|
||||||
|
|
||||||
|
if (io_get_modified()) {
|
||||||
|
const char *msg_um_prefix =
|
||||||
|
_("There are unsaved modifications:");
|
||||||
|
const char *msg_um_discard = _("(d)iscard");
|
||||||
|
const char *msg_um_merge = _("(m)erge");
|
||||||
|
const char *msg_um_keep = _("(k)eep and cancel");
|
||||||
|
const char *msg_um_choice = _("[dmk]");
|
||||||
|
|
||||||
|
asprintf(&msg_um_asktype, "%s %s, %s, %s", msg_um_prefix,
|
||||||
|
msg_um_discard, msg_um_merge, msg_um_keep);
|
||||||
|
|
||||||
|
char *path_apts_backup, *path_todo_backup;
|
||||||
|
const char *backup_ext = ".sav";
|
||||||
|
|
||||||
|
switch (status_ask_choice(msg_um_asktype, msg_um_choice, 3)) {
|
||||||
|
case 1:
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
asprintf(&path_apts_backup, "%s%s", path_apts,
|
||||||
|
backup_ext);
|
||||||
|
asprintf(&path_todo_backup, "%s%s", path_todo,
|
||||||
|
backup_ext);
|
||||||
|
|
||||||
|
io_save_mutex_lock();
|
||||||
|
io_save_apts(path_apts_backup);
|
||||||
|
io_save_todo(path_todo_backup);
|
||||||
|
io_save_mutex_unlock();
|
||||||
|
|
||||||
|
if (!io_files_equal(path_apts, path_apts_backup)) {
|
||||||
|
const char *arg_apts[] = { conf.mergetool,
|
||||||
|
path_apts,
|
||||||
|
path_apts_backup,
|
||||||
|
NULL };
|
||||||
|
wins_launch_external(arg_apts);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!io_files_equal(path_todo, path_todo_backup)) {
|
||||||
|
const char *arg_todo[] = { conf.mergetool,
|
||||||
|
path_todo,
|
||||||
|
path_todo_backup,
|
||||||
|
NULL };
|
||||||
|
wins_launch_external(arg_todo);
|
||||||
|
}
|
||||||
|
|
||||||
|
xfree(path_apts_backup);
|
||||||
|
xfree(path_todo_backup);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
default:
|
||||||
|
wins_update(FLAG_STA);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notify_bar())
|
||||||
|
notify_stop_main_thread();
|
||||||
|
|
||||||
|
/* Reinitialize data structures. */
|
||||||
|
apoint_llist_free();
|
||||||
|
event_llist_free();
|
||||||
|
recur_apoint_llist_free();
|
||||||
|
recur_event_llist_free();
|
||||||
|
todo_free_list();
|
||||||
|
|
||||||
|
apoint_llist_init();
|
||||||
|
event_llist_init();
|
||||||
|
recur_apoint_llist_init();
|
||||||
|
recur_event_llist_init();
|
||||||
|
todo_init_list();
|
||||||
|
|
||||||
|
io_load_data(NULL);
|
||||||
|
io_unset_modified();
|
||||||
|
ui_todo_load_items();
|
||||||
|
ui_todo_sel_reset();
|
||||||
|
|
||||||
|
if (conf.system_dialogs) {
|
||||||
|
status_mesg(reload_success, enter);
|
||||||
|
wgetch(win[KEY].p);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notify_bar())
|
||||||
|
notify_start_main_thread();
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
mem_free(msg_um_asktype);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
load_keys_ht_getkey(struct ht_keybindings_s *data, const char **key,
|
load_keys_ht_getkey(struct ht_keybindings_s *data, const char **key,
|
||||||
int *len)
|
int *len)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user