summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryuzu-eva <cafebabe@disroot.org>2025-04-17 21:00:16 +0200
committeryuzu-eva <cafebabe@disroot.org>2025-04-17 21:00:16 +0200
commit29410e3943e3e0da6279708d19b4459578b49f5d (patch)
treee1ff86a1eae995b3d0017044808932d76aef2846
parent2dc8e8e1e32242f8e8cacc226b04e5502b84d54c (diff)
refactored shit
-rw-r--r--dbhandling.c83
-rw-r--r--dbhandling.h14
-rw-r--r--main.c63
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
diff --git a/main.c b/main.c
index f8af94d..de7437d 100644
--- a/main.c
+++ b/main.c
@@ -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");