229 lines
6.3 KiB
C
229 lines
6.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sqlite3.h>
|
|
|
|
void print_usage() {
|
|
printf("Usage: db <arguments>\n");
|
|
printf("\tadd <url> [custom_name] \n");
|
|
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");
|
|
return 0;
|
|
}
|
|
|
|
char* get_website_from_url(const char *url) {
|
|
if (strstr(url, "rule34.xxx") != NULL) {
|
|
return "Rule34";
|
|
} else if (strstr(url, "iwara.tv") != NULL) {
|
|
return "Iwara";
|
|
} else {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
char* get_artist_from_url(const char *url, const char *website_name) {
|
|
size_t offset = 0;
|
|
if (strcmp(website_name, "Rule34") == 0) {
|
|
offset = 51;
|
|
} else if (strcmp(website_name, "Gelbooru") == 0) {
|
|
offset = 53;
|
|
} else if (strcmp(website_name, "ATF") == 0) {
|
|
offset = 42;
|
|
} else {
|
|
return NULL;
|
|
}
|
|
|
|
size_t name_length = strlen(url) - offset;
|
|
char *artist_name = malloc(name_length + 1);
|
|
memcpy(artist_name, url + offset, name_length);
|
|
artist_name[name_length] = '\0';
|
|
|
|
return artist_name;
|
|
}
|
|
|
|
bool add(sqlite3 *db, const char *url) {
|
|
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;
|
|
}
|
|
char *artist_name = get_artist_from_url(url, website_name);
|
|
if (artist_name == NULL) {
|
|
fprintf(stderr, "Couldn't get artist_name from url %s\n", url);
|
|
return false;
|
|
}
|
|
|
|
sprintf(sql, "INSERT INTO hentai VALUES ('%s', '%s', '%s');", url, artist_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 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) {
|
|
sqlite3 *db;
|
|
int result;
|
|
char *error_msg;
|
|
char *sql;
|
|
bool successful;
|
|
|
|
result = sqlite3_open("/tmp/Hentai.db", &db);
|
|
if (result != SQLITE_OK) {
|
|
exit_nicely(db, sqlite3_errmsg(db));
|
|
}
|
|
|
|
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, NULL, 0, &error_msg);
|
|
if (result != SQLITE_OK) {
|
|
fprintf(stderr, "SQL error: %s\n", error_msg);
|
|
sqlite3_free(error_msg);
|
|
exit_nicely(db, NULL);
|
|
}
|
|
|
|
if (argc < 2) {
|
|
exit_nicely(db, "Incorrect amount of arguments");
|
|
}
|
|
|
|
if (strcmp(argv[1], "add") == 0) {
|
|
if (argc == 3) {
|
|
successful = add(db, argv[2]);
|
|
if (!successful) {
|
|
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 {
|
|
exit_nicely(db, "Invalid argument");
|
|
}
|
|
|
|
sqlite3_close(db);
|
|
return 0;
|
|
}
|