X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fcli%2FCliReader.java;h=6d9841830982533247e20dfcc8c5f2b9461a61af;hb=8b153400ae5ab24891446be1b3423ea17e71b49c;hp=7a4abfb28c91490f92dd50140c10eb9e1404e134;hpb=91b82a5cbd8a9c90798d1bd49bfa9a061e652a6a;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/cli/CliReader.java b/src/be/nikiroo/fanfix/reader/cli/CliReader.java index 7a4abfb..6d98418 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. @@ -99,31 +100,35 @@ class CliReader extends BasicReader { + author); } } - + @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) + throws IOException { + } - + @Override - public void searchTag(SupportType searchOn, int page, int item, String... tags) throws IOException { + public void searchTag(SupportType searchOn, int page, int item, + 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; @@ -133,6 +138,7 @@ class CliReader extends BasicReader { if (stag != null) { if (page <= 0) { if (stag.isLeaf()) { + search.search(stag, 1); System.out.println(stag.getPages()); } else { System.out.println(stag.getCount()); @@ -141,7 +147,7 @@ class CliReader extends BasicReader { List metas = null; List subtags = null; int count; - + if (stag.isLeaf()) { metas = search.search(stag, page); count = metas.size(); @@ -149,12 +155,14 @@ class CliReader extends BasicReader { subtags = stag.getChildren(); count = subtags.size(); } - + if (item > 0) { if (item <= count) { if (metas != null) { MetaData meta = metas.get(item - 1); - System.out.println(item + ": " + meta.getTitle()); + System.out.println(page + "/" + item + ": " + + meta.getTitle()); + System.out.println(); System.out.println(meta.getUrl()); System.out.println(); System.out.println("Tags: " + meta.getTags()); @@ -165,33 +173,60 @@ class CliReader extends BasicReader { } } else { SearchableTag subtag = subtags.get(item - 1); - // TODO: display fixed info, not debug - System.out.println(subtag); + + // TODO: i18n + 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 + " items found"); + System.out.println("Invalid item: only " + count + + " items found"); } } else { if (metas != null) { - int i = 0; + // TODO i18n + System.out.println(String.format("Content of %s: ", + fqnTag)); + int i = 1; for (MetaData meta : metas) { - System.out.println((i + 1) + ": " + meta.getTitle()); + System.out.println(i + ": " + meta.getTitle()); i++; } } 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) { - System.out.println(subtag.getName() + " (" + subtag.getCount() + ")"); + total = StringUtils.formatNumber(subtag + .getCount()); + } + + if (total.isEmpty()) { + System.out.println(String.format("%d: %s", i, + subtag.getName())); } else { - System.out.println(subtag.getName()); + 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++; } } }