1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include "command.h"
#include "commands.h"
#include "digest/digest.h"
#include "version.h"
#include "l2su.h"
#include "macros.h"
#include <jansson.h>
#include <stdio.h>
#include <unistd.h>
unsigned cmd_version_list_remote(struct l2_context_node *ctx, char **args)
{
unsigned res;
L2_UNUSED(ctx);
if (*args) {
CMD_FATAL(CMD_MSG_UNKNOWN_ARGUMENT, *args);
}
res = l2_version_load_remote();
if (res != VERSION_SUCCESS) {
CMD_FATAL("Failed to load versions: %s", l2_version_strerror(res));
}
for (struct l2_version_remote *rv = l2_state.ver_remote_head; rv; rv = rv->next) {
printf("%s\n", rv->id);
}
return CMD_RESULT_SUCCESS;
}
unsigned cmd_version_list_local(struct l2_context_node *ctx, char **args)
{
return CMD_RESULT_SUCCESS;
}
bool feat_match_cb(const char *name, json_t *js) {
L2_UNUSED(name);
L2_UNUSED(js);
return false;
}
int l2_assets__load_index(json_t *version, json_t **asset_index);
int l2_assets__download_assets(json_t *asset_index, char **path);
unsigned cmd_version_install(struct l2_context_node *ctx, char **args)
{
unsigned res = l2_version_load_remote();
char *jarpath = NULL;
if (res != VERSION_SUCCESS) {
CMD_FATAL("failed to load versions: %s", l2_version_strerror(res));
}
json_t *js;
res = l2_version_load_local(*args, &js);
if (res != VERSION_SUCCESS) {
CMD_FATAL("failed to load 1.8.9: %s", l2_version_strerror(res));
}
CMD_INFO0("Retrieving library list...");
struct l2_version_library *libs = NULL;
if ((res = l2_version_collect_libraries(js, &libs, &feat_match_cb)) != VERSION_SUCCESS) {
CMD_FATAL("Failed to collect library list: %s", l2_version_strerror(res));
}
CMD_INFO0("Downloading libraries...");
if ((res = l2_version_download_libraries(libs)) != VERSION_SUCCESS) {
CMD_FATAL("Failed to download libraries: %s", l2_version_strerror(res));
}
CMD_INFO0("Downloading client jar...");
if ((res = l2_version_download_jar(js, "client", &jarpath)) != VERSION_SUCCESS) {
CMD_FATAL("Failed to download client jar: %s", l2_version_strerror(res));
}
CMD_INFO0("Downloading asset index...");
json_t *assets = NULL;
if (l2_assets__load_index(js, &assets) < 0) {
CMD_FATAL0("Failed to load asset index.");
}
CMD_INFO0("Downloading assets...");
char *assetsbase = NULL;
if (l2_assets__download_assets(assets, &assetsbase) < 0) {
CMD_FATAL0("Failed to download assets.");
}
CMD_INFO("Assets base: %s", assetsbase);
free(assetsbase);
json_decref(assets);
l2_version_free_libraries(libs);
free(jarpath);
json_decref(js);
return CMD_RESULT_SUCCESS;
}
|