aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/html.c12
-rw-r--r--src/html.h4
-rw-r--r--src/main.c38
3 files changed, 40 insertions, 14 deletions
diff --git a/src/html.c b/src/html.c
index a0a5e73..40cc1eb 100644
--- a/src/html.c
+++ b/src/html.c
@@ -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;
diff --git a/src/html.h b/src/html.h
index 5ce2809..bfa8e08 100644
--- a/src/html.h
+++ b/src/html.h
@@ -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
diff --git a/src/main.c b/src/main.c
index 8e743eb..16cc482 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
}