From c6dc4cd4ea7433dfd560732574f73d4bfea400f3 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 12 Jul 2020 22:35:49 +0200 Subject: Starting on 'downloaded' command --- build.sh | 2 +- fileutils.c | 14 +++++++++ fileutils.h | 6 ++++ main.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 fileutils.c create mode 100644 fileutils.h diff --git a/build.sh b/build.sh index 575c08b..87ccc41 100755 --- a/build.sh +++ b/build.sh @@ -5,4 +5,4 @@ CFLAGS="-O0 -g3 -Wall -Wextra -Werror" #LIBS="-lcurl" LIBS="" #gcc -musl-gcc -static main.c program.c alloc.c buffer.c -o automedia $CFLAGS $LIBS +musl-gcc -static main.c program.c alloc.c buffer.c fileutils.c -o automedia $CFLAGS $LIBS diff --git a/fileutils.c b/fileutils.c new file mode 100644 index 0000000..233138c --- /dev/null +++ b/fileutils.c @@ -0,0 +1,14 @@ +#include "fileutils.h" + +#include +#include +#include + +const char* get_home_dir() { + const char *home_dir = getenv("HOME"); + if(!home_dir) { + struct passwd *pw = getpwuid(getuid()); + home_dir = pw->pw_dir; + } + return home_dir; +} diff --git a/fileutils.h b/fileutils.h new file mode 100644 index 0000000..9780392 --- /dev/null +++ b/fileutils.h @@ -0,0 +1,6 @@ +#ifndef FILEUTILS_H +#define FILEUTILS_H + +const char* get_home_dir(); + +#endif diff --git a/main.c b/main.c index 04c8f29..6655ed5 100644 --- a/main.c +++ b/main.c @@ -1,15 +1,22 @@ -#include -#include #include "program.h" #include "buffer.h" +#include "fileutils.h" + +#include +#include +#include +#include + +#include +/* static int program_buffer_write_callback(char *data, int size, void *userdata) { Buffer *buffer = userdata; buffer_append(buffer, data, size); return 0; } - -static void usage() { +*/ +static void usage(void) { fprintf(stderr, "usage: automedia COMMAND\n"); fprintf(stderr, "\n"); fprintf(stderr, "COMMANDS\n"); @@ -19,7 +26,7 @@ static void usage() { exit(1); } -static void usage_add() { +static void usage_add(void) { fprintf(stderr, "usage: automedia add [--name name] [--start-after start_after]\n"); fprintf(stderr, "OPTIONS\n"); fprintf(stderr, " type The type should be either rss or html\n"); @@ -28,25 +35,88 @@ static void usage_add() { fprintf(stderr, " --name The display name to be used for the media. Optional for rss, in which case the name will be retries from rss TITLE, required for html\n"); fprintf(stderr, " --start-after The sync should start downloading media after this item. This --start-after value should be the title of the episode/chapter (Optional, default is to start from the first item)\n"); fprintf(stderr, "EXAMPLES\n"); - fprintf(stderr, " automedia.py add rss 'https://nyaa.si/?page=rss&q=Tejina-senpai+1080p&c=0_0&f=0&u=HorribleSubs'\n"); - fprintf(stderr, " automedia.py add html 'https://manganelo.com/manga/read_naruto_manga_online_free3' --name Naruto\n"); - fprintf(stderr, " automedia.py add rss '[Erai-raws] Saiki Kusuo no Psi Nan - Kanketsu-hen - 01 [1080p][Multiple Subtitle].mkv'\n"); + fprintf(stderr, " automedia add rss 'https://nyaa.si/?page=rss&q=Tejina-senpai+1080p&c=0_0&f=0&u=HorribleSubs'\n"); + fprintf(stderr, " automedia add html 'https://manganelo.com/manga/read_naruto_manga_online_free3' --name Naruto\n"); + fprintf(stderr, " automedia add rss '[Erai-raws] Saiki Kusuo no Psi Nan - Kanketsu-hen - 01 [1080p][Multiple Subtitle].mkv'\n"); exit(1); } -static void usage_sync() { +static void usage_sync(void) { fprintf(stderr, "usage: automedia sync \n"); fprintf(stderr, "OPTIONS\n"); fprintf(stderr, " download_dir The path where media should be downloaded to\n"); fprintf(stderr, "EXAMPLES\n"); - fprintf(stderr, " automedia.py sync /home/adam/Downloads/automedia\n"); + fprintf(stderr, " automedia sync /home/adam/Downloads/automedia\n"); exit(1); } +static void get_downloaded_items(const char *tracked_dir) { + struct dirent *dir; + DIR *d = opendir(tracked_dir); + if(!d) + return; + + char data_filepath[PATH_MAX] = {0}; + strcat(data_filepath, tracked_dir); + strcat(data_filepath, "/"); + int data_filepath_length = strlen(data_filepath); + + while((dir = readdir(d)) != NULL) { + /* We dont want hidden files (and . ..) */ + if(dir->d_name[0] == '.') + continue; + + strcpy(data_filepath + data_filepath_length, dir->d_name); + strcpy(data_filepath + data_filepath_length + strlen(dir->d_name), "/data"); + puts(data_filepath); + } + + closedir(d); +} + +static void command_downloaded(const char *rss_config_dir, const char *html_config_dir) { + char rss_tracked_dir[PATH_MAX] = {0}; + strcat(rss_tracked_dir, rss_config_dir); + strcat(rss_tracked_dir, "/tracked"); + + char html_tracked_dir[PATH_MAX] = {0}; + strcat(html_tracked_dir, html_config_dir); + strcat(html_tracked_dir, "/tracked"); + + printf("files in %s: \n", rss_tracked_dir); + get_downloaded_items(rss_tracked_dir); + + printf("files in %s: \n", html_tracked_dir); + get_downloaded_items(html_tracked_dir); +} + int main(int argc, char **argv) { - if(argc < 3) + if(argc < 2) usage(); + const char *home_dir = get_home_dir(); + + char rss_config_dir[PATH_MAX] = {0}; + strcat(rss_config_dir, home_dir); + strcat(rss_config_dir, "/.config/automedia/rss"); + + char html_config_dir[PATH_MAX] = {0}; + strcat(html_config_dir, home_dir); + strcat(html_config_dir, "/.config/automedia/html"); + + const char *command = argv[1]; + if(strcmp(command, "add") == 0) { + usage_add(); + } else if(strcmp(command, "sync") == 0) { + usage_sync(); + } else if(strcmp(command, "downloaded") == 0) { + command_downloaded(rss_config_dir, html_config_dir); + } else { + fprintf(stderr, "Error: Invalid command %s\n", command); + usage(); + } + +/* Buffer buffer; buffer_init(&buffer); @@ -55,6 +125,6 @@ int main(int argc, char **argv) { printf("program output: %.*s\n", (int)buffer.size, (char*)buffer.data); buffer_deinit(&buffer); - +*/ return 0; } -- cgit v1.2.3