GUI search: reorg mostly OK
[fanfix.git] / src / be / nikiroo / fanfix / reader / ui / GuiReader.java
index 2a4d7a942d4f67c5e7dd50553bb5ac9ba39de8f0..1d782129276aaa0744ab414b40b0b09ebd9662de 100644 (file)
@@ -25,6 +25,8 @@ import be.nikiroo.fanfix.library.BasicLibrary;
 import be.nikiroo.fanfix.library.CacheLibrary;
 import be.nikiroo.fanfix.reader.BasicReader;
 import be.nikiroo.fanfix.reader.Reader;
+import be.nikiroo.fanfix.searchable.BasicSearchable;
+import be.nikiroo.fanfix.searchable.SearchableTag;
 import be.nikiroo.fanfix.supported.SupportType;
 import be.nikiroo.utils.Progress;
 import be.nikiroo.utils.Version;
@@ -220,16 +222,78 @@ class GuiReader extends BasicReader {
        }
 
        @Override
-       public void search(SupportType searchOn, String keywords, int page, int item) {
-               // TODO: !!!
-               throw new java.lang.IllegalStateException("Not implemented yet.");
+       public void search(boolean sync) throws IOException {
+               GuiReaderSearchFrame search = new GuiReaderSearchFrame(this);
+               if (sync) {
+                       sync(search);
+               } else {
+                       search.setVisible(true);
+               }
        }
 
        @Override
-       public void searchTag(SupportType searchOn, int page, int item,
-                       Integer... tags) {
-               // TODO: !!!
-               throw new java.lang.IllegalStateException("Not implemented yet.");
+       public void search(SupportType searchOn, String keywords, int page,
+                       int item, boolean sync) {
+               final GuiReaderSearchFrame search = new GuiReaderSearchFrame(
+                               GuiReader.this);
+               while (!search.isEnabled()) {
+                       try {
+                               Thread.sleep(10);
+                       } catch (InterruptedException e) {
+                               Instance.getTraceHandler().error(e);
+                       }
+               }
+
+               search.search(searchOn, keywords, page, item);
+               if (sync) {
+                       sync(search);
+               } else {
+                       search.setVisible(true);
+               }
+       }
+
+       @Override
+       public void searchTag(final SupportType searchOn, final int page,
+                       final int item, final boolean sync, final Integer... tags) {
+
+               final GuiReaderSearchFrame search = new GuiReaderSearchFrame(
+                               GuiReader.this);
+               while (!search.isEnabled()) {
+                       try {
+                               Thread.sleep(10);
+                       } catch (InterruptedException e) {
+                               Instance.getTraceHandler().error(e);
+                       }
+               }
+
+               final BasicSearchable searchable = BasicSearchable
+                               .getSearchable(searchOn);
+
+               Runnable action = new Runnable() {
+                       @Override
+                       public void run() {
+                               SearchableTag tag = null;
+                               try {
+                                       tag = searchable.getTag(tags);
+                               } catch (IOException e) {
+                                       Instance.getTraceHandler().error(e);
+                               }
+
+                               search.searchTag(searchOn, page, item, tag);
+
+                               if (sync) {
+                                       sync(search);
+                               } else {
+                                       search.setVisible(true);
+                               }
+                       }
+               };
+
+               if (sync) {
+                       action.run();
+               } else {
+                       new Thread(action).start();
+               }
        }
 
        /**