import be.nikiroo.fanfix.bundles.Config;
import be.nikiroo.fanfix.bundles.ConfigBundle;
+import be.nikiroo.fanfix.bundles.StringId;
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.fanfix.library.BasicLibrary;
+import be.nikiroo.fanfix.library.LocalLibrary;
import be.nikiroo.utils.IOUtils;
import be.nikiroo.utils.resources.Bundles;
* @author niki
*/
public class Instance {
+ /**
+ * A handler when a recoverable exception was caught by the program.
+ *
+ * @author niki
+ */
+ public interface SyserrHandler {
+ /**
+ * An exception happened, log it.
+ *
+ * @param e
+ * the exception
+ * @param showDetails
+ * show more details (usually equivalent to the value of
+ * DEBUG)
+ */
+ public void notify(Exception e, boolean showDetails);
+ }
+
+ /**
+ * A handler when a trace message is sent.
+ *
+ * @author niki
+ */
+ public interface TraceHandler {
+ /**
+ * A trace happened, show it.
+ * <p>
+ * Will only be called if TRACE is true.
+ *
+ * @param message
+ * the trace message
+ */
+ public void trace(String message);
+ }
+
private static ConfigBundle config;
private static UiConfigBundle uiconfig;
private static StringIdBundle trans;
- private static Cache cache;
- private static Library lib;
+ private static DataLoader cache;
+ private static LocalLibrary lib;
private static boolean debug;
+ private static boolean trace;
private static File coverDir;
private static File readerTmp;
+ private static File remoteDir;
private static String configDir;
+ private static SyserrHandler syserrHandler;
+
+ private static TraceHandler traceHandler;
+
static {
// Most of the rest is dependent upon this:
config = new ConfigBundle();
} catch (IOException e) {
syserr(e);
}
- try {
- trans = new StringIdBundle(getLang());
- trans.updateFile(configDir);
- } catch (IOException e) {
- syserr(e);
+
+ // No updateFile for this one! (we do not want the user to have custom
+ // translations that won't accept updates from newer versions)
+ trans = new StringIdBundle(getLang());
+
+ // Fix an old bug (we used to store custom translation files by
+ // default):
+ if (trans.getString(StringId.INPUT_DESC_CBZ) == null) {
+ // TODO: create the deleteFile method
+ // trans.deleteFile(configDir);
}
Bundles.setDirectory(configDir);
uiconfig = new UiConfigBundle();
trans = new StringIdBundle(getLang());
try {
- lib = new Library(getFile(Config.LIBRARY_DIR),
- OutputType.INFO_TEXT, OutputType.CBZ);
+ lib = new LocalLibrary(getFile(Config.LIBRARY_DIR));
} catch (Exception e) {
syserr(new IOException("Cannot create library for directory: "
+ getFile(Config.LIBRARY_DIR), e));
}
debug = Instance.getConfig().getBoolean(Config.DEBUG_ERR, false);
+ trace = Instance.getConfig().getBoolean(Config.DEBUG_TRACE, false);
coverDir = getFile(Config.DEFAULT_COVERS_DIR);
File tmp = getFile(Config.CACHE_DIR);
readerTmp = getFile(UiConfig.CACHE_DIR_LOCAL_READER);
+ remoteDir = new File(configDir, "remote");
if (checkEnv("NOUTF")) {
trans.setUnicode(false);
int hoursLarge = config
.getInteger(Config.CACHE_MAX_TIME_STABLE, -1);
- cache = new Cache(tmp, ua, hours, hoursLarge);
+ cache = new DataLoader(tmp, ua, hours, hoursLarge);
} catch (IOException e) {
syserr(new IOException(
"Cannot create cache (will continue without cache)", e));
}
/**
- * Get the (unique) {@link Cache} for the program.
+ * Get the (unique) {@link DataLoader} for the program.
*
- * @return the {@link Cache}
+ * @return the {@link DataLoader}
*/
- public static Cache getCache() {
+ public static DataLoader getCache() {
return cache;
}
}
/**
- * Get the (unique) {@link Library} for the program.
+ * Get the (unique) {@link LocalLibrary} for the program.
*
- * @return the {@link Library}
+ * @return the {@link LocalLibrary}
*/
- public static Library getLibrary() {
+ public static BasicLibrary getLibrary() {
return lib;
}
return readerTmp;
}
+ /**
+ * Return the directory where to store temporary files for the remote
+ * {@link LocalLibrary}.
+ *
+ * @param host
+ * the remote for this host
+ *
+ * @return the directory
+ */
+ public static File getRemoteDir(String host) {
+ remoteDir.mkdirs();
+
+ if (host != null) {
+ return new File(remoteDir, host);
+ }
+
+ return remoteDir;
+ }
+
/**
* Check if we need to check that a new version of Fanfix is available.
*
}
}
+ /**
+ * Replace the global syserr handler.
+ *
+ * @param syserrHandler
+ * the new syserr handler
+ */
+ public static void setSyserrHandler(SyserrHandler syserrHandler) {
+ Instance.syserrHandler = syserrHandler;
+ }
+
+ /**
+ * Replace the global trace handler.
+ *
+ * @param traceHandler
+ * the new trace handler
+ */
+ public static void setTraceHandler(TraceHandler traceHandler) {
+ Instance.traceHandler = traceHandler;
+ }
+
/**
* Report an error to the user
*
* the {@link Exception} to report
*/
public static void syserr(Exception e) {
- if (debug) {
- e.printStackTrace();
+ if (syserrHandler != null) {
+ syserrHandler.notify(e, debug);
} else {
- System.err.println(e.getMessage());
+ if (debug) {
+ e.printStackTrace();
+ } else {
+ System.err.println(e.getMessage());
+ }
+ }
+ }
+
+ /**
+ * Notify of a debug message.
+ *
+ * @param message
+ * the message
+ */
+ public static void trace(String message) {
+ if (trace) {
+ if (traceHandler != null) {
+ traceHandler.trace(message);
+ } else {
+ System.out.println(message);
+ }
}
}