diff options
-rw-r--r-- | src/html.c | 12 | ||||
-rw-r--r-- | src/html.h | 4 | ||||
-rw-r--r-- | src/main.c | 38 |
3 files changed, 40 insertions, 14 deletions
@@ -382,7 +382,7 @@ static int int_min(int a, int b) { return a < b ? a : b; } -static int download_html_items_in_reverse(const char *plugin_filepath, Buffer *download_items_buffer, TrackedHtml *tracked_html, char *html_tracked_dir, const char *download_dir) { +static int download_html_items_in_reverse(const char *plugin_filepath, Buffer *download_items_buffer, TrackedHtml *tracked_html, char *html_tracked_dir, const char *download_dir, bool show_error_notifications) { const char *home_dir = get_home_dir(); char download_finished_script[PATH_MAX]; @@ -426,8 +426,10 @@ static int download_html_items_in_reverse(const char *plugin_filepath, Buffer *d if(result != 0) fprintf(stderr, "Failed while downloading html, url: %s\n", download_items_it->link); - const char *notify_args[] = { "notify-send", "-a", "automedia", "-u", result == 0 ? "low" : "critical", "-t", "5000", "--", result == 0 ? "Download finished" : "Download failed", notify_msg, NULL }; - program_exec(notify_args, NULL, NULL); + if(result == 0 || show_error_notifications) { + const char *notify_args[] = { "notify-send", "-a", "automedia", "-u", result == 0 ? "low" : "critical", "-t", "5000", "--", result == 0 ? "Download finished" : "Download failed", notify_msg, NULL }; + program_exec(notify_args, NULL, NULL); + } if(result != 0) break; @@ -455,7 +457,7 @@ static int download_html_items_in_reverse(const char *plugin_filepath, Buffer *d } /* TODO: Make asynchronous. Right now this will only complete when the whole chapter download completes */ -int sync_html(TrackedHtml *tracked_html, char *program_dir, const char *download_dir, char *html_config_dir) { +int sync_html(TrackedHtml *tracked_html, char *program_dir, const char *download_dir, char *html_config_dir, bool show_error_notifications) { /* TODO: This can be cached */ int html_config_dir_len = strlen(html_config_dir); @@ -486,7 +488,7 @@ int sync_html(TrackedHtml *tracked_html, char *program_dir, const char *download char *html_tracked_dir = html_config_dir; strcat(html_tracked_dir, "/tracked/"); - result = download_html_items_in_reverse(plugin_filepath, &download_items_buffer, tracked_html, html_tracked_dir, download_dir); + result = download_html_items_in_reverse(plugin_filepath, &download_items_buffer, tracked_html, html_tracked_dir, download_dir, show_error_notifications); if(result != 0) { fprintf(stderr, "Failed while download html item for url: %s\n", tracked_html->link); goto cleanup; @@ -1,6 +1,8 @@ #ifndef HTML_H #define HTML_H +#include <stdbool.h> + typedef struct cJSON cJSON; typedef struct fallback fallback; @@ -13,6 +15,6 @@ typedef struct { /* Modifies @html_config_dir */ int add_html(const char *name, const char *url, char *html_config_dir, char *program_dir, const char *start_after); -int sync_html(TrackedHtml *tracked_html, char *program_dir, const char *download_dir, char *html_config_dir); +int sync_html(TrackedHtml *tracked_html, char *program_dir, const char *download_dir, char *html_config_dir, bool show_error_notifications); #endif @@ -60,9 +60,10 @@ static void usage_add(void) { } static void usage_sync(void) { - fprintf(stderr, "usage: automedia sync <download_dir>\n"); + fprintf(stderr, "usage: automedia sync [--no-error-notification] <download_dir>\n"); fprintf(stderr, "OPTIONS\n"); - fprintf(stderr, " download_dir The path where media should be downloaded to\n"); + fprintf(stderr, " --no-error-notification Disable error notifications\n"); + fprintf(stderr, " download_dir The path where media should be downloaded to\n"); fprintf(stderr, "EXAMPLES\n"); fprintf(stderr, " automedia sync /home/user/Downloads/automedia\n"); exit(1); @@ -466,6 +467,7 @@ static int iterate_tracked_item_rss_callback(char *title, char *link, char *plug typedef struct { char *program_dir; const char *download_dir; + bool show_error_notifications; } IterateHtmlItemUserdata; static int iterate_tracked_item_html_callback(char *title, char *link, char *plugin, char *config_dir, cJSON *json_data, fallback *fall, void *userdata) { @@ -481,17 +483,18 @@ static int iterate_tracked_item_html_callback(char *title, char *link, char *plu tracked_html.title = title; tracked_html.link = link; tracked_html.json_data = json_data; - return sync_html(&tracked_html, iterate_html_item_userdata->program_dir, iterate_html_item_userdata->download_dir, config_dir); + return sync_html(&tracked_html, iterate_html_item_userdata->program_dir, iterate_html_item_userdata->download_dir, config_dir, iterate_html_item_userdata->show_error_notifications); } static void sync_tracked_rss(TransmissionSession *transmission_session, char *rss_config_dir, fallback *fall) { iterate_tracked_items(rss_config_dir, iterate_tracked_item_rss_callback, fall, transmission_session); } -static void sync_tracked_html(char *html_config_dir, char *program_dir, const char *download_dir) { +static void sync_tracked_html(char *html_config_dir, char *program_dir, const char *download_dir, bool show_error_notifications) { IterateHtmlItemUserdata iterate_html_item_userdata; iterate_html_item_userdata.program_dir = program_dir; iterate_html_item_userdata.download_dir = download_dir; + iterate_html_item_userdata.show_error_notifications = show_error_notifications; iterate_tracked_items(html_config_dir, iterate_tracked_item_html_callback, NULL, &iterate_html_item_userdata); } @@ -543,7 +546,7 @@ static void torrent_list_check_new_downloads_callback(int id, const char *name, } } -static void sync_rss_html(char *rss_config_dir, char *html_config_dir, char *program_dir, const char *download_dir, int sync_rate_sec, fallback *fall) { +static void sync_rss_html(char *rss_config_dir, char *html_config_dir, char *program_dir, const char *download_dir, int sync_rate_sec, fallback *fall, bool show_error_notifications) { if(transmission_is_daemon_running() != 0) { if(transmission_start_daemon(download_dir) != 0) { fprintf(stderr, "Failed to start torrent daemon\n"); @@ -571,7 +574,7 @@ static void sync_rss_html(char *rss_config_dir, char *html_config_dir, char *pro /* running is set to 0 in SIGINT signal handler (ctrl+c) */ while(automedia_running) { sync_tracked_rss(&transmission_session, rss_config_dir, fall); - sync_tracked_html(html_config_dir, program_dir, download_dir); + sync_tracked_html(html_config_dir, program_dir, download_dir, show_error_notifications); fprintf(stderr, "Finished syncing rss and html. Syncing again in %d minutes\n", sync_rate_sec / 60); int check_count = 0; @@ -632,7 +635,26 @@ static void command_sync(int argc, char **argv, char *rss_config_dir, char *html if(argc < 1) usage_sync(); - char *download_dir = argv[0]; + char *download_dir = NULL; + bool show_error_notifications = true; + for(int i = 0; i < argc; ++i) { + if(strncmp(argv[i], "--", 2) == 0) { + if(strcmp(argv[i], "--no-error-notification") == 0) { + show_error_notifications = false; + } else { + fprintf(stderr, "Error: invalid option to sync '%s'\n", argv[i]); + usage_sync(); + } + } else { + download_dir = argv[i]; + } + } + + if(!download_dir) { + fprintf(stderr, "Error: download_dir option not specified to sync command\n"); + usage_sync(); + } + const char automedia_pid_path[] = "/tmp/automedia.pid"; if(create_directory_recursive(download_dir) != 0) { @@ -695,7 +717,7 @@ static void command_sync(int argc, char **argv, char *rss_config_dir, char *html close(pid_file); const int sync_rate_sec = 15 * 60; /* every 15 min */ - sync_rss_html(rss_config_dir, html_config_dir, program_dir, download_dir, sync_rate_sec, &fall); + sync_rss_html(rss_config_dir, html_config_dir, program_dir, download_dir, sync_rate_sec, &fall, show_error_notifications); unlink(automedia_pid_path); fallback_deinit(&fall); } |