+ children = null;
+ // TODO: stories
+ }
+ }
+
+ final List<SearchableTag> fchildren = children;
+ inUi(new Runnable() {
+ @Override
+ public void run() {
+ if (fchildren != null) {
+ addTagBar(fchildren, tag);
+ }
+
+ if (inUi != null) {
+ inUi.run();
+ }
+ }
+ });
+ }
+ }).start();
+ }
+
+ // item 0 = no selection, else = default selection
+ public void search(final SupportType searchOn, final String keywords,
+ final int page, final int item) {
+
+ setWaitingScreen(true);
+
+ updateSupportType(searchOn);
+ updateSearchBy(false);
+ updateKeywords(keywords);
+ updatePages(page, maxPage);
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ BasicSearchable search = BasicSearchable
+ .getSearchable(searchOn);
+
+ int maxPage = -1;
+ try {
+ maxPage = search.searchPages(keywords);
+ } catch (IOException e) {
+ error(e);
+ }
+
+ if (page <= 0) {
+ updateBooks(new ArrayList<GuiReaderBookInfo>());
+ updatePages(0, maxPage);
+ } else {
+ List<MetaData> results;
+ try {
+ results = search.search(keywords, page);
+ } catch (IOException e) {
+ error(e);
+ results = new ArrayList<MetaData>();
+ }
+
+ search(results, page, maxPage, item);
+
+ // ! 1-based index !
+ if (item > 0 && item <= books.getBooksCount()) {
+ // TODO: "click" on item ITEM
+ }
+ }
+
+ setWaitingScreen(false);
+ }
+ }).start();
+ }
+
+ // tag: must be filled (or NULL for base tags)
+ public void searchTag(final SupportType searchOn, final int page,
+ final int item, final SearchableTag tag) {
+
+ setWaitingScreen(true);
+
+ updateSupportType(searchOn);
+ updateSearchBy(true);
+ updateTags(tag);
+ updatePages(page, maxPage);
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ BasicSearchable search = BasicSearchable
+ .getSearchable(searchOn);
+
+ if (tag != null) {
+ int maxPage = 0;
+ try {
+ maxPage = search.searchPages(tag);
+ } catch (IOException e) {
+ error(e);
+ }
+
+ updatePages(page, maxPage);
+
+ if (page > 0) {
+ List<MetaData> metas = new ArrayList<MetaData>();
+
+ if (tag.isLeaf()) {
+ try {
+ metas = search.search(tag, page);
+ } catch (IOException e) {
+ error(e);
+ }
+ } else {
+ List<SearchableTag> subtags = tag.getChildren();
+ if (item > 0 && item <= subtags.size()) {
+ SearchableTag subtag = subtags.get(item - 1);
+ try {
+ metas = search.search(subtag, page);
+ maxPage = subtag.getPages();
+ } catch (IOException e) {
+ error(e);
+ }
+ }
+ }
+
+ updatePages(page, maxPage);
+ search(metas, page, maxPage, item);