Version 1.2.4: fixes, new "Re-download" UI option
[fanfix.git] / src / be / nikiroo / fanfix / Instance.java
index ea66aec0d1b3c7fcedc65dfc31366e29a9b67708..33c65e003aeddc21a7f70e36b342b123a9e6f5ac 100644 (file)
@@ -6,6 +6,9 @@ import java.io.IOException;
 import be.nikiroo.fanfix.bundles.Config;
 import be.nikiroo.fanfix.bundles.ConfigBundle;
 import be.nikiroo.fanfix.bundles.StringIdBundle;
+import be.nikiroo.fanfix.bundles.UiConfig;
+import be.nikiroo.fanfix.bundles.UiConfigBundle;
+import be.nikiroo.fanfix.output.BasicOutput.OutputType;
 import be.nikiroo.utils.resources.Bundles;
 
 /**
@@ -15,6 +18,7 @@ import be.nikiroo.utils.resources.Bundles;
  */
 public class Instance {
        private static ConfigBundle config;
+       private static UiConfigBundle uiconfig;
        private static StringIdBundle trans;
        private static Cache cache;
        private static Library lib;
@@ -26,48 +30,15 @@ public class Instance {
                // Most of the rest is dependent upon this:
                config = new ConfigBundle();
 
-               trans = new StringIdBundle(getLang());
-               lib = new Library(getFile(Config.LIBRARY_DIR));
-               debug = Instance.getConfig().getBoolean(Config.DEBUG_ERR, false);
-               coverDir = getFile(Config.DEFAULT_COVERS_DIR);
-               File tmp = getFile(Config.CACHE_DIR);
-               readerTmp = getFile(Config.CACHE_DIR_LOCAL_READER);
-
-               if (checkEnv("NOUTF")) {
-                       trans.setUnicode(false);
-               }
-
-               if (checkEnv("DEBUG")) {
-                       debug = true;
-               }
-
-               if (tmp == null || readerTmp == null) {
-                       String tmpDir = System.getProperty("java.io.tmpdir");
-                       if (tmpDir != null) {
-                               if (tmp == null) {
-                                       tmp = new File(tmpDir, "fanfic-tmp");
-                               }
-                               if (readerTmp == null) {
-                                       readerTmp = new File(tmpDir, "fanfic-reader");
-                               }
-                       } else {
-                               syserr(new IOException(
-                                               "The system does not have a default temporary directory"));
-                       }
-               }
-
-               if (coverDir != null && !coverDir.exists()) {
-                       syserr(new IOException(
-                                       "The 'default covers' directory does not exists: "
-                                                       + coverDir));
-                       coverDir = null;
+               String configDir = System.getProperty("CONFIG_DIR");
+               if (configDir == null) {
+                       configDir = System.getenv("CONFIG_DIR");
                }
-
-               String configDir = System.getenv("CONFIG_DIR");
                if (configDir == null) {
                        configDir = new File(System.getProperty("user.home"), ".fanfix")
                                        .getPath();
                }
+               
                if (configDir != null) {
                        if (!new File(configDir).exists()) {
                                new File(configDir).mkdirs();
@@ -81,6 +52,12 @@ public class Instance {
                        } catch (IOException e) {
                                syserr(e);
                        }
+                       try {
+                               uiconfig = new UiConfigBundle();
+                               uiconfig.updateFile(configDir);
+                       } catch (IOException e) {
+                               syserr(e);
+                       }
                        try {
                                trans = new StringIdBundle(getLang());
                                trans.updateFile(configDir);
@@ -91,6 +68,45 @@ public class Instance {
                        Bundles.setDirectory(configDir);
                }
 
+               uiconfig = new UiConfigBundle();
+               trans = new StringIdBundle(getLang());
+               try {
+                       lib = new Library(getFile(Config.LIBRARY_DIR),
+                                       OutputType.INFO_TEXT, OutputType.CBZ);
+               } catch (Exception e) {
+                       syserr(new IOException("Cannot create library for directory: "
+                                       + getFile(Config.LIBRARY_DIR), e));
+               }
+
+               debug = Instance.getConfig().getBoolean(Config.DEBUG_ERR, false);
+               coverDir = getFile(Config.DEFAULT_COVERS_DIR);
+               File tmp = getFile(Config.CACHE_DIR);
+               readerTmp = getFile(UiConfig.CACHE_DIR_LOCAL_READER);
+
+               if (checkEnv("NOUTF")) {
+                       trans.setUnicode(false);
+               }
+
+               if (checkEnv("DEBUG")) {
+                       debug = true;
+               }
+
+               // Could have used: System.getProperty("java.io.tmpdir")
+               if (tmp == null) {
+                       tmp = new File(configDir, "tmp");
+               }
+               if (readerTmp == null) {
+                       readerTmp = new File(configDir, "tmp-reader");
+               }
+               //
+
+               if (coverDir != null && !coverDir.exists()) {
+                       syserr(new IOException(
+                                       "The 'default covers' directory does not exists: "
+                                                       + coverDir));
+                       coverDir = null;
+               }
+
                try {
                        String ua = config.getString(Config.USER_AGENT);
                        int hours = config.getInteger(Config.CACHE_MAX_TIME_CHANGING, -1);
@@ -113,6 +129,15 @@ public class Instance {
                return config;
        }
 
+       /**
+        * Get the (unique) UI configuration service for the program.
+        * 
+        * @return the configuration service
+        */
+       public static UiConfigBundle getUiConfig() {
+               return uiconfig;
+       }
+
        /**
         * Get the (unique) {@link Cache} for the program.
         * 
@@ -178,8 +203,25 @@ public class Instance {
         * @return the path
         */
        private static File getFile(Config id) {
+               return getFile(config.getString(id));
+       }
+
+       /**
+        * Return a path, but support the special $HOME variable.
+        * 
+        * @return the path
+        */
+       private static File getFile(UiConfig id) {
+               return getFile(uiconfig.getString(id));
+       }
+
+       /**
+        * Return a path, but support the special $HOME variable.
+        * 
+        * @return the path
+        */
+       private static File getFile(String path) {
                File file = null;
-               String path = config.getString(id);
                if (path != null && !path.isEmpty()) {
                        path = path.replace('/', File.separatorChar);
                        if (path.contains("$HOME")) {