Explorar el Código

Userland: Use Core::ArgsParser for 'avol'

Linus Groh hace 4 años
padre
commit
8f33a44b6c
Se han modificado 1 ficheros con 28 adiciones y 15 borrados
  1. 28 15
      Userland/avol.cpp

+ 28 - 15
Userland/avol.cpp

@@ -26,6 +26,7 @@
 
 #include <LibAudio/Buffer.h>
 #include <LibAudio/ClientConnection.h>
+#include <LibCore/ArgsParser.h>
 #include <LibCore/EventLoop.h>
 #include <stdio.h>
 
@@ -35,23 +36,35 @@ int main(int argc, char** argv)
     auto audio_client = Audio::ClientConnection::construct();
     audio_client->handshake();
 
-    if (argc > 1) {
-        if (String(argv[1]) == "-m") {
-            audio_client->set_muted(true);
-            printf("Muted.\n");
-            return 0;
-        }
-        if (String(argv[1]) == "-M") {
-            audio_client->set_muted(false);
-            printf("Unmuted.\n");
-            return 0;
-        }
+    bool mute = false;
+    bool unmute = false;
+    // FIXME: What is a good way to have an optional int argument?
+    const char* volume = nullptr;
 
-        int new_volume = atoi(argv[1]);
+    Core::ArgsParser args_parser;
+    args_parser.add_option(mute, "Mute volume", "mute", 'm');
+    args_parser.add_option(unmute, "Unmute volume", "unmute", 'M');
+    args_parser.add_positional_argument(volume, "Volume to set", "volume", Core::ArgsParser::Required::No);
+    args_parser.parse(argc, argv);
+
+    if (!mute && !unmute && !volume) {
+        auto volume = audio_client->get_main_mix_volume();
+        printf("Volume: %d\n", volume);
+        return 0;
+    }
+    if (!(mute ^ unmute ^ (volume != nullptr))) {
+        fprintf(stderr, "Only one of mute, unmute or volume must be used\n");
+        return 1;
+    }
+    if (mute) {
+        audio_client->set_muted(true);
+        printf("Muted.\n");
+    } else if (unmute) {
+        audio_client->set_muted(false);
+        printf("Unmuted.\n");
+    } else {
+        auto new_volume = atoi(volume);
         audio_client->set_main_mix_volume(new_volume);
     }
-
-    int volume = audio_client->get_main_mix_volume();
-    printf("Volume: %d\n", volume);
     return 0;
 }