search should now be OK (CLI, Fanfiction only)
[fanfix.git] / src / be / nikiroo / fanfix / reader / cli / CliReader.java
index 89eb3ac034b0ef1c9e5d338d6528a7050a200eac..d8d3a6c1e70b9a5b317d4c62e9f6bcf89783fb16 100644 (file)
@@ -102,30 +102,53 @@ class CliReader extends BasicReader {
        }
 
        @Override
-       public void search(SupportType searchOn, String keywords, int page, int item)
-                       throws IOException {
+       public void search(SupportType searchOn, String keywords, int page,
+                       int item, boolean sync) throws IOException {
+               BasicSearchable search = BasicSearchable.getSearchable(searchOn);
+
+               if (page == 0) {
+                       System.out.println(search.searchPages(keywords));
+               } else {
+                       List<MetaData> metas = search.search(keywords, page);
+
+                       if (item == 0) {
+                               System.out.println("Page " + page + " of stories for: "
+                                               + keywords);
+                               displayStories(metas);
+                       } else {
+                               // ! 1-based index !
+                               if (item <= 0 | item > metas.size()) {
+                                       throw new IOException("Index out of bounds: " + item);
+                               }
 
+                               MetaData meta = metas.get(item - 1);
+                               displayStory(meta);
+                       }
+               }
        }
 
        @Override
        public void searchTag(SupportType searchOn, int page, int item,
-                       String... tags) throws IOException {
+                       boolean sync, Integer... tags) throws IOException {
                BasicSearchable search = BasicSearchable.getSearchable(searchOn);
                List<SearchableTag> stags = search.getTags();
+               String fqnTag = "";
 
                SearchableTag stag = null;
-               for (String tag : tags) {
-                       stag = null;
-                       for (int i = 0; i < stags.size(); i++) {
-                               if (stags.get(i).getName().equalsIgnoreCase(tag)) {
-                                       stag = stags.get(i);
-                                       break;
-                               }
+               for (Integer tagIndex : tags) {
+                       // ! 1-based index !
+                       if (tagIndex == null || tagIndex <= 0 | tagIndex > stags.size()) {
+                               throw new IOException("Index out of bounds: " + tagIndex);
                        }
 
+                       stag = stags.get(tagIndex - 1);
                        if (stag != null) {
                                search.fillTag(stag);
                                stags = stag.getChildren();
+                               if (!fqnTag.isEmpty()) {
+                                       fqnTag += " / ";
+                               }
+                               fqnTag += stag.getName();
                        } else {
                                stags = new ArrayList<SearchableTag>();
                                break;
@@ -157,47 +180,16 @@ class CliReader extends BasicReader {
                                        if (item <= count) {
                                                if (metas != null) {
                                                        MetaData meta = metas.get(item - 1);
-                                                       System.out.println(page + "/" + item + ": "
-                                                                       + meta.getTitle());
-                                                       System.out.println();
-                                                       System.out.println(meta.getUrl());
-                                                       System.out.println();
-                                                       System.out.println("Tags: " + meta.getTags());
-                                                       System.out.println();
-                                                       for (Paragraph para : meta.getResume()) {
-                                                               System.out.println(para.getContent());
-                                                               System.out.println("");
-                                                       }
+                                                       displayStory(meta);
                                                } else {
                                                        SearchableTag subtag = subtags.get(item - 1);
 
-                                                       String sp = "";
-                                                       if (subtag.getParent() != null) {
-                                                               List<String> parents = new ArrayList<String>();
-                                                               for (SearchableTag parent = subtag.getParent(); parent != null; parent = parent
-                                                                               .getParent()) {
-                                                                       parents.add(parent.getName());
-                                                               }
-                                                               for (String parent : parents) {
-                                                                       if (!sp.isEmpty()) {
-                                                                               sp += " / ";
-                                                                       }
-                                                                       sp += parent;
-                                                               }
-                                                       }
-
                                                        // TODO: i18n
-                                                       if (sp.isEmpty()) {
-                                                               System.out.println(String.format(
-                                                                               "%d/%d: %s, %d %s", page, item,
-                                                                               subtag.getName(), subtag.getCount(),
-                                                                               "stories"));
-                                                       } else {
-                                                               System.out.println(String.format(
-                                                                               "%d/%d: %s (%s), %d %s", page, item,
-                                                                               subtag.getName(), sp,
-                                                                               subtag.getCount(), "stories"));
-                                                       }
+                                                       String stories = "stories";
+                                                       String num = StringUtils.formatNumber(subtag
+                                                                       .getCount());
+                                                       System.out.println(String.format("%s (%s), %s %s",
+                                                                       subtag.getName(), fqnTag, num, stories));
                                                }
                                        } else {
                                                System.out.println("Invalid item: only " + count
@@ -205,13 +197,14 @@ class CliReader extends BasicReader {
                                        }
                                } else {
                                        if (metas != null) {
-                                               int i = 0;
-                                               for (MetaData meta : metas) {
-                                                       System.out
-                                                                       .println((i + 1) + ": " + meta.getTitle());
-                                                       i++;
-                                               }
+                                               // TODO i18n
+                                               System.out.println(String.format("Content of %s: ",
+                                                               fqnTag));
+                                               displayStories(metas);
                                        } else {
+                                               // TODO i18n
+                                               System.out.println(String.format("Subtags of %s: ",
+                                                               fqnTag));
                                                int i = 1;
                                                for (SearchableTag subtag : subtags) {
                                                        String total = "";
@@ -234,9 +227,34 @@ class CliReader extends BasicReader {
                                }
                        }
                } else {
+                       // TODO i18n
+                       System.out.println("Known tags: ");
+                       int i = 1;
                        for (SearchableTag s : stags) {
-                               System.out.println(s.getName());
+                               System.out.println(String.format("%d: %s", i, s.getName()));
+                               i++;
                        }
                }
        }
+
+       private void displayStory(MetaData meta) {
+               System.out.println(meta.getTitle());
+               System.out.println();
+               System.out.println(meta.getUrl());
+               System.out.println();
+               System.out.println("Tags: " + meta.getTags());
+               System.out.println();
+               for (Paragraph para : meta.getResume()) {
+                       System.out.println(para.getContent());
+                       System.out.println("");
+               }
+       }
+
+       private void displayStories(List<MetaData> metas) {
+               int i = 1;
+               for (MetaData meta : metas) {
+                       System.out.println(i + ": " + meta.getTitle());
+                       i++;
+               }
+       }
 }