diff --git a/Userland/pape.cpp b/Userland/pape.cpp index 283a5222fb..0458d84c07 100644 --- a/Userland/pape.cpp +++ b/Userland/pape.cpp @@ -3,59 +3,17 @@ #include #include #include -#include #include #include #include +#include #include #include #include #include #include -static bool flag_show_all = false; -static int show_all(); -static int show_current(); -static int set_pape(const char*); - -static void usage() -{ - printf("usage: pape [-a] [name]\n"); -} - -int main(int argc, char** argv) -{ - GApplication app(argc, argv); - - int opt; - while ((opt = getopt(argc, argv, "a")) != -1) { - switch (opt) { - case 'a': - flag_show_all = true; - break; - default: - usage(); - return 0; - } - } - - if (flag_show_all) - return show_all(); - - if (argc == 1) { - show_current(); - return 0; - } - - if (optind >= argc) { - usage(); - return 0; - } - - return set_pape(argv[optind]); -} - -int show_all() +static int handle_show_all() { DIR* dirp = opendir("/res/wallpapers"); if (!dirp) { @@ -71,13 +29,13 @@ int show_all() return 0; } -int show_current() +static int handle_show_current() { printf("%s\n", GDesktop::the().wallpaper().characters()); return 0; } -int set_pape(const char* name) +static int handle_set_pape(const String& name) { StringBuilder builder; builder.append("/res/wallpapers/"); @@ -88,4 +46,31 @@ int set_pape(const char* name) return 1; } return 0; +}; + +int main(int argc, char** argv) +{ + GApplication app(argc, argv); + + AK::ArgsParser args_parser("pape"); + + args_parser.add_arg("a", "show all wallpapers"); + args_parser.add_arg("c", "show current wallpaper"); + args_parser.set_single_value("name"); + + AK::ArgsParserResult args = args_parser.parse(argc, (const char**)argv); + + if (args.is_present("a")) + return handle_show_all(); + else if (args.is_present("c")) + return handle_show_current(); + + Vector values = args.get_single_values(); + if (values.size() != 1) { + args_parser.print_usage(); + return 0; + } + + return handle_set_pape(values[0]); } +