diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2020-07-30 01:57:26 +0200 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2020-07-30 01:57:26 +0200 |
commit | 8bdba8891071110fe3f04de81dbe375c9c1caa80 (patch) | |
tree | d29a9f4220e351a0f5dd5b4a028af9b76cc16203 /src/dxvk.c | |
download | polecat-8bdba8891071110fe3f04de81dbe375c9c1caa80.tar.gz polecat-8bdba8891071110fe3f04de81dbe375c9c1caa80.zip |
Initial commit0.1.0
Diffstat (limited to 'src/dxvk.c')
-rw-r--r-- | src/dxvk.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/dxvk.c b/src/dxvk.c new file mode 100644 index 0000000..32d7d69 --- /dev/null +++ b/src/dxvk.c @@ -0,0 +1,98 @@ +#include <stdio.h> +#include <string.h> +#include <json.h> +#include <libgen.h> + +#include "dxvk.h" +#include "net.h" +#include "common.h" + +const static struct Command dxvk_commands[] = { + { .name = "install", .func = dxvk_install, .description = "download and install a dxvk version" }, + { .name = "list", .func = dxvk_list, .description = "list available dxvk versions" }, + { .name = "help", .func = dxvk_help, .description = "shows this message" }, +}; + +int dxvk(int argc, char** argv) +{ + if (argc > 2) + { + for (int i = 0; i < ARRAY_LEN(dxvk_commands); ++i) + { + if (!strcmp(dxvk_commands[i].name, argv[2])) return dxvk_commands[i].func(argc, argv); + } + } + + return dxvk_help(argc, argv); +} + + +int dxvk_install(int argc, char** argv) +{ + if (argc == 4) + { + struct json_object* runner = fetchJSON(DXVK_API); + + if (runner) + { + + int choice = atoi(argv[3]); + + if (choice > json_object_array_length(runner) - 1 || choice < 0) + { + printf("`%i' is not a valid ID\n\nrun `polecat dxvk list' to get a valid ID", choice); + } + else + { + struct json_object* version = json_object_array_get_idx(runner, choice); + struct json_object* assets; + + json_object_object_get_ex(version, "assets", &assets); + version =json_object_array_get_idx(assets, 0); + + json_object_object_get_ex(version, "browser_download_url", &assets); + + char* name = basename((char*)json_object_get_string(assets)); + + printf("Downloading %s", json_object_get_string(assets)); + downloadFile(json_object_get_string(assets), name); + printf("\nDone\n"); + } + } + } + else + { + puts("Usage: polecat dxvk download <ID>\n\nIDs are obtained via `polecat dxvk list' "); + } + return 0; +} + +int dxvk_list(int argc, char** argv) +{ + struct json_object* runner = fetchJSON(DXVK_API); + + if (runner) + { + puts("Installable DXVK versions:"); + + for (size_t i = 0; i < json_object_array_length(runner); ++i) + { + struct json_object* version = json_object_array_get_idx(runner, i); + struct json_object* name; + + json_object_object_get_ex(version, "name", &name); + printf(" [%zu]\t%s\n", i, json_object_get_string(name)); + } + } + + return 0; +} + +int dxvk_help(int argc, char** argv) +{ + puts("usage: polecat dxvk <command>\n\nList of commands:"); + + print_help(dxvk_commands, ARRAY_LEN(dxvk_commands)); + + return 0; +}
\ No newline at end of file |