#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(void) { fprintf(stderr, "usage: automedia COMMAND\n"); fprintf(stderr, "\n"); fprintf(stderr, "COMMANDS\n"); fprintf(stderr, " add Add media to track\n"); fprintf(stderr, " sync Start syncing tracked media\n"); fprintf(stderr, " downloaded List downloaded media\n"); exit(1); } 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"); fprintf(stderr, " url The url to the rss or html\n"); fprintf(stderr, " filename The filename of an episode of an existing serie to start track. Currently only works with rss on https://nyaa.si\n"); 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 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(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 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 < 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); const char *args[] = { "curl", "-s", "-L", "-f", "https://google.com", NULL }; program_exec(args, program_buffer_write_callback, &buffer); printf("program output: %.*s\n", (int)buffer.size, (char*)buffer.data); buffer_deinit(&buffer); */ return 0; }