2021-07-01 16:55:29 -04:00
|
|
|
package net.i2p.router;
|
|
|
|
|
|
|
|
import java.io.*;
|
|
|
|
import java.util.*;
|
2021-07-01 19:52:21 -04:00
|
|
|
import java.util.concurrent.TimeUnit;
|
2021-07-01 16:55:29 -04:00
|
|
|
|
|
|
|
import static net.i2p.update.UpdateType.*;
|
|
|
|
import net.i2p.update.UpdateType;
|
2021-07-01 19:52:21 -04:00
|
|
|
import net.i2p.update.UpdatePostProcessor;
|
2021-07-01 16:55:29 -04:00
|
|
|
import net.i2p.util.SystemVersion;
|
|
|
|
|
|
|
|
import java.lang.ProcessBuilder;
|
|
|
|
import java.lang.Process;
|
|
|
|
import java.lang.InterruptedException;
|
|
|
|
|
2021-07-01 19:52:21 -04:00
|
|
|
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
2021-07-13 21:49:02 -04:00
|
|
|
private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(WindowsUpdatePostProcessor.class);
|
2021-07-01 19:52:21 -04:00
|
|
|
protected Router i2pRouter = null;
|
2021-07-13 21:49:02 -04:00
|
|
|
|
2021-07-01 16:55:29 -04:00
|
|
|
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file) throws IOException {
|
|
|
|
if (fileType == 6) {
|
2021-07-13 21:49:02 -04:00
|
|
|
newFile = moveUpdateInstaller(file);
|
|
|
|
runUpdateInstaller(newFile);
|
2021-07-01 16:55:29 -04:00
|
|
|
}
|
|
|
|
}
|
2021-07-01 18:20:16 -04:00
|
|
|
|
2021-07-13 21:49:02 -04:00
|
|
|
private File moveUpdateInstaller(File file){
|
|
|
|
RouterContext i2pContext = i2prouter.getRouterContext();
|
|
|
|
if (i2pContext != null) {
|
|
|
|
File appDir = i2pContext.getAppDir();
|
|
|
|
File newFile = new File(i2pContext.getAppDir().getAbsolutePath(), file.Name());
|
|
|
|
file.renameTo(newFile);
|
|
|
|
return newFile;
|
2021-07-01 16:55:29 -04:00
|
|
|
}
|
2021-07-13 21:49:02 -04:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void runUpdateInstaller(File file){
|
|
|
|
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", file.getAbsolutePath(), "/S");
|
|
|
|
try {
|
|
|
|
pb.start();
|
|
|
|
} catch (IOException ex) {
|
|
|
|
if (_log.shouldWarn())
|
|
|
|
_log.warn("Unable to loop update-program in background. Update will fail." + xi2plocation);
|
2021-07-01 16:55:29 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-01 19:52:21 -04:00
|
|
|
protected File selectProgramFile() {
|
2021-07-01 16:55:29 -04:00
|
|
|
if (SystemVersion.isWindows()) {
|
|
|
|
File jrehome = new File(System.getProperty("java.home"));
|
|
|
|
File programs = jrehome.getParentFile();
|
|
|
|
return programs.getAbsoluteFile();
|
|
|
|
} else {
|
|
|
|
File jrehome = new File(System.getProperty("java.home"));
|
|
|
|
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
|
|
|
return programs.getAbsoluteFile();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-01 19:52:21 -04:00
|
|
|
protected File selectProgramFileExe() {
|
2021-07-03 22:39:54 -04:00
|
|
|
File pfpath = selectProgramFile();
|
2021-07-01 18:20:16 -04:00
|
|
|
if (SystemVersion.isWindows()) {
|
|
|
|
File app = new File(pfpath, "I2P.exe");
|
|
|
|
return app.getAbsoluteFile();
|
|
|
|
} else {
|
|
|
|
File app = new File(pfpath, "bin/I2P");
|
|
|
|
return app.getAbsoluteFile();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-01 16:55:29 -04:00
|
|
|
}
|