From 85549c89b0241ad22d102aaf19f037a7c0ebce5b Mon Sep 17 00:00:00 2001 From: yuzu-eva Date: Fri, 11 Apr 2025 20:21:00 +0200 Subject: changed tblName to an enum; refactored enums into their own file --- Makefile | 2 +- dbhandling.c | 37 ++++++++++++++++++++------------ dbhandling.h | 8 ++++--- enum.c | 19 +++++++++++++++++ enum.h | 37 ++++++++++++++++++++++++++++++++ main.c | 70 +++++++++++++++++++++++++++--------------------------------- 6 files changed, 116 insertions(+), 57 deletions(-) create mode 100644 enum.c create mode 100644 enum.h diff --git a/Makefile b/Makefile index ffbf78f..aaf0f79 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ INSTALL_DATA = install -m 644 CFLAGS = -Wall -Wextra LIBS = -lsqlite3 -SRC = main.c dbhandling.c +SRC = main.c dbhandling.c enum.c OBJ = ${SRC:.c=.o} BIN = libman diff --git a/dbhandling.c b/dbhandling.c index 778c147..40ef42c 100644 --- a/dbhandling.c +++ b/dbhandling.c @@ -1,4 +1,5 @@ #include "dbhandling.h" +#include "enum.h" void exit_with_error(sqlite3 *db, const char *msg) { @@ -7,7 +8,7 @@ void exit_with_error(sqlite3 *db, const char *msg) exit(69); } -void select_from_table(sqlite3 *db, char *tblName, char *qp) +void select_from_table(sqlite3 *db, target_e target, char *qp) { char *sql; int rc; @@ -18,14 +19,16 @@ void select_from_table(sqlite3 *db, char *tblName, char *qp) char *query_param = malloc(strlen(qp) + 2); int id; - - if (!strcmp(tblName, "anime")) { + switch (target) { + case ANIME: type = "Episode"; sql = "SELECT * FROM anime WHERE NAME LIKE ?1 ORDER BY ID;"; - } else if (!strcmp(tblName, "manga")) { + break; + case MANGA: type = "Chapter"; sql = "SELECT * FROM manga WHERE NAME LIKE ?1 ORDER BY ID;"; - } else { + break; + default: fprintf(stderr, "table does not exist...\n"); sqlite3_close(db); exit(69); @@ -58,7 +61,7 @@ void select_from_table(sqlite3 *db, char *tblName, char *qp) free(query_param); } -void update_entry(sqlite3 *db, char *tblName, char *qp, char *value, char *status) +void update_entry(sqlite3 *db, target_e target, char *qp, char *value, char *status) { char *sql; int rc; @@ -66,19 +69,22 @@ void update_entry(sqlite3 *db, char *tblName, char *qp, char *value, char *statu sqlite3_stmt *stmt; - if (!strcmp(tblName, "anime")) { + switch (target) { + case ANIME: if (status == NULL) { sql = "UPDATE anime SET EPISODE=?1 WHERE NAME=?2;"; } else { sql = "UPDATE anime SET EPISODE=?1, STATUS=?2 WHERE NAME=?3;"; } - } else if (!strcmp(tblName, "manga")) { + break; + case MANGA: if (status == NULL) { sql = "UPDATE manga SET CHAPTER=?1 WHERE NAME=?2;"; } else { sql = "UPDATE manga SET CHAPTER=?1, STATUS=?2 WHERE NAME=?3;"; } - } else { + break; + default: fprintf(stderr, "table does not exist...\n"); sqlite3_close(db); exit(69); @@ -106,18 +112,21 @@ void update_entry(sqlite3 *db, char *tblName, char *qp, char *value, char *statu sqlite3_finalize(stmt); } -void add_entry(sqlite3 *db, char *tblName, char *name, char *value, char *status) +void add_entry(sqlite3 *db, target_e target, char *name, char *value, char *status) { char *sql; int rc; sqlite3_stmt *stmt; - if (!strcmp(tblName, "anime")) { + switch (target) { + case ANIME: sql = "INSERT INTO anime (NAME, EPISODE, STATUS) VALUES (?1, ?2, ?3);"; - } else if (!strcmp(tblName, "manga")) { + break; + case MANGA: sql = "INSERT INTO manga (NAME, CHAPTER, STATUS) VALUES (?1, ?2, ?3);"; - } else { + break; + default: fprintf(stderr, "table does not exist...\n"); sqlite3_close(db); exit(69); @@ -133,6 +142,6 @@ void add_entry(sqlite3 *db, char *tblName, char *name, char *value, char *status sqlite3_bind_text(stmt, 3, status, -1, SQLITE_STATIC); rc = sqlite3_step(stmt); - printf("Entry %s added to %s!\n", name, tblName); + printf("Entry %s added!\n", name); sqlite3_finalize(stmt); } diff --git a/dbhandling.h b/dbhandling.h index 4f09852..df54eba 100644 --- a/dbhandling.h +++ b/dbhandling.h @@ -7,9 +7,11 @@ #include #include +#include "enum.h" + void exit_with_error(sqlite3 *db, const char *msg); -void select_from_table(sqlite3 *db, char *tblName, char *qp); -void update_entry(sqlite3 *db, char *tblName, char *qp, char *value, char *status); -void add_entry(sqlite3 *db, char *tblName, char *name, char *value, char *status); +void select_from_table(sqlite3 *db, target_e target, char *qp); +void update_entry(sqlite3 *db, target_e target, char *qp, char *value, char *status); +void add_entry(sqlite3 *db, target_e target, char *name, char *value, char *status); #endif diff --git a/enum.c b/enum.c new file mode 100644 index 0000000..34eeead --- /dev/null +++ b/enum.c @@ -0,0 +1,19 @@ +#include "enum.h" + +mode_e str2enum_mode(const char *str) +{ + for (size_t i = 0; i < sizeof(conversion_mode) / sizeof(conversion_mode[0]); ++i) { + if (!strcmp(str, conversion_mode[i].str)) + return conversion_mode[i].val; + } + return -1; +} + +target_e str2enum_target(const char *str) +{ + for (size_t i = 0; i < sizeof(conversion_target) / sizeof(conversion_target[0]); ++i) { + if (!strcmp(str, conversion_target[i].str)) + return conversion_target[i].val; + } + return -1; +} diff --git a/enum.h b/enum.h new file mode 100644 index 0000000..68bbc99 --- /dev/null +++ b/enum.h @@ -0,0 +1,37 @@ +#ifndef _ENUM_ +#define _ENUM_ + +#include + +typedef enum { + ANIME, + MANGA, +} target_e; + +typedef enum { + GET, + SET, + ADD, +} mode_e; + +static const struct { + mode_e val; + const char *str; +} conversion_mode [] = { + {GET, "get"}, + {SET, "set"}, + {ADD, "add"}, +}; + +static const struct { + target_e val; + const char *str; +} conversion_target [] = { + {ANIME, "anime"}, + {MANGA, "manga"}, +}; + +mode_e str2enum_mode(const char *str); +target_e str2enum_target(const char *str); + +#endif diff --git a/main.c b/main.c index b38733b..c67a976 100644 --- a/main.c +++ b/main.c @@ -1,34 +1,19 @@ #include #include "dbhandling.h" +#include "enum.h" const uint8_t PATH_MAX = 64; const char *filepath = ".local/share/sqlite"; const char *filename = "library.db"; -typedef enum { - GET, - SET, - ADD, -} mode_e; - -static const struct { - mode_e val; - const char *str; -} conversion [] = { - {GET, "get"}, - {SET, "set"}, - {ADD, "add"}, -}; - -mode_e str2enum(const char *str) -{ - for (size_t i = 0; i < sizeof(conversion) / sizeof(conversion[0]); ++i) { - if (!strcmp(str, conversion[i].str)) - return conversion[i].val; - } - return -1; -} +typedef struct { + target_e target; + char *name; + char *author; + char *value; + char *status; +} entry_t; void print_help(void) { @@ -43,6 +28,20 @@ void print_help(void) printf("\n"); } +entry_t *set_entry(entry_t *entry, int argc, char **argv) +{ + entry->target = str2enum_target(argv[2]); + entry->name = argv[3]; + if (argc == 5) { + entry->value = argv[4]; + entry->status = NULL; + } else if (argc == 6) { + entry->value = argv[4]; + entry->status = argv[5]; + } + return entry; +} + int main(int argc, char **argv) { if (argc < 4) { @@ -52,10 +51,8 @@ int main(int argc, char **argv) } mode_e mode; - char *target, *name, *value, *status; - mode = str2enum(argv[1]); - target = argv[2]; - name = argv[3]; + entry_t *entry = malloc(sizeof(entry_t)); + mode = str2enum_mode(argv[1]); char fullpath[PATH_MAX]; snprintf(fullpath, PATH_MAX, "%s/%s/%s", getenv("HOME"), filepath, filename); @@ -71,7 +68,8 @@ int main(int argc, char **argv) switch (mode) { case GET: - select_from_table(db, target, name); + set_entry(entry, argc, argv); + select_from_table(db, entry->target, entry->name); break; case SET: if (argc < 5) { @@ -79,14 +77,8 @@ int main(int argc, char **argv) sqlite3_close(db); exit(69); } - if (argc == 5) { - value = argv[4]; - update_entry(db, target, name, value, NULL); - } else if (argc == 6) { - value = argv[4]; - status = argv[5]; - update_entry(db, target, name, value, status); - } + set_entry(entry, argc, argv); + update_entry(db, entry->target, entry->name, entry->value, entry->status); break; case ADD: if (argc < 6) { @@ -94,9 +86,8 @@ int main(int argc, char **argv) sqlite3_close(db); exit(69); } - value = argv[4]; - status = argv[5]; - add_entry(db, target, name, value, status); + set_entry(entry, argc, argv); + add_entry(db, entry->target, entry->name, entry->value, entry->status); break; default: fprintf(stderr, "unknown option...\n"); @@ -106,5 +97,6 @@ int main(int argc, char **argv) } sqlite3_close(db); + free(entry); return 0; } -- cgit v1.2.3