CLI search, step 1
[fanfix.git] / src / be / nikiroo / fanfix / reader / tui / TuiReaderApplication.java
index c08b6c2cc0c42f909c5bbd74cc318ac0b7eac606..177c12ab867094cbd61292d88314662a569b0ecc 100644 (file)
@@ -10,6 +10,8 @@ import jexer.TApplication;
 import jexer.TCommand;
 import jexer.TKeypress;
 import jexer.TMessageBox;
+import jexer.TMessageBox.Result;
+import jexer.TMessageBox.Type;
 import jexer.TStatusBar;
 import jexer.TWidget;
 import jexer.TWindow;
@@ -22,6 +24,8 @@ import be.nikiroo.fanfix.data.Story;
 import be.nikiroo.fanfix.library.BasicLibrary;
 import be.nikiroo.fanfix.reader.BasicReader;
 import be.nikiroo.fanfix.reader.Reader;
+import be.nikiroo.fanfix.reader.tui.TuiReaderMainWindow.Mode;
+import be.nikiroo.fanfix.supported.SupportType;
 import be.nikiroo.utils.Progress;
 
 /**
@@ -37,15 +41,15 @@ class TuiReaderApplication extends TApplication implements Reader {
        public static final int MENU_IMPORT_URL = 1026;
        public static final int MENU_IMPORT_FILE = 1027;
        public static final int MENU_EXPORT = 1028;
-       public static final int MENU_LIBRARY = 1029;
-       public static final int MENU_EXIT = 1030;
+       public static final int MENU_DELETE = 1029;
+       public static final int MENU_LIBRARY = 1030;
+       public static final int MENU_EXIT = 1031;
 
        public static final TCommand CMD_EXIT = new TCommand(MENU_EXIT) {
        };
 
        private Reader reader;
        private TuiReaderMainWindow main;
-       private String source;
 
        // start reading if meta present
        public TuiReaderApplication(Reader reader, BackendType backend)
@@ -53,9 +57,8 @@ class TuiReaderApplication extends TApplication implements Reader {
                super(backend);
                init(reader);
 
-               MetaData meta = getMeta();
-               if (meta != null) {
-                       read();
+               if (getMeta() != null) {
+                       read(false);
                }
        }
 
@@ -65,12 +68,12 @@ class TuiReaderApplication extends TApplication implements Reader {
                init(reader);
 
                showMain();
-               setSource(source);
+               main.setMode(Mode.SOURCE, source);
        }
 
        @Override
-       public void read() throws IOException {
-               read(getStory(null));
+       public void read(boolean sync) throws IOException {
+               read(getStory(null), sync);
        }
 
        @Override
@@ -122,8 +125,31 @@ class TuiReaderApplication extends TApplication implements Reader {
        public void setChapter(int chapter) {
                reader.setChapter(chapter);
        }
+       
+       @Override
+       public void search(SupportType searchOn, String keywords, int page, int item) {
+               reader.search(searchOn, keywords, page,item);   
+       }
+       
+       @Override
+       public void searchTag(SupportType searchOn, int page, int item, String... tags) {
+               reader.searchTag(searchOn, page, item, tags);
+       }
 
-       public void read(Story story) throws IOException {
+       /**
+        * Open the given {@link Story} for reading. This may or may not start an
+        * external program to read said {@link Story}.
+        * 
+        * @param story
+        *            the {@link Story} to read
+        * @param sync
+        *            execute the process synchronously (wait until it is terminated
+        *            before returning)
+        * 
+        * @throws IOException
+        *             in case of I/O errors
+        */
+       public void read(Story story, boolean sync) throws IOException {
                if (story == null) {
                        throw new IOException("No story to read");
                }
@@ -134,7 +160,7 @@ class TuiReaderApplication extends TApplication implements Reader {
                        window.maximize();
                } else {
                        try {
-                               openExternal(getLibrary(), story.getMeta().getLuid());
+                               openExternal(getLibrary(), story.getMeta().getLuid(), sync);
                        } catch (IOException e) {
                                messageBox("Error when trying to open the story",
                                                e.getMessage(), TMessageBox.Type.OK);
@@ -174,12 +200,6 @@ class TuiReaderApplication extends TApplication implements Reader {
                }
        }
 
-       private void setSource(String source) {
-               this.source = source;
-               showMain();
-               main.setSource(source);
-       }
-
        private void init(Reader reader) {
                this.reader = reader;
 
@@ -188,8 +208,9 @@ class TuiReaderApplication extends TApplication implements Reader {
 
                // Add the menus TODO: i18n
                TMenu fileMenu = addMenu("&File");
-               fileMenu.addItem(MENU_OPEN, "&Open");
+               fileMenu.addItem(MENU_OPEN, "&Open...");
                fileMenu.addItem(MENU_EXPORT, "&Save as...");
+               fileMenu.addItem(MENU_DELETE, "&Delete...");
                // TODO: Move to...
                fileMenu.addSeparator();
                fileMenu.addItem(MENU_IMPORT_URL, "Import &URL...");
@@ -232,7 +253,7 @@ class TuiReaderApplication extends TApplication implements Reader {
                        try {
                                openfile = fileOpenBox(".");
                                reader.setMeta(BasicReader.getUrl(openfile), null);
-                               read();
+                               read(false);
                        } catch (IOException e) {
                                // TODO: i18n
                                error("Fail to open file"
@@ -240,6 +261,35 @@ class TuiReaderApplication extends TApplication implements Reader {
                                                "Import error", e);
                        }
 
+                       return true;
+               case MENU_DELETE:
+                       String luid = null;
+                       String story = null;
+                       MetaData meta = null;
+                       if (main != null) {
+                               meta = main.getSelectedMeta();
+                       }
+                       if (meta != null) {
+                               luid = meta.getLuid();
+                               story = luid + ": " + meta.getTitle();
+                       }
+
+                       // TODO: i18n
+                       TMessageBox mbox = messageBox("Delete story", "Delete story \""
+                                       + story + "\"", Type.OKCANCEL);
+                       if (mbox.getResult() == Result.OK) {
+                               try {
+                                       reader.getLibrary().delete(luid);
+                                       if (main != null) {
+                                               main.refreshStories();
+                                       }
+                               } catch (IOException e) {
+                                       // TODO: i18n
+                                       error("Fail to delete the story: \"" + story + "\"",
+                                                       "Error", e);
+                               }
+                       }
+
                        return true;
                case MENU_IMPORT_URL:
                        String clipboard = "";
@@ -286,7 +336,6 @@ class TuiReaderApplication extends TApplication implements Reader {
                        return true;
                case MENU_LIBRARY:
                        showMain();
-                       setSource(source);
                        return true;
                }
 
@@ -316,8 +365,9 @@ class TuiReaderApplication extends TApplication implements Reader {
        }
 
        @Override
-       public void openExternal(BasicLibrary lib, String luid) throws IOException {
-               reader.openExternal(lib, luid);
+       public void openExternal(BasicLibrary lib, String luid, boolean sync)
+                       throws IOException {
+               reader.openExternal(lib, luid, sync);
        }
 
        /**