From e9ff36f9985e669317043f80b8edf5d17d4c0c3e Mon Sep 17 00:00:00 2001
From: dec05eba <dec05eba@protonmail.com>
Date: Wed, 19 Mar 2025 22:07:09 +0100
Subject: Add option to not show error notification

---
 src/main.c | 38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

(limited to 'src/main.c')

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);
 }
-- 
cgit v1.2.3-70-g09d2