aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@calcurse.org>2017-09-08 07:44:35 +0200
committerLukas Fleischer <lfleischer@calcurse.org>2017-09-08 21:08:54 +0200
commit57dd3d6b66156936d170893765d45a169e7010af (patch)
tree934958fe226dfb8655884a6d0aca739809c53ba4
parentba85d9b6f5e9854c7d4ec47e2a91b53e7f454f21 (diff)
downloadcalcurse-57dd3d6b66156936d170893765d45a169e7010af.tar.gz
calcurse-57dd3d6b66156936d170893765d45a169e7010af.zip
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 <lfleischer@calcurse.org>
-rw-r--r--src/calcurse.c11
-rw-r--r--src/calcurse.h2
-rw-r--r--src/io.c9
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