diff --git a/include/core.h b/include/core.h index 0863217..a04c87b 100644 --- a/include/core.h +++ b/include/core.h @@ -19,7 +19,7 @@ extern "C" { typedef struct sasa { uint64_t id; // Sasa ID uint64_t created_ts; // Sasa creation timestamp - char *path; // Path to file + char *path; // File path } Sasa; // Tanzaku (短冊) - a tag record @@ -104,8 +104,11 @@ int sasahyou_dump(Sasahyou *sasahyou, const char *path); // Add sasa to sasahyou int sasa_add(Sasahyou *sasahyou, const char *path); -// Remove sasa from sasahyou -int sasa_rem(Sasahyou *sasahyou, uint64_t sasa_id); +// Remove sasa from sasahyou by ID +int sasa_rem_by_id(Sasahyou *sasahyou, uint64_t sasa_id); + +// Remove sasa from sasahyou by file path +int sasa_rem_by_path(Sasahyou *sasahyou, const char *path); // ==================== SAPPYOU SECTION ==================== // @@ -133,8 +136,14 @@ int sappyou_dump(Sappyou *sappyou, const char *path); // Add new tanzaku to sappyou int tanzaku_add(Sappyou *sappyou, const char *name, const char *alias, const char *description); -// Remove tanzaku from sappyou -int tanzaku_rem(Sappyou *sappyou, uint64_t tanzaku_id); +// Remove tanzaku from sappyou by ID +int tanzaku_rem_by_id(Sappyou *sappyou, uint64_t tanzaku_id); + +// Remove tanzaku from sappyou by name +int tanzaku_rem_by_name(Sappyou *sappyou, const char *name); + +// Remove tanzaku from sappyou by alias +int tanzaku_rem_by_alias(Sappyou *sappyou, const char *alias); // ==================== SHOPPYOU SECTION ==================== // diff --git a/src/core/sappyou.c b/src/core/sappyou.c index 561413e..f855327 100644 --- a/src/core/sappyou.c +++ b/src/core/sappyou.c @@ -160,7 +160,7 @@ int tanzaku_add(Sappyou *sappyou, const char *name, const char *alias, const cha return 0; } -int tanzaku_rem(Sappyou *sappyou, uint64_t tanzaku_id) { +int tanzaku_rem_by_id(Sappyou *sappyou, uint64_t tanzaku_id) { if (tanzaku_id > sappyou->size) { fprintf(stderr, "Failed to remove tanzaku: target tanzaku does not exist\n"); return 1; @@ -175,3 +175,39 @@ int tanzaku_rem(Sappyou *sappyou, uint64_t tanzaku_id) { return 0; } + +int tanzaku_rem_by_name(Sappyou *sappyou, const char *name) { + for (uint64_t i = 0; i < sappyou->size; i++) { + if (strcmp(sappyou->contents[i].name, name) == 0) { + if (sappyou->contents[i].id != 0) { + sappyou->modified_ts = time(NULL); + sappyou->contents[i].id = 0; + sappyou->removed_cnt++; + return 0; + } else { + fprintf(stderr, "Failed to remove tanzaku: target tanzaku is already removed\n"); + return 1; + } + } + } + fprintf(stderr, "Failed to remove tanzaku: target tanzaku does not exist\n"); + return 1; +} + +int tanzaku_rem_by_alias(Sappyou *sappyou, const char *alias) { + for (uint64_t i = 0; i < sappyou->size; i++) { + if (strcmp(sappyou->contents[i].alias, alias) == 0) { + if (sappyou->contents[i].id != 0) { + sappyou->modified_ts = time(NULL); + sappyou->contents[i].id = 0; + sappyou->removed_cnt++; + return 0; + } else { + fprintf(stderr, "Failed to remove tanzaku: target tanzaku is already removed\n"); + return 1; + } + } + } + fprintf(stderr, "Failed to remove tanzaku: target tanzaku does not exist\n"); + return 1; +} diff --git a/src/core/sasahyou.c b/src/core/sasahyou.c index 38be40b..104c8e0 100644 --- a/src/core/sasahyou.c +++ b/src/core/sasahyou.c @@ -149,7 +149,7 @@ int sasa_add(Sasahyou *sasahyou, const char *path) { return 0; } -int sasa_rem(Sasahyou *sasahyou, uint64_t sasa_id) { +int sasa_rem_by_id(Sasahyou *sasahyou, uint64_t sasa_id) { if (sasa_id > sasahyou->size) { fprintf(stderr, "Failed to remove sasa: target sasa does not exist\n"); return 1; @@ -164,3 +164,21 @@ int sasa_rem(Sasahyou *sasahyou, uint64_t sasa_id) { return 0; } + +int sasa_rem_by_path(Sasahyou *sasahyou, const char *path) { + for (uint64_t i = 0; i < sasahyou->size; i++) { + if (strcmp(sasahyou->contents[i].path, path) == 0) { + if (sasahyou->contents[i].id != 0) { + sasahyou->modified_ts = time(NULL); + sasahyou->contents[i].id = 0; + sasahyou->removed_cnt++; + return 0; + } else { + fprintf(stderr, "Failed to remove sasa: target sasa is already removed\n"); + return 1; + } + } + } + fprintf(stderr, "Failed to remove sasa: target sasa does not exist\n"); + return 1; +}