code cleanup
[fanfix.git] / src / be / nikiroo / fanfix / reader / cli / CliReader.java
index b28d4d4e8987479b7936699e7db14368c947d691..03cb22738b37b1f25cb4ff9c5c73d2d4bcb5ff82 100644 (file)
@@ -1,6 +1,7 @@
 package be.nikiroo.fanfix.reader.cli;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 import be.nikiroo.fanfix.Instance;
@@ -10,6 +11,10 @@ import be.nikiroo.fanfix.data.MetaData;
 import be.nikiroo.fanfix.data.Paragraph;
 import be.nikiroo.fanfix.data.Story;
 import be.nikiroo.fanfix.reader.BasicReader;
+import be.nikiroo.fanfix.searchable.BasicSearchable;
+import be.nikiroo.fanfix.searchable.SearchableTag;
+import be.nikiroo.fanfix.supported.SupportType;
+import be.nikiroo.utils.StringUtils;
 
 /**
  * Command line {@link Story} reader.
@@ -20,7 +25,7 @@ import be.nikiroo.fanfix.reader.BasicReader;
  */
 class CliReader extends BasicReader {
        @Override
-       public void read() throws IOException {
+       public void read(boolean sync) throws IOException {
                MetaData meta = getMeta();
 
                if (meta == null) {
@@ -95,4 +100,144 @@ class CliReader extends BasicReader {
                                        + author);
                }
        }
+
+       @Override
+       public void search(SupportType searchOn, String keywords, int page, int item)
+                       throws IOException {
+
+       }
+
+       @Override
+       public void searchTag(SupportType searchOn, int page, int item,
+                       String... tags) throws IOException {
+               BasicSearchable search = BasicSearchable.getSearchable(searchOn);
+               List<SearchableTag> stags = search.getTags();
+
+               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;
+                               }
+                       }
+
+                       if (stag != null) {
+                               search.fillTag(stag);
+                               stags = stag.getChildren();
+                       } else {
+                               stags = new ArrayList<SearchableTag>();
+                               break;
+                       }
+               }
+
+               if (stag != null) {
+                       if (page <= 0) {
+                               if (stag.isLeaf()) {
+                                       search.search(stag, 1);
+                                       System.out.println(stag.getPages());
+                               } else {
+                                       System.out.println(stag.getCount());
+                               }
+                       } else {
+                               List<MetaData> metas = null;
+                               List<SearchableTag> subtags = null;
+                               int count;
+
+                               if (stag.isLeaf()) {
+                                       metas = search.search(stag, page);
+                                       count = metas.size();
+                               } else {
+                                       subtags = stag.getChildren();
+                                       count = subtags.size();
+                               }
+
+                               if (item > 0) {
+                                       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("");
+                                                       }
+                                               } 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
+                                                       String stories = "stories";
+                                                       String num = StringUtils.formatNumber(subtag
+                                                                       .getCount());
+                                                       if (sp.isEmpty()) {
+                                                               System.out.println(String.format(
+                                                                               "%d/%d: %s, %s %s", page, item,
+                                                                               subtag.getName(), num, stories));
+                                                       } else {
+                                                               System.out.println(String.format(
+                                                                               "%d/%d: %s (%s), %s %s", page, item,
+                                                                               subtag.getName(), sp, num, stories));
+                                                       }
+                                               }
+                                       } else {
+                                               System.out.println("Invalid item: only " + count
+                                                               + " items found");
+                                       }
+                               } else {
+                                       if (metas != null) {
+                                               int i = 0;
+                                               for (MetaData meta : metas) {
+                                                       System.out
+                                                                       .println((i + 1) + ": " + meta.getTitle());
+                                                       i++;
+                                               }
+                                       } else {
+                                               int i = 1;
+                                               for (SearchableTag subtag : subtags) {
+                                                       String total = "";
+                                                       if (subtag.getCount() > 0) {
+                                                               total = StringUtils.formatNumber(subtag
+                                                                               .getCount());
+                                                       }
+
+                                                       if (total.isEmpty()) {
+                                                               System.out.println(String.format("%d: %s", i,
+                                                                               subtag.getName()));
+                                                       } else {
+                                                               System.out.println(String.format("%d: %s (%s)",
+                                                                               i, subtag.getName(), total));
+                                                       }
+
+                                                       i++;
+                                               }
+                                       }
+                               }
+                       }
+               } else {
+                       for (SearchableTag s : stags) {
+                               System.out.println(s.getName());
+                       }
+               }
+       }
 }