summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db-setup.sql22
-rw-r--r--dbhandling.c70
-rw-r--r--dbhandling.h2
-rw-r--r--enum.h2
-rw-r--r--main.c31
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
diff --git a/enum.h b/enum.h
index bbe8ac6..65cde6f 100644
--- a/enum.h
+++ b/enum.h
@@ -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);
diff --git a/main.c b/main.c
index 337f353..f8af94d 100644
--- a/main.c
+++ b/main.c
@@ -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");