From 57dd3d6b66156936d170893765d45a169e7010af Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Fri, 8 Sep 2017 07:44:35 +0200 Subject: Only reload if data files were changed Instead of blindly reloading data in io_reload_data(), compare the stored hashes of the data files with hashes of the current file contents and only reload if any of the hashes differs. Signed-off-by: Lukas Fleischer --- src/calcurse.c | 11 ++++++----- src/calcurse.h | 2 +- src/io.c | 9 ++++++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/calcurse.c b/src/calcurse.c index 5c77bca..bdd1761 100644 --- a/src/calcurse.c +++ b/src/calcurse.c @@ -277,11 +277,12 @@ static inline void key_generic_save(void) static inline void key_generic_reload(void) { - io_reload_data(); - do_storage(0); - notify_check_next_app(1); - ui_calendar_monthly_view_cache_set_invalid(); - wins_update(FLAG_ALL); + if (io_reload_data()) { + do_storage(0); + notify_check_next_app(1); + ui_calendar_monthly_view_cache_set_invalid(); + wins_update(FLAG_ALL); + } } static inline void key_generic_import(void) diff --git a/src/calcurse.h b/src/calcurse.h index 2707305..5fa4639 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -847,7 +847,7 @@ void io_save_cal(enum save_display); void io_load_app(struct item_filter *); void io_load_todo(struct item_filter *); void io_load_data(struct item_filter *); -void io_reload_data(void); +int io_reload_data(void); void io_load_keys(const char *); int io_check_dir(const char *); unsigned io_dir_exists(const char *); diff --git a/src/io.c b/src/io.c index 9e75262..0cefa9c 100644 --- a/src/io.c +++ b/src/io.c @@ -870,12 +870,13 @@ void io_load_data(struct item_filter *filter) run_hook("post-load"); } -void io_reload_data(void) +int 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"); + int ret = 0; if (io_get_modified()) { const char *msg_um_prefix = @@ -902,6 +903,9 @@ void io_reload_data(void) } } + if (!io_check_data_files_modified()) + goto cleanup; + if (notify_bar()) notify_stop_main_thread(); @@ -939,8 +943,11 @@ void io_reload_data(void) if (notify_bar()) notify_start_main_thread(); + ret = 1; + cleanup: mem_free(msg_um_asktype); + return ret; } static void -- cgit v1.2.3-70-g09d2