diff --git a/java_console/autoupdate/src/com/rusefi/autoupdate/Autoupdate.java b/java_console/autoupdate/src/com/rusefi/autoupdate/Autoupdate.java index f8eed2ba2d..212a54d543 100644 --- a/java_console/autoupdate/src/com/rusefi/autoupdate/Autoupdate.java +++ b/java_console/autoupdate/src/com/rusefi/autoupdate/Autoupdate.java @@ -70,7 +70,7 @@ public class Autoupdate { AutoupdateUtil.ConnectionAndMeta connectionAndMeta = new AutoupdateUtil.ConnectionAndMeta(zipFileName).invoke(); System.out.println("Server has " + connectionAndMeta.getCompleteFileSize() + " from " + new Date(connectionAndMeta.getLastModified())); - if (hasExistingFile(zipFileName, connectionAndMeta.getCompleteFileSize(), connectionAndMeta.getLastModified())) { + if (AutoupdateUtil.hasExistingFile(zipFileName, connectionAndMeta.getCompleteFileSize(), connectionAndMeta.getLastModified())) { System.out.println("We already have latest update " + new Date(connectionAndMeta.getLastModified())); return; } @@ -88,7 +88,7 @@ public class Autoupdate { System.out.println(bundleFullName + " " + completeFileSize + " bytes, last modified " + new Date(lastModified)); - AutoupdateUtil.downloadAutoupdateFile(zipFileName, httpConnection, completeFileSize, TITLE); + AutoupdateUtil.downloadAutoupdateFile(zipFileName, connectionAndMeta, TITLE); File file = new File(zipFileName); file.setLastModified(lastModified); @@ -180,12 +180,6 @@ public class Autoupdate { return doUpdate.get(); } - private static boolean hasExistingFile(String zipFileName, long completeFileSize, long lastModified) { - File file = new File(zipFileName); - System.out.println("We have " + file.length() + " " + new Date(file.lastModified())); - return file.length() == completeFileSize && file.lastModified() == lastModified; - } - public static String readBundleFullName() { try { BufferedReader r = new BufferedReader(new FileReader(BUNDLE_NAME_FILE)); diff --git a/java_console/autoupdate/src/com/rusefi/autoupdate/AutoupdateUtil.java b/java_console/autoupdate/src/com/rusefi/autoupdate/AutoupdateUtil.java index 6820a165aa..98da480d4d 100644 --- a/java_console/autoupdate/src/com/rusefi/autoupdate/AutoupdateUtil.java +++ b/java_console/autoupdate/src/com/rusefi/autoupdate/AutoupdateUtil.java @@ -10,6 +10,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.util.Date; import java.util.Objects; import java.util.concurrent.atomic.AtomicReference; @@ -19,7 +20,9 @@ public class AutoupdateUtil { private static final int BUFFER_SIZE = 32 * 1024; private static final int STEPS = 1000; - public static void downloadAutoupdateFile(String localZipFileName, HttpURLConnection httpConnection, long completeFileSize, String title) throws IOException { + public static void downloadAutoupdateFile(String localZipFileName, ConnectionAndMeta connectionAndMeta, String title) throws IOException { + HttpURLConnection httpConnection = connectionAndMeta.httpConnection; + long completeFileSize = connectionAndMeta.completeFileSize; Objects.requireNonNull(httpConnection, "httpConnection"); BufferedInputStream in = new BufferedInputStream(httpConnection.getInputStream()); FileOutputStream fos = new FileOutputStream(localZipFileName); @@ -62,6 +65,7 @@ public class AutoupdateUtil { } bout.close(); in.close(); + new File(localZipFileName).setLastModified(connectionAndMeta.lastModified); if (!runHeadless) { frameHelper.getFrame().dispose(); @@ -84,6 +88,12 @@ public class AutoupdateUtil { component.repaint(); } + public static boolean hasExistingFile(String zipFileName, long completeFileSize, long lastModified) { + File file = new File(zipFileName); + System.out.println("We have " + file.length() + " " + new Date(file.lastModified())); + return file.length() == completeFileSize && file.lastModified() == lastModified; + } + public static class ConnectionAndMeta { private String zipFileName; private HttpURLConnection httpConnection; diff --git a/java_tools/ts_plugin/build.xml b/java_tools/ts_plugin/build.xml index bb1fb56626..cc351ad1b0 100644 --- a/java_tools/ts_plugin/build.xml +++ b/java_tools/ts_plugin/build.xml @@ -49,6 +49,6 @@ - + \ No newline at end of file diff --git a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java index 8863017cbe..351dd85f47 100644 --- a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java @@ -25,6 +25,7 @@ import java.util.jar.Manifest; * TsPlugin launcher creates an instance of this class via reflection. */ public class PluginEntry implements TsPluginBody { + public static final String BUILT_DATE = "Built-Date"; private final AuthTokenPanel tokenPanel = new AuthTokenPanel(); private final JComponent content = new JPanel(); @@ -148,10 +149,16 @@ public class PluginEntry implements TsPluginBody { Manifest manifest = new Manifest(stream); Attributes attributes = manifest.getMainAttributes(); + System.out.println("Attributed " + attributes); + System.out.println("Attributed " + attributes.keySet()); + System.out.println("Attributed " + attributes.getValue("Class-Path")); + System.out.println("Attributed " + attributes.getValue("Main-Class")); - String result = attributes.getValue("Built-Date"); + String result = attributes.getValue(BUILT_DATE); + System.out.println(BUILT_DATE + " " + result); return result == null ? "Unknown version" : result; } catch (IOException e) { + e.printStackTrace(); return "Unknown version"; } } diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java index c652daae84..235c9cb21a 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java @@ -12,6 +12,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URLClassLoader; +import java.util.Date; import static com.rusefi.ts_plugin.TsPluginLauncher.VERSION; @@ -26,8 +27,11 @@ public class Updater { content.add(new JLabel("" + VERSION)); String version = null; - if (new File(LOCAL_JAR_FILE_NAME).exists()) { + long localJarTimestamp = 0; + File localFile = new File(LOCAL_JAR_FILE_NAME); + if (localFile.exists()) { version = getVersion(); + } JButton download = new JButton("Download latest"); @@ -47,6 +51,30 @@ public class Updater { content.add(run); } + new Thread(new Runnable() { + @Override + public void run() { + AutoupdateUtil.ConnectionAndMeta connectionAndMeta = null; + try { + connectionAndMeta = new AutoupdateUtil.ConnectionAndMeta(PLUGIN_BODY_JAR).invoke(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + System.out.println("Server has " + connectionAndMeta.getCompleteFileSize() + " from " + new Date(connectionAndMeta.getLastModified())); + + if (AutoupdateUtil.hasExistingFile(LOCAL_JAR_FILE_NAME, connectionAndMeta.getCompleteFileSize(), connectionAndMeta.getLastModified())) { + System.out.println("We already have latest update " + new Date(connectionAndMeta.getLastModified())); + SwingUtilities.invokeLater(() -> { + download.setText("We have latest plugin version"); + download.setEnabled(false); + }); + return; + } + + } + }).start(); + download.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { @@ -78,7 +106,7 @@ public class Updater { try { AutoupdateUtil.ConnectionAndMeta connectionAndMeta = new AutoupdateUtil.ConnectionAndMeta(PLUGIN_BODY_JAR).invoke(); - AutoupdateUtil.downloadAutoupdateFile(LOCAL_JAR_FILE_NAME, connectionAndMeta.getHttpConnection(), connectionAndMeta.getCompleteFileSize(), + AutoupdateUtil.downloadAutoupdateFile(LOCAL_JAR_FILE_NAME, connectionAndMeta, TITLE); startPlugin(); @@ -109,6 +137,9 @@ public class Updater { content.removeAll(); content.add(instance.getContent()); AutoupdateUtil.trueLayout(content.getParent()); + JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(content); + topFrame.pack(); + AutoupdateUtil.trueLayout(topFrame); } public JPanel getContent() {