diff options
| author | yuzu-eva <cafebabe@disroot.org> | 2025-04-17 18:14:25 +0200 |
|---|---|---|
| committer | yuzu-eva <cafebabe@disroot.org> | 2025-04-17 18:14:25 +0200 |
| commit | 2dc8e8e1e32242f8e8cacc226b04e5502b84d54c (patch) | |
| tree | a9340a3aa1c60b8ad72919e2b9fe1f0db73ba0eb | |
| parent | 5aa349d6229806ad78b083fed3997164bd3721ae (diff) | |
| -rw-r--r-- | db-setup.sql | 22 | ||||
| -rw-r--r-- | dbhandling.c | 70 | ||||
| -rw-r--r-- | dbhandling.h | 2 | ||||
| -rw-r--r-- | enum.h | 2 | ||||
| -rw-r--r-- | main.c | 31 |
5 files changed, 90 insertions, 37 deletions
diff --git a/db-setup.sql b/db-setup.sql index 5110dca..3cc7996 100644 --- a/db-setup.sql +++ b/db-setup.sql @@ -1,12 +1,18 @@ CREATE TABLE anime( - ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - NAME TEXT NOT NULL, - EPISODE TEXT NOT NULL, - STATUS TEXT NOT NULL); + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + name TEXT NOT NULL, + episode TEXT NOT NULL, + status TEXT NOT NULL); CREATE TABLE manga( - ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - NAME TEXT NOT NULL, - CHAPTER TEXT NOT NULL, - STATUS TEXT NOT NULL); + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + name TEXT NOT NULL, + chapter TEXT NOT NULL, + status TEXT NOT NULL); +CREATE TABLE book( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + name TEXT NOT NULL, + author TEXT NOT NULL, + chapter TEXT NOT NULL, + status TEXT NOT NULL); diff --git a/dbhandling.c b/dbhandling.c index 8252ca0..4b1cb93 100644 --- a/dbhandling.c +++ b/dbhandling.c @@ -14,18 +14,22 @@ void select_from_table(sqlite3 *db, args_e target, char *qp) int rc; int found = 0; - const unsigned char *name, *value, *status; + const unsigned char *name, *author, *value, *status; const char *type; char *query_param = malloc(strlen(qp) + 2); switch (target) { case ANIME: type = "Episode"; - sql = "SELECT * FROM anime WHERE NAME LIKE ?1 ORDER BY ID;"; + sql = "SELECT * FROM anime WHERE name LIKE ?1 ORDER BY id;"; break; case MANGA: type = "Chapter"; - sql = "SELECT * FROM manga WHERE NAME LIKE ?1 ORDER BY ID;"; + sql = "SELECT * FROM manga WHERE name LIKE ?1 ORDER BY id;"; + break; + case BOOK: + type = "Chapter"; + sql = "SELECT * FROM book WHERE name LIKE ?1 ORDER BY id;"; break; default: fprintf(stderr, "table does not exist...\n"); @@ -43,12 +47,23 @@ void select_from_table(sqlite3 *db, args_e target, char *qp) sqlite3_bind_text(stmt, 1, query_param, -1, SQLITE_TRANSIENT); - while(sqlite3_step(stmt) == SQLITE_ROW) { - name = sqlite3_column_text(stmt, 1); - value = sqlite3_column_text(stmt, 2); - status = sqlite3_column_text(stmt, 3); - printf("%s, %s %s, %s\n", name, type, value, status); - found = 1; + if (target == BOOK) { + while(sqlite3_step(stmt) == SQLITE_ROW) { + name = sqlite3_column_text(stmt, 1); + author = sqlite3_column_text(stmt, 2); + value = sqlite3_column_text(stmt, 3); + status = sqlite3_column_text(stmt, 4); + printf("%s - %s, %s %s, %s\n", author, name, type, value, status); + found = 1; + } + } else { + while(sqlite3_step(stmt) == SQLITE_ROW) { + name = sqlite3_column_text(stmt, 1); + value = sqlite3_column_text(stmt, 2); + status = sqlite3_column_text(stmt, 3); + printf("%s, %s %s, %s\n", name, type, value, status); + found = 1; + } } if (!found) { @@ -70,16 +85,23 @@ void update_entry(sqlite3 *db, args_e target, char *qp, char *value, char *statu switch (target) { case ANIME: if (status == NULL) { - sql = "UPDATE anime SET EPISODE=?1 WHERE NAME=?2;"; + sql = "UPDATE anime SET episode=?1 WHERE name=?2;"; } else { - sql = "UPDATE anime SET EPISODE=?1, STATUS=?2 WHERE NAME=?3;"; + sql = "UPDATE anime SET episode=?1, status=?2 WHERE name=?3;"; } break; case MANGA: if (status == NULL) { - sql = "UPDATE manga SET CHAPTER=?1 WHERE NAME=?2;"; + sql = "UPDATE manga SET chapter=?1 WHERE name=?2;"; + } else { + sql = "UPDATE manga SET chapter=?1, status=?2 WHERE name=?3;"; + } + break; + case BOOK: + if (status == NULL) { + sql = "UPDATE book SET chapter=?1 WHERE name=?2;"; } else { - sql = "UPDATE manga SET CHAPTER=?1, STATUS=?2 WHERE NAME=?3;"; + sql = "UPDATE book SET chapter=?1, status=?2 WHERE name=?3;"; } break; default: @@ -110,7 +132,7 @@ 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 *value, char *status) +void add_entry(sqlite3 *db, args_e target, char *name, char *author, char *value, char *status) { char *sql; int rc; @@ -119,10 +141,13 @@ void add_entry(sqlite3 *db, args_e target, char *name, char *value, char *status switch (target) { case ANIME: - sql = "INSERT INTO anime (NAME, EPISODE, STATUS) VALUES (?1, ?2, ?3);"; + sql = "INSERT INTO anime (name, episode, status) VALUES (?1, ?2, ?3);"; break; case MANGA: - sql = "INSERT INTO manga (NAME, CHAPTER, STATUS) VALUES (?1, ?2, ?3);"; + sql = "INSERT INTO manga (name, chapter, status) VALUES (?1, ?2, ?3);"; + break; + case BOOK: + sql = "INSERT INTO book (name, author, chapter, status) VALUES (?1, ?2, ?3, ?4);"; break; default: fprintf(stderr, "table does not exist...\n"); @@ -135,9 +160,16 @@ void add_entry(sqlite3 *db, args_e target, char *name, char *value, char *status exit_with_error(db, "failure fetching data: "); } - 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); + 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); + } 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); + } rc = sqlite3_step(stmt); printf("Entry %s added!\n", name); diff --git a/dbhandling.h b/dbhandling.h index 042ad97..df93a0e 100644 --- a/dbhandling.h +++ b/dbhandling.h @@ -12,6 +12,6 @@ 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 *value, char *status); +void add_entry(sqlite3 *db, args_e target, char *name, char *author, char *value, char *status); #endif @@ -9,6 +9,7 @@ typedef enum { ADD, ANIME, MANGA, + BOOK, } args_e; static const struct { @@ -20,6 +21,7 @@ static const struct { {ADD, "add"}, {ANIME, "anime"}, {MANGA, "manga"}, + {BOOK, "book"}, }; args_e str2enum(const char *str); @@ -20,11 +20,12 @@ void print_help(void) printf("\n"); printf("usage: myal MODE TARGET NAME [EPISODE|CHAPTER] \n"); printf("possible modes are: get|set|add \n"); - printf("possible targets are: anime|manga \n"); - printf("EXAMPLES: myal get anime %% | Prints all anime \n"); + printf("possible targets are: anime|manga|book \n"); + printf("EXAMPLES: myal get anime %% | Prints all anime \n"); printf(" myal set manga Murcielago 10 | Set chapter of " \ "Murcielago to 10\n"); printf("mode get is fuzzy; set and add have to match exactly \n"); + printf("See more examples in the readme. \n"); printf("\n"); } @@ -32,12 +33,24 @@ entry_t *set_entry(entry_t *entry, int argc, char **argv) { entry->target = str2enum(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]; + 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; } @@ -87,7 +100,7 @@ int main(int argc, char **argv) exit(69); } set_entry(entry, argc, argv); - add_entry(db, entry->target, entry->name, entry->value, entry->status); + add_entry(db, entry->target, entry->name, entry->author, entry->value, entry->status); break; default: fprintf(stderr, "unknown option...\n"); |
