about summary refs log tree commit diff
path: root/cli/start.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli/start.c')
-rw-r--r--cli/start.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/cli/start.c b/cli/start.c
index e3a3684..2bd55ad 100644
--- a/cli/start.c
+++ b/cli/start.c
@@ -12,6 +12,10 @@ usage_start(void)
         "torrent ...\n"
         "\tThe torrents to activate.\n"
         "\n"
+        "Options:\n"
+        "-a\n"
+        "\tActivate all inactive torrents.\n"
+        "\n"
         );
     exit(1);
 }
@@ -24,19 +28,32 @@ static struct option start_opts [] = {
 void
 cmd_start(int argc, char **argv)
 {
-    int ch;
+    int ch, all = 0;
     struct ipc_torrent t;
 
-    while ((ch = getopt_long(argc, argv, "", start_opts, NULL)) != -1)
-        usage_start();
+    while ((ch = getopt_long(argc, argv, "a", start_opts, NULL)) != -1) {
+        switch (ch) {
+        case 'a':
+            all = 1;
+            break;
+        default:
+            usage_start();
+        }
+    }
     argc -= optind;
     argv += optind;
 
-    if (argc < 1)
+    if ((argc == 0 && !all) || (all && argc != 0))
         usage_start();
 
     btpd_connect();
-    for (int i = 0; i < argc; i++)
-        if (torrent_spec(argv[i], &t))
-            handle_ipc_res(btpd_start(ipc, &t), "start", argv[i]);
+    if (all) {
+        enum ipc_err code = btpd_start_all(ipc);
+        if (code != IPC_OK)
+            diemsg("command failed (%s).\n", ipc_strerror(code));
+    } else {
+       for (int i = 0; i < argc; i++)
+           if (torrent_spec(argv[i], &t))
+               handle_ipc_res(btpd_start(ipc, &t), "start", argv[i]);
+    }
 }