diff options
| author | yuzu-eva <cafebabe@disroot.org> | 2025-04-11 20:21:00 +0200 |
|---|---|---|
| committer | yuzu-eva <cafebabe@disroot.org> | 2025-04-11 20:21:00 +0200 |
| commit | 85549c89b0241ad22d102aaf19f037a7c0ebce5b (patch) | |
| tree | fe58dffd0a97bfdf924c3bfcfadd2eef3d6614fa | |
| parent | b81023a76e479bc417c523905a34266489b55d7f (diff) | |
changed tblName to an enum; refactored enums into their own file
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | dbhandling.c | 37 | ||||
| -rw-r--r-- | dbhandling.h | 8 | ||||
| -rw-r--r-- | enum.c | 19 | ||||
| -rw-r--r-- | enum.h | 37 | ||||
| -rw-r--r-- | main.c | 70 |
6 files changed, 116 insertions, 57 deletions
@@ -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 <unistd.h> #include <sqlite3.h> +#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 @@ -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; +} @@ -0,0 +1,37 @@ +#ifndef _ENUM_ +#define _ENUM_ + +#include <string.h> + +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 @@ -1,34 +1,19 @@ #include <stdint.h> #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; } |
