done for now

This commit is contained in:
2025-04-28 22:45:22 +02:00
parent ce5d88926c
commit fb6794a571

203
db.c
View File

@ -3,41 +3,60 @@
#include <string.h> #include <string.h>
#include <sqlite3.h> #include <sqlite3.h>
// Callback function taken from https://sqlite.org/quickstart.html void print_usage() {
static int print_callback(void *NotUsed, int argc, char **argv, char **azColName){ printf("Usage: db <arguments>\n");
for(size_t i=0; i<argc; i++){ printf("\tadd <url> [custom_name] \n");
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); printf("\tgenerate <website_name>\n");
printf("\tupdate <url> <new_artist_name>\n");
printf("\tdelete <url>\n");
}
void exit_nicely(sqlite3 *db, const char *msg) {
if (msg != NULL) {
fprintf(stderr, "%s\n", msg);
}
print_usage();
sqlite3_close(db);
exit(1);
}
static int print_callback(void *unused, int argc, char **argv, char **col_name) {
for (size_t i = 0; i < argc; i++) {
printf("%s", argv[i] ? argv[i] : "NULL");
if (i < argc - 1) {
printf(" ");
}
} }
printf("\n"); printf("\n");
return 0; return 0;
} }
char* get_website_from_url(const char *url) { char* get_website_from_url(const char *url) {
char *tmp = strstr(url, "rule34.xxx"); if (strstr(url, "rule34.xxx") != NULL) {
if (tmp != NULL) {
return "Rule34"; return "Rule34";
} else if (strstr(url, "iwara.tv") != NULL) {
return "Iwara";
} else {
return NULL;
} }
return NULL;
} }
char* get_artist_from_url(const char *url, const char *website_name) { char* get_artist_from_url(const char *url, const char *website_name) {
size_t offset = 0; size_t offset = 0;
if (strcmp(website_name, "Rule34") == 0) { if (strcmp(website_name, "Rule34") == 0) {
offset = 51; offset = 51;
} else if (strcmp(website_name, "Iwara") == 0) { } else if (strcmp(website_name, "Gelbooru") == 0) {
// offset = 53;
} } else if (strcmp(website_name, "ATF") == 0) {
offset = 42;
if (offset == 0) { } else {
return NULL; return NULL;
} }
size_t i; size_t name_length = strlen(url) - offset;
for (i = 0; url[offset+i] != '\0'; i++) {} char *artist_name = malloc(name_length + 1);
char *artist_name = malloc(i+1); // since this is programs halts soon, I dont need to free this manually memcpy(artist_name, url + offset, name_length);
memcpy(artist_name, url + offset, i); artist_name[name_length] = '\0';
artist_name[i] = '\0';
return artist_name; return artist_name;
} }
@ -47,12 +66,12 @@ bool add(sqlite3 *db, const char *url) {
int result; int result;
char *error_msg; char *error_msg;
const char *website_name = get_website_from_url(url); char *website_name = get_website_from_url(url);
if (website_name == NULL) { if (website_name == NULL) {
fprintf(stderr, "Couldn't get website_name from url %s\n", url); fprintf(stderr, "Couldn't get website_name from url %s\n", url);
return false; return false;
} }
const char *artist_name = get_artist_from_url(url, website_name); char *artist_name = get_artist_from_url(url, website_name);
if (artist_name == NULL) { if (artist_name == NULL) {
fprintf(stderr, "Couldn't get artist_name from url %s\n", url); fprintf(stderr, "Couldn't get artist_name from url %s\n", url);
return false; return false;
@ -68,6 +87,72 @@ bool add(sqlite3 *db, const char *url) {
return true; return true;
} }
bool add_custom_name(sqlite3 *db, const char *url, const char *custom_name) {
char *sql;
int result;
char *error_msg;
char *website_name = get_website_from_url(url);
if (website_name == NULL) {
fprintf(stderr, "Couldn't get website_name from url %s\n", url);
return false;
}
sprintf(sql, "INSERT INTO hentai VALUES ('%s', '%s', '%s');", url, custom_name, website_name);
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
if (result != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", error_msg);
sqlite3_free(error_msg);
return false;
}
return true;
}
bool generate(sqlite3 *db, const char *website_name) {
char *sql;
int result;
char *error_msg;
sprintf(sql, "SELECT * FROM hentai WHERE website_name = '%s';", website_name);
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
if (result != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", error_msg);
sqlite3_free(error_msg);
return false;
}
return true;
}
bool update_artist_name(sqlite3 *db, const char *url, const char *new_artist_name) {
char *sql;
int result;
char *error_msg;
sprintf(sql, "UPDATE hentai set artist_name = '%s' WHERE url = '%s';", new_artist_name, url);
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
if (result != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", error_msg);
sqlite3_free(error_msg);
return false;
}
return true;
}
bool delete(sqlite3 *db, const char *url) {
char *sql;
int result;
char *error_msg;
sprintf(sql, "DELETE FROM hentai WHERE url = '%s';", url);
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
if (result != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", error_msg);
sqlite3_free(error_msg);
return false;
}
return true;
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
sqlite3 *db; sqlite3 *db;
int result; int result;
@ -75,51 +160,67 @@ int main(int argc, char **argv) {
char *sql; char *sql;
bool successful; bool successful;
result = sqlite3_open(":memory:", &db); result = sqlite3_open("/tmp/Hentai.db", &db);
if (result != SQLITE_OK || db == NULL) { if (result != SQLITE_OK) {
fprintf(stderr, "Couldn't create or open db: %s\n", sqlite3_errmsg(db)); exit_nicely(db, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} }
sql = "CREATE TABLE IF NOT EXISTS hentai (url TEXT PRIMARY KEY NOT NULL, artist_name TEXT NOT NULL, website_name TEXT NOT NULL) STRICT;"; sql = "CREATE TABLE IF NOT EXISTS hentai (url TEXT PRIMARY KEY NOT NULL, artist_name TEXT NOT NULL, website_name TEXT NOT NULL) STRICT;";
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg); result = sqlite3_exec(db, sql, NULL, 0, &error_msg);
if (result != SQLITE_OK) { if (result != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", error_msg); fprintf(stderr, "SQL error: %s\n", error_msg);
sqlite3_free(error_msg); sqlite3_free(error_msg);
exit_nicely(db, NULL);
} }
printf("argc = %d\n", argc);
printf("argv = {\n");
for (int i = 0; i < argc; i++) {
printf("\t%s\n", argv[i]);
}
printf("}\n");
if (argc < 2) { if (argc < 2) {
fprintf(stderr, "Incorrect amount of arguments\n"); exit_nicely(db, "Incorrect amount of arguments");
// TODO: print_usage();
sqlite3_close(db);
return 1;
} }
if (strcmp(argv[1], "add") == 0) { if (strcmp(argv[1], "add") == 0) {
successful = add(db, argv[2]); if (argc == 3) {
if (!successful) { successful = add(db, argv[2]);
sqlite3_close(db); if (!successful) {
return 1; exit_nicely(db, NULL);
}
} else if (argc == 4) {
successful = add_custom_name(db, argv[2], argv[3]);
if (!successful) {
exit_nicely(db, NULL);
}
} else {
exit_nicely(db, "Incorrect amount of arguments");
}
} else if (strcmp(argv[1], "generate") == 0) {
if (argc == 3) {
successful = generate(db, argv[2]);
if (!successful) {
exit_nicely(db, NULL);
}
} else {
exit_nicely(db, "Incorrect amount of arguments");
}
} else if (strcmp(argv[1], "update") == 0) {
if (argc == 4) {
successful = update_artist_name(db, argv[3], argv[2]);
if (!successful) {
exit_nicely(db, NULL);
}
} else {
exit_nicely(db, "Incorrect amount of arguments");
}
} else if (strcmp(argv[1], "delete") == 0) {
if (argc == 3) {
successful = delete(db, argv[2]);
if (!successful) {
exit_nicely(db, NULL);
}
} else {
exit_nicely(db, "Incorrect amount of arguments");
} }
} else { } else {
fprintf(stderr, "Invalid argument\n"); exit_nicely(db, "Invalid argument");
sqlite3_close(db);
return 1;
}
sql = "SELECT * FROM hentai;";
result = sqlite3_exec(db, sql, print_callback, 0, &error_msg);
if (result != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", error_msg);
sqlite3_free(error_msg);
} }
sqlite3_close(db); sqlite3_close(db);