aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-07-12 22:35:49 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-12 22:35:49 +0200
commitc6dc4cd4ea7433dfd560732574f73d4bfea400f3 (patch)
tree3372df39803b2cb95d09b4f7ba02f47986944d82
parentdfad8a8016426d7fe198dc32973b01a1e075142e (diff)
Starting on 'downloaded' command
-rwxr-xr-xbuild.sh2
-rw-r--r--fileutils.c14
-rw-r--r--fileutils.h6
-rw-r--r--main.c94
4 files changed, 103 insertions, 13 deletions
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 <stdlib.h>
+#include <pwd.h>
+#include <unistd.h>
+
+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 <stdio.h>
-#include <stdlib.h>
#include "program.h"
#include "buffer.h"
+#include "fileutils.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include <dirent.h>
+/*
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 <type> <url|filename> [--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 <download_dir>\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;
}