diff options
Diffstat (limited to 'src/wine.c')
-rw-r--r-- | src/wine.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/wine.c b/src/wine.c new file mode 100644 index 0000000..2c304ed --- /dev/null +++ b/src/wine.c @@ -0,0 +1,97 @@ +#include <stdio.h> +#include <string.h> +#include <json.h> +#include <libgen.h> + +#include "wine.h" +#include "net.h" +#include "common.h" + +const static struct Command wine_commands[] = { + { .name = "install", .func = wine_install, .description = "download and install a wine version from lutris" }, + { .name = "list", .func = wine_list, .description = "list available wine versions" }, + { .name = "help", .func = wine_help, .description = "shows this message" }, +}; + +int wine(int argc, char** argv) +{ + if (argc > 2) + { + for (int i = 0; i < ARRAY_LEN(wine_commands); ++i) + { + if (!strcmp(wine_commands[i].name, argv[2])) return wine_commands[i].func(argc, argv); + } + } + + return wine_help(argc, argv); +} + + +int wine_install(int argc, char** argv) +{ + if (argc == 4) + { + struct json_object* runner = fetchJSON(WINE_API); + + if (runner) + { + struct json_object* versions; + json_object_object_get_ex(runner, "versions", &versions); + + int choice = atoi(argv[3]); + + if (choice > json_object_array_length(versions) - 1 || choice < 0) + { + printf("`%i' is not a valid ID\n\nrun `polecat wine list' to get a valid ID", choice); + } + else + { + struct json_object* url; + struct json_object* value = json_object_array_get_idx(versions, choice); + + json_object_object_get_ex(value, "url", &url); + char* name = basename((char*)json_object_get_string(url)); + + printf("Downloading %s", name); + downloadFile(json_object_get_string(url), name); + printf("\nDone\n"); + } + } + } + else + { + puts("Usage: polecat wine download <ID>\n\nIDs are obtained via `polecat wine list' "); + } + return 0; +} + +int wine_list(int argc, char** argv) +{ + struct json_object* runner = fetchJSON(WINE_API); + + if (runner) + { + struct json_object* versions, *value, *val; + json_object_object_get_ex(runner, "versions", &versions); + + puts("Installable wine versions:"); + + for (size_t i = 0; i < json_object_array_length(versions); ++i) + { + value = json_object_array_get_idx(versions, i); + json_object_object_get_ex(value, "version", &val); + printf(" [%zu]\t%s\n", i, json_object_get_string(val)); + } + } + + return 0; +} + +int wine_help(int argc, char** argv) +{ + puts("usage: polecat wine <command>\n\nList of commands:"); + + print_help(wine_commands, ARRAY_LEN(wine_commands)); + + return 0; +}
\ No newline at end of file |