diff options
| author | yuzu-eva <cafebabe@disroot.org> | 2025-04-17 21:00:16 +0200 |
|---|---|---|
| committer | yuzu-eva <cafebabe@disroot.org> | 2025-04-17 21:00:16 +0200 |
| commit | 29410e3943e3e0da6279708d19b4459578b49f5d (patch) | |
| tree | e1ff86a1eae995b3d0017044808932d76aef2846 | |
| parent | 2dc8e8e1e32242f8e8cacc226b04e5502b84d54c (diff) | |
refactored shit
| -rw-r--r-- | dbhandling.c | 83 | ||||
| -rw-r--r-- | dbhandling.h | 14 | ||||
| -rw-r--r-- | main.c | 63 |
3 files changed, 82 insertions, 78 deletions
diff --git a/dbhandling.c b/dbhandling.c index 4b1cb93..a112b8e 100644 --- a/dbhandling.c +++ b/dbhandling.c @@ -8,7 +8,7 @@ void exit_with_error(sqlite3 *db, const char *msg) exit(69); } -void select_from_table(sqlite3 *db, args_e target, char *qp) +void select_from_table(sqlite3 *db, args_e target, entry_t *entry) { char *sql; int rc; @@ -16,8 +16,14 @@ void select_from_table(sqlite3 *db, args_e target, char *qp) const unsigned char *name, *author, *value, *status; const char *type; - char *query_param = malloc(strlen(qp) + 2); + printf("Name: "); + fgets(entry->name, sizeof(entry->name), stdin); + + // remove newline char, otherwise it messes with the query + entry->name[strcspn(entry->name, "\n")] = 0; + + char *query_param = malloc(strlen(entry->name)); switch (target) { case ANIME: type = "Episode"; @@ -29,7 +35,7 @@ void select_from_table(sqlite3 *db, args_e target, char *qp) break; case BOOK: type = "Chapter"; - sql = "SELECT * FROM book WHERE name LIKE ?1 ORDER BY id;"; + sql = "SELECT * FROM book WHERE name LIKE ?1 OR author LIKE ?1 ORDER BY id;"; break; default: fprintf(stderr, "table does not exist...\n"); @@ -38,7 +44,8 @@ void select_from_table(sqlite3 *db, args_e target, char *qp) } sqlite3_stmt *stmt; - snprintf(query_param, strlen(qp) + 2, "%s%%", qp); + snprintf(query_param, strlen(entry->name) + 2, "%s%%", entry->name); + printf("Query parameter: %s\n" , query_param); rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0); if (rc != SQLITE_OK) { @@ -74,7 +81,7 @@ void select_from_table(sqlite3 *db, args_e target, char *qp) free(query_param); } -void update_entry(sqlite3 *db, args_e target, char *qp, char *value, char *status) +void update_entry(sqlite3 *db, args_e target, entry_t *entry) { char *sql; int rc; @@ -82,25 +89,39 @@ void update_entry(sqlite3 *db, args_e target, char *qp, char *value, char *statu sqlite3_stmt *stmt; + printf("Name: "); + fgets(entry->name, sizeof(entry->name), stdin); switch (target) { case ANIME: - if (status == NULL) { + printf("Episode: "); + fgets(entry->value, sizeof(entry->value), stdin); + if (entry->status == NULL) { sql = "UPDATE anime SET episode=?1 WHERE name=?2;"; } else { + printf("Status: "); + fgets(entry->status, sizeof(entry->status), stdin); sql = "UPDATE anime SET episode=?1, status=?2 WHERE name=?3;"; } break; case MANGA: - if (status == NULL) { + printf("Chapter: "); + fgets(entry->value, sizeof(entry->value), stdin); + if (entry->status == NULL) { sql = "UPDATE manga SET chapter=?1 WHERE name=?2;"; } else { + printf("Status: "); + fgets(entry->status, sizeof(entry->status), stdin); sql = "UPDATE manga SET chapter=?1, status=?2 WHERE name=?3;"; } break; case BOOK: - if (status == NULL) { + printf("Chapter: "); + fgets(entry->value, sizeof(entry->value), stdin); + if (entry->status == NULL) { sql = "UPDATE book SET chapter=?1 WHERE name=?2;"; } else { + printf("Status: "); + fgets(entry->status, sizeof(entry->status), stdin); sql = "UPDATE book SET chapter=?1, status=?2 WHERE name=?3;"; } break; @@ -115,13 +136,13 @@ void update_entry(sqlite3 *db, args_e target, char *qp, char *value, char *statu exit_with_error(db, "failure fetching data: "); } - if (status == NULL) { - sqlite3_bind_text(stmt, 1, value, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, qp, -1, SQLITE_STATIC); + if (entry->status == NULL) { + sqlite3_bind_text(stmt, 1, entry->value, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, entry->name, -1, SQLITE_STATIC); } else { - sqlite3_bind_text(stmt, 1, value, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, status, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 3, qp, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 1, entry->value, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, entry->status, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 3, entry->name, -1, SQLITE_STATIC); } rc = sqlite3_step(stmt); @@ -132,21 +153,37 @@ void update_entry(sqlite3 *db, args_e target, char *qp, char *value, char *statu sqlite3_finalize(stmt); } -void add_entry(sqlite3 *db, args_e target, char *name, char *author, char *value, char *status) +void add_entry(sqlite3 *db, args_e target, entry_t *entry) { char *sql; int rc; sqlite3_stmt *stmt; + printf("Name: "); + fgets(entry->name, sizeof(entry->name), stdin); switch (target) { case ANIME: + printf("Episode: "); + fgets(entry->value, sizeof(entry->value), stdin); + printf("Status: "); + fgets(entry->status, sizeof(entry->status), stdin); sql = "INSERT INTO anime (name, episode, status) VALUES (?1, ?2, ?3);"; break; case MANGA: + printf("Chapter: "); + fgets(entry->value, sizeof(entry->value), stdin); + printf("Status: "); + fgets(entry->status, sizeof(entry->status), stdin); sql = "INSERT INTO manga (name, chapter, status) VALUES (?1, ?2, ?3);"; break; case BOOK: + printf("Author: "); + fgets(entry->author, sizeof(entry->author), stdin); + printf("Chapter: "); + fgets(entry->value, sizeof(entry->value), stdin); + printf("Status: "); + fgets(entry->status, sizeof(entry->status), stdin); sql = "INSERT INTO book (name, author, chapter, status) VALUES (?1, ?2, ?3, ?4);"; break; default: @@ -161,17 +198,17 @@ void add_entry(sqlite3 *db, args_e target, char *name, char *author, char *value } if (target == BOOK) { - sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, author, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 3, value, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 4, status, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 1, entry->name, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, entry->author, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 3, entry->value, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 4, entry->status, -1, SQLITE_STATIC); } else { - sqlite3_bind_text(stmt, 1, name, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, value, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 3, status, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 1, entry->name, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 2, entry->value, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 3, entry->status, -1, SQLITE_STATIC); } rc = sqlite3_step(stmt); - printf("Entry %s added!\n", name); + printf("Entry %s added!\n", entry->name); sqlite3_finalize(stmt); } diff --git a/dbhandling.h b/dbhandling.h index df93a0e..e9b28d2 100644 --- a/dbhandling.h +++ b/dbhandling.h @@ -9,9 +9,17 @@ #include "enum.h" +typedef struct { + char *name; + char *author; + char *value; + char *status; +} entry_t; + + void exit_with_error(sqlite3 *db, const char *msg); -void select_from_table(sqlite3 *db, args_e target, char *qp); -void update_entry(sqlite3 *db, args_e target, char *qp, char *value, char *status); -void add_entry(sqlite3 *db, args_e target, char *name, char *author, char *value, char *status); +void select_from_table(sqlite3 *db, args_e target, entry_t *entry); +void update_entry(sqlite3 *db, args_e target, entry_t *entry); +void add_entry(sqlite3 *db, args_e target, entry_t *entry); #endif @@ -7,14 +7,6 @@ const uint8_t PATH_MAX = 64; const char *filepath = ".local/share/sqlite"; const char *filename = "library.db"; -typedef struct { - args_e target; - char *name; - char *author; - char *value; - char *status; -} entry_t; - void print_help(void) { printf("\n"); @@ -29,43 +21,23 @@ void print_help(void) printf("\n"); } -entry_t *set_entry(entry_t *entry, int argc, char **argv) -{ - entry->target = str2enum(argv[2]); - entry->name = argv[3]; - if (entry->target == BOOK) { - entry->author = argv[4]; - if (argc == 6) { - entry->value = argv[5]; - entry->status = NULL; - } else if (argc == 7) { - entry->value = argv[5]; - entry->status = argv[6]; - } - } else { - entry->author = NULL; - 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) { + if (argc < 3) { fprintf(stderr, "missing argument...\n"); print_help(); exit(69); } args_e mode; - entry_t *entry = malloc(sizeof(entry_t)); mode = str2enum(argv[1]); + args_e target; + target = str2enum(argv[2]); + entry_t *entry = malloc(sizeof(entry_t)); + entry->name = malloc(128 * sizeof(char)); + entry->author = malloc(64 * sizeof(char)); + entry->value = malloc(16 * sizeof(char)); + entry->status = malloc(16 * sizeof(char)); char fullpath[PATH_MAX]; snprintf(fullpath, PATH_MAX, "%s/%s/%s", getenv("HOME"), filepath, filename); @@ -81,26 +53,13 @@ int main(int argc, char **argv) switch (mode) { case GET: - set_entry(entry, argc, argv); - select_from_table(db, entry->target, entry->name); + select_from_table(db, target, entry); break; case SET: - if (argc < 5) { - fprintf(stderr, "missing argument...\n"); - sqlite3_close(db); - exit(69); - } - set_entry(entry, argc, argv); - update_entry(db, entry->target, entry->name, entry->value, entry->status); + update_entry(db, target, entry); break; case ADD: - if (argc < 6) { - fprintf(stderr, "missing argument...\n"); - sqlite3_close(db); - exit(69); - } - set_entry(entry, argc, argv); - add_entry(db, entry->target, entry->name, entry->author, entry->value, entry->status); + add_entry(db, target, entry); break; default: fprintf(stderr, "unknown option...\n"); |
