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. *

* It is expected to be on par with the GUI version. * * @author niki */ class TuiReader extends BasicReader { /** * Will detect the backend to use. *

* Swing is the default backend on Windows and MacOS while evreything else * will use XTERM unless explicitly overridden by jexer.Swing = * true or false. * * @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; } } return backendType; } public void read(int chapter) throws IOException { if (getStory() == null) { throw new IOException("No story to read"); } start(getStory().getMeta(), chapter); } public void browse(String source) { start(getLibrary().getListBySource(source)); } /** * Start the application with the given stories. * * @param metas * the stories to display */ private void start(List metas) { try { TuiReaderApplication app = new TuiReaderApplication(metas, this, guessBackendType()); new Thread(app).start(); } catch (Exception e) { Instance.syserr(e); } } /** * Start the application with the given {@link MetaData} at the given open * chapter. * * @param meta * the story to display * @param chapter * the chapter to open */ private void start(MetaData meta, int chapter) { try { TuiReaderApplication app = new TuiReaderApplication(meta, chapter, this, guessBackendType()); new Thread(app).start(); } catch (Exception e) { Instance.syserr(e); } } }