diff --git a/include/tanabata.h b/include/tanabata.h index 5b6e528..fe8b3d5 100644 --- a/include/tanabata.h +++ b/include/tanabata.h @@ -20,9 +20,9 @@ typedef struct tanabata { Sasahyou sasahyou; // Sasahyou struct Sappyou sappyou; // Sappyou struct Shoppyou shoppyou; // Shoppyou struct - _Bool sasahyou_mod; // Sasahyou modified flag - _Bool sappyou_mod; // Sappyou modified flag - _Bool shoppyou_mod; // Shoppyou modified flag + uint64_t sasahyou_mod; // Sasahyou file last modificaton timestamp + uint64_t sappyou_mod; // Sappyou file last modificaton timestamp + uint64_t shoppyou_mod; // Shoppyou file last modificaton timestamp } Tanabata; // ==================== DATABASE SECTION ==================== // diff --git a/lib/database.c b/lib/database.c index f10ce59..c5093b6 100644 --- a/lib/database.c +++ b/lib/database.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "../include/tanabata.h" @@ -14,9 +15,9 @@ int tanabata_init(Tanabata *tanabata) { if (shoppyou_init(&tanabata->shoppyou) != 0) { return 1; } - tanabata->sasahyou_mod = 1; - tanabata->sappyou_mod = 1; - tanabata->shoppyou_mod = 1; + tanabata->sasahyou_mod = 0; + tanabata->sappyou_mod = 0; + tanabata->shoppyou_mod = 0; return 0; } @@ -36,8 +37,8 @@ int tanabata_free(Tanabata *tanabata) { int tanabata_weed(Tanabata *tanabata) { uint64_t hole_cnt; uint64_t new_id; - Kazari *current_kazari; if (tanabata->shoppyou.hole_cnt > 0) { + Kazari *current_kazari; hole_cnt = 0; current_kazari = tanabata->shoppyou.database; for (uint64_t i = 0; i < tanabata->shoppyou.size; i++) { @@ -54,7 +55,7 @@ int tanabata_weed(Tanabata *tanabata) { tanabata->shoppyou.hole_cnt = 0; free(tanabata->shoppyou.holes); tanabata->shoppyou.database = realloc(tanabata->shoppyou.database, tanabata->shoppyou.size * sizeof(Kazari)); - tanabata->shoppyou_mod = 1; + tanabata->shoppyou.modified_ts = time(NULL); } if (tanabata->sasahyou.hole_cnt > 0) { hole_cnt = 0; @@ -76,7 +77,7 @@ int tanabata_weed(Tanabata *tanabata) { tanabata->sasahyou.hole_cnt = 0; free(tanabata->sasahyou.holes); tanabata->sasahyou.database = realloc(tanabata->sasahyou.database, tanabata->sasahyou.size * sizeof(Sasa)); - tanabata->sasahyou_mod = 1; + tanabata->sasahyou.modified_ts = time(NULL); } if (tanabata->sappyou.hole_cnt > 0) { hole_cnt = 0; @@ -98,7 +99,7 @@ int tanabata_weed(Tanabata *tanabata) { tanabata->sappyou.hole_cnt = 0; free(tanabata->sappyou.holes); tanabata->sappyou.database = realloc(tanabata->sappyou.database, tanabata->sappyou.size * sizeof(Tanzaku)); - tanabata->sappyou_mod = 1; + tanabata->sappyou.modified_ts = time(NULL); } return 0; } @@ -113,25 +114,25 @@ int tanabata_load(Tanabata *tanabata) { if (shoppyou_load(&tanabata->shoppyou) != 0) { return 1; } - tanabata->sasahyou_mod = 0; - tanabata->sappyou_mod = 0; - tanabata->shoppyou_mod = 0; + tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts; + tanabata->sappyou_mod = tanabata->sappyou.modified_ts; + tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts; return 0; } int tanabata_save(Tanabata *tanabata) { - if (tanabata->sasahyou_mod && sasahyou_save(&tanabata->sasahyou) != 0) { + if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts && sasahyou_save(&tanabata->sasahyou) != 0) { return 1; } - if (tanabata->sappyou_mod && sappyou_save(&tanabata->sappyou) != 0) { + if (tanabata->sappyou_mod != tanabata->sappyou.modified_ts && sappyou_save(&tanabata->sappyou) != 0) { return 1; } - if (tanabata->shoppyou_mod && shoppyou_save(&tanabata->shoppyou) != 0) { + if (tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts && shoppyou_save(&tanabata->shoppyou) != 0) { return 1; } - tanabata->sasahyou_mod = 0; - tanabata->sappyou_mod = 0; - tanabata->shoppyou_mod = 0; + tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts; + tanabata->sappyou_mod = tanabata->sappyou.modified_ts; + tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts; return 0; } @@ -154,9 +155,9 @@ int tanabata_open(Tanabata *tanabata, const char *path) { return 1; } free(file_path); - tanabata->sasahyou_mod = 0; - tanabata->sappyou_mod = 0; - tanabata->shoppyou_mod = 0; + tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts; + tanabata->sappyou_mod = tanabata->sappyou.modified_ts; + tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts; return 0; } @@ -166,26 +167,26 @@ int tanabata_dump(Tanabata *tanabata, const char *path) { return 1; } char *file_path = malloc(strlen(path) + 10); - if (tanabata->sasahyou_mod) { + if (tanabata->sasahyou_mod != tanabata->sasahyou.modified_ts) { strcpy(file_path, path); if (sasahyou_dump(&tanabata->sasahyou, strcat(file_path, "/sasahyou")) != 0) { return 1; } - tanabata->sasahyou_mod = 0; + tanabata->sasahyou_mod = tanabata->sasahyou.modified_ts; } - if (tanabata->sappyou_mod) { + if (tanabata->sappyou_mod != tanabata->sappyou.modified_ts) { strcpy(file_path, path); if (sappyou_dump(&tanabata->sappyou, strcat(file_path, "/sappyou")) != 0) { return 1; } - tanabata->sappyou_mod = 0; + tanabata->sappyou_mod = tanabata->sappyou.modified_ts; } - if (tanabata->shoppyou_mod) { + if (tanabata->shoppyou_mod != tanabata->shoppyou.modified_ts) { strcpy(file_path, path); if (shoppyou_dump(&tanabata->shoppyou, strcat(file_path, "/shoppyou")) != 0) { return 1; } - tanabata->shoppyou_mod = 0; + tanabata->shoppyou_mod = tanabata->shoppyou.modified_ts; } free(file_path); return 0; diff --git a/lib/sasa.c b/lib/sasa.c index 360c3d7..06a40c3 100644 --- a/lib/sasa.c +++ b/lib/sasa.c @@ -16,9 +16,8 @@ int tanabata_sasa_add(Tanabata *tanabata, const char *path) { } char *abspath = NULL; abspath = realpath(path, abspath); - if (abspath != NULL && sasa_add(&tanabata->sasahyou, abspath) == 0) { - tanabata->sasahyou_mod = 1; - return 0; + if (abspath != NULL) { + return sasa_add(&tanabata->sasahyou, abspath); } return 1; } @@ -29,7 +28,6 @@ int tanabata_sasa_rem_by_id(Tanabata *tanabata, uint64_t sasa_id) { } if (sasa_rem(&tanabata->sasahyou, sasa_id) == 0 && kazari_rem_by_sasa(&tanabata->shoppyou, sasa_id) == 0) { - tanabata->sasahyou_mod = 1; return 0; } return 1; @@ -41,7 +39,6 @@ int tanabata_sasa_rem_by_path(Tanabata *tanabata, const char *path) { if (current_sasa->id != HOLE_ID && strcmp(current_sasa->path, path) == 0) { if (sasa_rem(&tanabata->sasahyou, current_sasa->id) == 0 && kazari_rem_by_sasa(&tanabata->shoppyou, current_sasa->id) == 0) { - tanabata->sasahyou_mod = 1; return 0; } return 1; diff --git a/lib/tanzaku.c b/lib/tanzaku.c index 7ad981e..9fa01d8 100644 --- a/lib/tanzaku.c +++ b/lib/tanzaku.c @@ -13,11 +13,7 @@ int tanabata_tanzaku_add(Tanabata *tanabata, const char *name, const char *descr } current_tanzaku++; } - if (tanzaku_add(&tanabata->sappyou, name, description) == 0) { - tanabata->sappyou_mod = 1; - return 0; - } - return 1; + return tanzaku_add(&tanabata->sappyou, name, description); } int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) { @@ -26,7 +22,6 @@ int tanabata_tanzaku_rem_by_id(Tanabata *tanabata, uint64_t tanzaku_id) { } if (tanzaku_rem(&tanabata->sappyou, tanzaku_id) == 0 && kazari_rem_by_tanzaku(&tanabata->shoppyou, tanzaku_id) == 0) { - tanabata->sappyou_mod = 1; return 0; } return 1; @@ -38,7 +33,6 @@ int tanabata_tanzaku_rem_by_name(Tanabata *tanabata, const char *name) { if (current_tanzaku->id != HOLE_ID && strcmp(current_tanzaku->name, name) == 0) { if (tanzaku_rem(&tanabata->sappyou, current_tanzaku->id) == 0 && kazari_rem_by_tanzaku(&tanabata->shoppyou, current_tanzaku->id) == 0) { - tanabata->sappyou_mod = 1; return 0; } return 1;