Skip to content

Commit 42e5f67

Browse files
committed
Add a new launcher cli option to select the version to launch and move the release channel into a distinct option.
1 parent eefc0f7 commit 42e5f67

2 files changed

Lines changed: 75 additions & 15 deletions

File tree

launcher/src/se/llbit/chunky/launcher/ChunkyLauncher.java

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.net.*;
3333
import java.nio.channels.Channels;
3434
import java.nio.channels.ReadableByteChannel;
35+
import java.util.List;
3536
import java.util.Scanner;
3637
import java.util.concurrent.CountDownLatch;
3738
import java.util.concurrent.atomic.AtomicReference;
@@ -89,9 +90,30 @@ public static Options cliOptionsPublic() {
8990

9091
options.addOption(Option.builder()
9192
.longOpt("update")
93+
.desc("Update Chunky to the latest release")
94+
.build()
95+
);
96+
97+
options.addOption(Option.builder()
98+
.longOpt("releaseChannel")
9299
.argName("release channel")
93100
.optionalArg(true)
94-
.desc("Update Chunky to the latest release")
101+
.desc("Specify the release channel (for use with --update and --chunkyVersion latest)")
102+
.build()
103+
);
104+
105+
options.addOption(Option.builder()
106+
.longOpt("updateSite")
107+
.argName("update site")
108+
.desc("Update site to use for updating")
109+
.build()
110+
);
111+
112+
options.addOption(Option.builder()
113+
.longOpt("chunkyVersion")
114+
.argName("chunky version")
115+
.numberOfArgs(1)
116+
.desc("Chunky version to launch (latest for the latest installed version of the specified release channel)")
95117
.build()
96118
);
97119

@@ -197,15 +219,21 @@ public static void main(String[] args) throws FileNotFoundException {
197219
settings.forceGuiConsole = true;
198220
}
199221

200-
if (cmd.hasOption("update")) {
201-
ReleaseChannel channel = settings.selectedChannel;
222+
if (cmd.hasOption("updateSite")) {
223+
settings.updateSite = cmd.getOptionValue("updateSite");
224+
reloadReleaseChannels(settings);
225+
return;
226+
}
202227

203-
String selected = cmd.getOptionValue("update");
228+
if (cmd.hasOption("releaseChannel")) {
229+
String selected = cmd.getOptionValue("releaseChannel");
204230
if (selected != null) {
205-
channel = settings.releaseChannels.getOrDefault(selected, channel);
231+
settings.selectedChannel = settings.releaseChannels.getOrDefault(selected, settings.selectedChannel);
206232
}
233+
}
207234

208-
headlessUpdateChunky(settings, channel);
235+
if (cmd.hasOption("update")) {
236+
headlessUpdateChunky(settings, settings.selectedChannel);
209237
return;
210238
}
211239

@@ -245,6 +273,14 @@ public static void main(String[] args) throws FileNotFoundException {
245273
LauncherSettings.disableLibraryValidation = true;
246274
}
247275

276+
if (cmd.hasOption("chunkyVersion")) {
277+
settings.version = cmd.getOptionValue("chunkyVersion");
278+
if ("latest".equals(cmd.getOptionValue("chunkyVersion"))) {
279+
List<VersionInfo> versions = new UpdateChecker(settings, settings.selectedChannel).getVersions();
280+
settings.version = versions.stream().findAny().map(version -> version.name).orElse(settings.version);
281+
}
282+
}
283+
248284
headlessOptions = String.join(" ", cmd.getArgList());
249285

250286
if (forceLauncher) {
@@ -330,7 +366,7 @@ public static void main(String[] args) throws FileNotFoundException {
330366
}
331367
e.printStackTrace(System.err);
332368
} catch (ParseException e) {
333-
System.out.println(e.getMessage());
369+
System.out.println(e.getMessage());
334370
}
335371
}
336372

launcher/src/se/llbit/chunky/launcher/UpdateChecker.java

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,19 @@
1717
*/
1818
package se.llbit.chunky.launcher;
1919

20+
import se.llbit.json.JsonParser;
21+
import se.llbit.json.JsonParser.SyntaxError;
22+
2023
import java.io.IOException;
2124
import java.io.InputStream;
2225
import java.net.HttpURLConnection;
2326
import java.net.MalformedURLException;
2427
import java.net.URL;
28+
import java.util.Collections;
2529
import java.util.Iterator;
2630
import java.util.LinkedList;
2731
import java.util.List;
2832

29-
import se.llbit.json.JsonParser;
30-
import se.llbit.json.JsonParser.SyntaxError;
31-
3233
/**
3334
* Check for update and run update dialog (or just update in headless mode).
3435
*
@@ -37,12 +38,31 @@
3738
public class UpdateChecker extends Thread {
3839
private final LauncherSettings settings;
3940
private final UpdateListener listener;
40-
private final String path;
41+
private final ReleaseChannel channel;
4142

4243
public UpdateChecker(LauncherSettings settings, ReleaseChannel channel, UpdateListener listener) {
4344
this.settings = settings;
4445
this.listener = listener;
45-
this.path = channel.path;
46+
this.channel = channel;
47+
}
48+
49+
public UpdateChecker(LauncherSettings settings, ReleaseChannel channel) {
50+
this(settings, channel, new UpdateListener() {
51+
@Override
52+
public void updateError(String message) {
53+
// ignore
54+
}
55+
56+
@Override
57+
public void updateAvailable(VersionInfo latest) {
58+
// ignore
59+
}
60+
61+
@Override
62+
public void noUpdateAvailable() {
63+
// ignore
64+
}
65+
});
4666
}
4767

4868
@Override
@@ -58,9 +78,7 @@ public void run() {
5878
}
5979

6080
private boolean tryUpdate() {
61-
List<VersionInfo> candidates = new LinkedList<>();
62-
63-
getVersion(candidates, settings.getResourceUrl(path));
81+
List<VersionInfo> candidates = getVersions();
6482

6583
// Filter out corrupt versions.
6684
Iterator<VersionInfo> iter = candidates.iterator();
@@ -98,6 +116,12 @@ private boolean tryUpdate() {
98116
return true;
99117
}
100118

119+
public List<VersionInfo> getVersions() {
120+
List<VersionInfo> candidates = new LinkedList<>();
121+
getVersion(candidates, settings.getResourceUrl(channel.path));
122+
return Collections.unmodifiableList(candidates);
123+
}
124+
101125
private void getVersion(List<VersionInfo> candidates, String url) {
102126
try {
103127
URL latestJson = new URL(url);

0 commit comments

Comments
 (0)