Add more warnings source to 1.6) and fix warnings
[nikiroo-utils.git] / src / be / nikiroo / fanfix / reader / TuiReader.java
index 98130a989b8b0fa505f307dddd7f958bb9bdeb7f..11640cf506302fddae46d4b07a68b8a1a3cbf1e2 100644 (file)
@@ -1,30 +1,71 @@
 package be.nikiroo.fanfix.reader;
 
 import java.io.IOException;
+import java.util.List;
 
+import jexer.TApplication;
+import jexer.TApplication.BackendType;
 import be.nikiroo.fanfix.Instance;
+import be.nikiroo.fanfix.data.MetaData;
 
+/**
+ * This {@link Reader}is based upon the TUI widget library 'jexer'
+ * (https://github.com/klamonte/jexer/) and offer, as its name suggest, a Text
+ * User Interface.
+ * <p>
+ * It is expected to be on par with the GUI version.
+ * 
+ * @author niki
+ */
 class TuiReader extends BasicReader {
-       @Override
-       public void read() throws IOException {
-               if (getStory() == null) {
-                       throw new IOException("No story to read");
+       /**
+        * Will detect the backend to use.
+        * <p>
+        * Swing is the default backend on Windows and MacOS while evreything else
+        * will use XTERM unless explicitly overridden by <tt>jexer.Swing</tt> =
+        * <tt>true</tt> or <tt>false</tt>.
+        * 
+        * @return the backend to use
+        */
+       private static BackendType guessBackendType() {
+               // TODO: allow a config option to force one or the other?
+               TApplication.BackendType backendType = TApplication.BackendType.XTERM;
+               if (System.getProperty("os.name").startsWith("Windows")) {
+                       backendType = TApplication.BackendType.SWING;
+               }
+
+               if (System.getProperty("os.name").startsWith("Mac")) {
+                       backendType = TApplication.BackendType.SWING;
+               }
+
+               if (System.getProperty("jexer.Swing") != null) {
+                       if (System.getProperty("jexer.Swing", "false").equals("true")) {
+                               backendType = TApplication.BackendType.SWING;
+                       } else {
+                               backendType = TApplication.BackendType.XTERM;
+                       }
                }
 
-               open(getLibrary(), getStory().getMeta().getLuid());
+               return backendType;
        }
 
        @Override
-       public void read(int chapter) throws IOException {
-               // TODO: show a special page?
-               read();
+       public void read() throws IOException {
+               try {
+                       TuiReaderApplication app = new TuiReaderApplication(this,
+                                       guessBackendType());
+                       new Thread(app).start();
+               } catch (Exception e) {
+                       Instance.syserr(e);
+               }
        }
 
        @Override
        public void browse(String source) {
+               List<MetaData> metas = getLibrary().getListBySource(source);
                try {
-                       TuiReaderApplication app = new TuiReaderApplication(getLibrary()
-                                       .getListBySource(source), this);
+                       TuiReaderApplication app = new TuiReaderApplication(metas, this,
+                                       guessBackendType());
                        new Thread(app).start();
                } catch (Exception e) {
                        Instance.syserr(e);