Commit | Line | Data |
---|---|---|
16a81ef7 | 1 | package be.nikiroo.fanfix.reader.tui; |
c1873e56 NR |
2 | |
3 | import java.io.IOException; | |
c1873e56 | 4 | |
6322ab64 NR |
5 | import jexer.TApplication; |
6 | import jexer.TApplication.BackendType; | |
c1873e56 | 7 | import be.nikiroo.fanfix.Instance; |
16a81ef7 NR |
8 | import be.nikiroo.fanfix.reader.BasicReader; |
9 | import be.nikiroo.fanfix.reader.Reader; | |
91b82a5c | 10 | import 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 | 21 | class 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) { |
62c63b07 | 67 | Instance.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) { |
62c63b07 | 78 | Instance.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 | } |