use a supplier to get the file path when starting the WinUpdateProcess, fix logging issues
This commit is contained in:
@ -8,15 +8,14 @@ import java.io.*;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
class WinUpdateProcess implements Runnable {
|
||||
private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(WinUpdateProcess.class);
|
||||
private final RouterContext ctx;
|
||||
private final Supplier<String> versionSupplier;
|
||||
private final File file;
|
||||
private final Supplier<File> fileSupplier;
|
||||
|
||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, File file) {
|
||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
|
||||
this.ctx = ctx;
|
||||
this.versionSupplier = versionSupplier;
|
||||
this.file = file;
|
||||
this.fileSupplier = fileSupplier;
|
||||
}
|
||||
|
||||
private File workDir() throws IOException{
|
||||
@ -34,8 +33,11 @@ class WinUpdateProcess implements Runnable {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void runUpdateInstaller(File file) throws IOException {
|
||||
private void runUpdateInstaller() throws IOException {
|
||||
String version = versionSupplier.get();
|
||||
File file = fileSupplier.get();
|
||||
if (file == null)
|
||||
return;
|
||||
|
||||
var workingDir = workDir();
|
||||
var logFile = new File(workingDir, "log-" + version + ".txt");
|
||||
@ -55,17 +57,16 @@ class WinUpdateProcess implements Runnable {
|
||||
redirectOutput(logFile).
|
||||
start();
|
||||
} catch (IOException ex) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Unable to run update-program in background. Update will fail.");
|
||||
System.out.println("Unable to run update-program in background. Update will fail.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
runUpdateInstaller(file);
|
||||
runUpdateInstaller();
|
||||
} catch(IOException ioe) {
|
||||
_log.error("Error running updater, update may fail.", ioe);
|
||||
System.out.println("Error running updater, update may fail." + ioe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
protected static Router i2pRouter = null;
|
||||
private final AtomicBoolean hook = new AtomicBoolean();
|
||||
private volatile String version;
|
||||
private volatile File positionedFile = null;
|
||||
WindowsUpdatePostProcessor() {
|
||||
this.ctx = null;
|
||||
}
|
||||
@ -36,6 +37,10 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public File getFile() {
|
||||
return positionedFile;
|
||||
}
|
||||
|
||||
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file) throws IOException {
|
||||
_log.info("Got an update to post-process");
|
||||
@ -49,9 +54,13 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
_log.warn("Unsupported file type " + fileType);
|
||||
return;
|
||||
}
|
||||
|
||||
File positionedFile = moveUpdateInstaller(file);
|
||||
|
||||
try {
|
||||
this.positionedFile = moveUpdateInstaller(file);
|
||||
} catch(IOException ioe) {
|
||||
_log.error("Error positioning update installer", ioe);
|
||||
return;
|
||||
}
|
||||
this.version = version;
|
||||
|
||||
if (!hook.compareAndSet(false,true)) {
|
||||
@ -60,11 +69,11 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
}
|
||||
|
||||
_log.info("adding shutdown hook");
|
||||
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, positionedFile));
|
||||
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||
|
||||
}
|
||||
|
||||
private File moveUpdateInstaller(File file) throws IOException{
|
||||
private File moveUpdateInstaller(File file) throws IOException {
|
||||
RouterContext i2pContext = i2pRouter.getContext();
|
||||
if (i2pContext != null) {
|
||||
File appDir = i2pContext.getConfigDir();
|
||||
@ -91,7 +100,6 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
protected File selectProgramFile() {
|
||||
if (SystemVersion.isWindows()) {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
@ -106,15 +114,4 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
protected File selectProgramFileExe() {
|
||||
File pfpath = selectProgramFile();
|
||||
if (SystemVersion.isWindows()) {
|
||||
File app = new File(pfpath, "I2P.exe");
|
||||
return app.getAbsoluteFile();
|
||||
} else {
|
||||
File app = new File(pfpath, "bin/I2P");
|
||||
return app.getAbsoluteFile();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user