X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2FLibrary.java;h=ccbd7d40b67b7e6e78c8b43fd95a999c9eb49285;hb=b2612f9dcd0a37f4ec22fcabe55390280e06daf2;hp=cae2d7dc781990aa4bf8be024d2e53099a9b4582;hpb=10d558d2429c984327f9e5a16933fefe5cc37314;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/Library.java b/src/be/nikiroo/fanfix/Library.java index cae2d7d..ccbd7d4 100644 --- a/src/be/nikiroo/fanfix/Library.java +++ b/src/be/nikiroo/fanfix/Library.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -17,6 +18,7 @@ import be.nikiroo.fanfix.output.BasicOutput.OutputType; import be.nikiroo.fanfix.supported.BasicSupport; import be.nikiroo.fanfix.supported.BasicSupport.SupportType; import be.nikiroo.fanfix.supported.InfoReader; +import be.nikiroo.utils.IOUtils; import be.nikiroo.utils.Progress; /** @@ -62,12 +64,53 @@ public class Library { public synchronized List getTypes() { List list = new ArrayList(); for (Entry entry : getStories().entrySet()) { - String storyType = entry.getValue().getParentFile().getName(); + String storyType = entry.getKey().getSource(); if (!list.contains(storyType)) { list.add(storyType); } } + Collections.sort(list); + return list; + } + + /** + * List all the known authors of stories. + * + * @return the authors + */ + public synchronized List getAuthors() { + List list = new ArrayList(); + for (Entry entry : getStories().entrySet()) { + String storyAuthor = entry.getKey().getAuthor(); + if (!list.contains(storyAuthor)) { + list.add(storyAuthor); + } + } + + Collections.sort(list); + return list; + } + + /** + * List all the stories of the given author in the {@link Library}, or all + * the stories if NULL is passed as an author. + * + * @param author + * the author of the stories to retrieve, or NULL for all + * + * @return the stories + */ + public synchronized List getListByAuthor(String author) { + List list = new ArrayList(); + for (Entry entry : getStories().entrySet()) { + String storyAuthor = entry.getKey().getAuthor(); + if (author == null || author.equalsIgnoreCase(storyAuthor)) { + list.add(entry.getKey()); + } + } + + Collections.sort(list); return list; } @@ -80,7 +123,7 @@ public class Library { * * @return the stories */ - public synchronized List getList(String type) { + public synchronized List getListByType(String type) { List list = new ArrayList(); for (Entry entry : getStories().entrySet()) { String storyType = entry.getValue().getParentFile().getName(); @@ -89,6 +132,7 @@ public class Library { } } + Collections.sort(list); return list; } @@ -322,13 +366,23 @@ public class Library { if (file != null) { if (file.delete()) { - String newExt = getOutputType(meta).getDefaultExtension(false); + String readerExt = getOutputType(meta) + .getDefaultExtension(true); + String fileExt = getOutputType(meta).getDefaultExtension(false); String path = file.getAbsolutePath(); + if (readerExt != null && !readerExt.equals(fileExt)) { + path = path + .substring(0, path.length() - readerExt.length()) + + fileExt; + file = new File(path); + IOUtils.deltree(file); + } + File infoFile = new File(path + ".info"); if (!infoFile.exists()) { infoFile = new File(path.substring(0, path.length() - - newExt.length()) + - fileExt.length()) + ".info"); } infoFile.delete(); @@ -339,7 +393,7 @@ public class Library { File coverFile = new File(path + coverExt); if (!coverFile.exists()) { coverFile = new File(path.substring(0, path.length() - - newExt.length())); + - fileExt.length())); } coverFile.delete(); @@ -377,7 +431,11 @@ public class Library { * @return the target */ private File getFile(MetaData key) { - String title = key.getTitle().replaceAll("[^a-zA-Z0-9._+-]", "_"); + String title = key.getTitle(); + if (title == null) { + title = ""; + } + title = title.replaceAll("[^a-zA-Z0-9._+-]", "_"); return new File(getDir(key), key.getLuid() + "_" + title); }