X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fcli%2FCliReader.java;h=d8d3a6c1e70b9a5b317d4c62e9f6bcf89783fb16;hb=124442f1bc9bfc67f74b2c20cdeea90bec3cd89c;hp=22d11cbdfbbb87f9f41b28844d8317087070af1b;hpb=6be5e3bb218e1ed118ad5e693e13d1da2b49df13;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/cli/CliReader.java b/src/be/nikiroo/fanfix/reader/cli/CliReader.java index 22d11cb..d8d3a6c 100644 --- a/src/be/nikiroo/fanfix/reader/cli/CliReader.java +++ b/src/be/nikiroo/fanfix/reader/cli/CliReader.java @@ -14,6 +14,7 @@ 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. @@ -101,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 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 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(); break; @@ -156,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 parents = new ArrayList(); - 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 @@ -204,31 +197,64 @@ 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 = ""; if (subtag.getCount() > 0) { - // TODO: use StringUtils fromNumber - total = " (" + subtag.getCount() + ")"; + total = StringUtils.formatNumber(subtag + .getCount()); } - System.out.println(i + ": " + subtag.getName() - + total); + + 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 { + // 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 metas) { + int i = 1; + for (MetaData meta : metas) { + System.out.println(i + ": " + meta.getTitle()); + i++; + } + } }