JAL-3911 HiDPISetting update. jalview.bin.* update. Attempt to detect SHIFT key ...
[jalview.git] / getdown / src / getdown / core / src / main / java / com / threerings / getdown / data / Application.java
index b11a380..35250f3 100644 (file)
@@ -9,6 +9,8 @@ import java.io.*;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.Proxy;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -66,6 +68,9 @@ public class Application
     /** A special classname that means 'use -jar code.jar' instead of a classname. */
     public static final String MANIFEST_CLASS = "manifest";
 
+    /** Set this if SHIFT key is down -- reverts to the BACKUP_CONFIG_DIR ("install") */
+    private static boolean shiftKeyPressed = false;
+
     /** Used to communicate information about the UI displayed when updating the application. */
     public static final class UpdateInterface
     {
@@ -629,7 +634,10 @@ public class Application
         } catch (Exception e) {
             log.warning("Failure reading config file", "file", _config, e);
         }
-        if (config == null || config.getString("appbase") == null || config.getString("appbase").isEmpty()) {
+
+System.out.println("3 SHIFT key"+(getShiftKeyPressed()?"":" not")+" pressed");
+        if (getShiftKeyPressed() || config == null || config.getString("appbase") == null || config.getString("appbase").isEmpty()) {
+System.out.println("4 SHIFT key"+(getShiftKeyPressed()?"":" not")+" pressed");
                try {
                        Config backupConfig = Config.parseConfig(_backupConfig, opts);
                        config = backupConfig;
@@ -1058,13 +1066,30 @@ public class Application
         }
 
         // pass along our proxy settings
-        String proxyHost;
-        if ((proxyHost = System.getProperty("http.proxyHost")) != null) {
+        String proxyHost = System.getProperty("http.proxyHost");
+       String proxyPort = StringUtil.isBlank(System.getProperty("http.proxyPort")) ? "80" : System.getProperty("http.proxyPort");
+        if (StringUtil.isBlank(proxyHost) && ! proxy.equals(Proxy.NO_PROXY)) {
+           try {
+               SocketAddress a = proxy.address();
+               if (a != null && a instanceof InetSocketAddress) {
+                   InetSocketAddress ia = (InetSocketAddress)a;
+                   proxyHost = ia.getHostString();
+                   proxyPort = String.valueOf(ia.getPort());
+               }
+           } catch (Exception e) {
+               log.error("Problem obtaining proxy settings from Proxy object");
+               e.printStackTrace();
+           }
+       }
+        if (proxyHost != null) {
+           log.info("Using proxy settings "+proxyHost+":"+proxyPort);
             args.add("-Dhttp.proxyHost=" + proxyHost);
-            args.add("-Dhttp.proxyPort=" + System.getProperty("http.proxyPort"));
+            args.add("-Dhttp.proxyPort=" + proxyPort);
             args.add("-Dhttps.proxyHost=" + proxyHost);
-            args.add("-Dhttps.proxyPort=" + System.getProperty("http.proxyPort"));
-        }
+            args.add("-Dhttps.proxyPort=" + proxyPort);
+       } else {
+           log.info("Not setting proxy");
+       }
 
         // add the marker indicating the app is running in getdown
         args.add("-D" + Properties.GETDOWN + "=true");
@@ -1419,6 +1444,8 @@ public class Application
             clearValidationMarkers();
             // if the new copy validates, reinitialize ourselves; otherwise report baffling hoseage
             if (_digest.validateResource(crsrc, null)) {
+                // unset _initialisedConfig so new file is initialised
+                _initialisedConfig = null;
                 init(true);
             } else {
                 log.warning(CONFIG_FILE + " failed to validate even after redownloading. " +
@@ -2038,7 +2065,36 @@ public class Application
     public String getAppbase() {
        return _appbase;
     }
+
+    public static boolean getShiftKeyPressed() {
+      return shiftKeyPressed;
+    }
+
+    public static void setShiftKeyPressed(boolean down) {
+      shiftKeyPressed |= down;
+    }
     
+    public boolean isInstallationAppbase() {
+        // if not on the installation appbase, give half a second for SHIFT key to be pressed
+      Config.ParseOpts opts = null;
+      Config config = null;
+      try {
+        Config backupConfig = Config.parseConfig(_backupConfig, opts);
+System.out.println("1 SHIFT key"+(getShiftKeyPressed()?"":" not")+" pressed");
+        Thread.sleep(2000);
+System.out.println("2 SHIFT key"+(getShiftKeyPressed()?"":" not")+" pressed");
+        return (true || (config != null && backupConfig != null && backupConfig.getString("appbase") != null && (!backupConfig.getString("appbase").equals(config.getString("appbase")))));
+
+      } catch (NullPointerException e) {
+        e.printStackTrace();
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      } catch (IOException e) {
+        e.printStackTrace();
+      }
+      return false;
+    }
+
     protected final EnvConfig _envc;
     protected File _config;
     protected File _backupConfig;