Instance: use getInstance()
[nikiroo-utils.git] / src / be / nikiroo / fanfix / reader / tui / TuiReader.java
CommitLineData
16a81ef7 1package be.nikiroo.fanfix.reader.tui;
c1873e56
NR
2
3import java.io.IOException;
c1873e56 4
6322ab64
NR
5import jexer.TApplication;
6import jexer.TApplication.BackendType;
c1873e56 7import be.nikiroo.fanfix.Instance;
16a81ef7
NR
8import be.nikiroo.fanfix.reader.BasicReader;
9import be.nikiroo.fanfix.reader.Reader;
91b82a5c 10import be.nikiroo.fanfix.supported.SupportType;
c1873e56 11
6322ab64
NR
12/**
13 * This {@link Reader}is based upon the TUI widget library 'jexer'
14 * (https://github.com/klamonte/jexer/) and offer, as its name suggest, a Text
15 * User Interface.
16 * <p>
17 * It is expected to be on par with the GUI version.
18 *
19 * @author niki
20 */
c1873e56 21class TuiReader extends BasicReader {
6322ab64
NR
22 /**
23 * Will detect the backend to use.
24 * <p>
25 * Swing is the default backend on Windows and MacOS while evreything else
26 * will use XTERM unless explicitly overridden by <tt>jexer.Swing</tt> =
27 * <tt>true</tt> or <tt>false</tt>.
28 *
29 * @return the backend to use
30 */
31 private static BackendType guessBackendType() {
32 // TODO: allow a config option to force one or the other?
33 TApplication.BackendType backendType = TApplication.BackendType.XTERM;
34 if (System.getProperty("os.name").startsWith("Windows")) {
35 backendType = TApplication.BackendType.SWING;
36 }
37
38 if (System.getProperty("os.name").startsWith("Mac")) {
39 backendType = TApplication.BackendType.SWING;
40 }
41
42 if (System.getProperty("jexer.Swing") != null) {
43 if (System.getProperty("jexer.Swing", "false").equals("true")) {
44 backendType = TApplication.BackendType.SWING;
45 } else {
46 backendType = TApplication.BackendType.XTERM;
47 }
c1873e56
NR
48 }
49
6322ab64 50 return backendType;
c1873e56
NR
51 }
52
211f7ddb 53 @Override
350bc060 54 public void read(boolean sync) throws IOException {
9cc8cf4a
NR
55 // TODO
56 if (!sync) {
57 // How could you do a not-sync in TUI mode?
58 throw new java.lang.IllegalStateException(
59 "Async mode not implemented yet.");
60 }
61
6322ab64 62 try {
bc2ea776 63 TuiReaderApplication app = new TuiReaderApplication(this,
6322ab64 64 guessBackendType());
9cc8cf4a 65 app.run();
6322ab64 66 } catch (Exception e) {
d66deb8d 67 Instance.getInstance().getTraceHandler().error(e);
6322ab64
NR
68 }
69 }
70
211f7ddb 71 @Override
bc2ea776 72 public void browse(String source) {
c1873e56 73 try {
e2d017a3 74 TuiReaderApplication app = new TuiReaderApplication(this, source,
bc2ea776 75 guessBackendType());
9cc8cf4a 76 app.run();
c1873e56 77 } catch (Exception e) {
d66deb8d 78 Instance.getInstance().getTraceHandler().error(e);
c1873e56
NR
79 }
80 }
f76de465 81
b31a0db0
NR
82 @Override
83 public void search(boolean sync) throws IOException {
84 // TODO
85 if (sync) {
86 throw new java.lang.IllegalStateException("Not implemented yet.");
87 }
88 }
89
91b82a5c 90 @Override
f76de465
NR
91 public void search(SupportType searchOn, String keywords, int page,
92 int item, boolean sync) {
93 // TODO
94 if (sync) {
95 throw new java.lang.IllegalStateException("Not implemented yet.");
96 }
91b82a5c 97 }
f76de465 98
91b82a5c 99 @Override
f76de465
NR
100 public void searchTag(SupportType searchOn, int page, int item,
101 boolean sync, Integer... tags) {
102 // TODO
103 if (sync) {
104 throw new java.lang.IllegalStateException("Not implemented yet.");
105 }
91b82a5c 106 }
c1873e56 107}