(README update)
[nikiroo-utils.git] / src / be / nikiroo / fanfix / Library.java
index cae2d7dc781990aa4bf8be024d2e53099a9b4582..ccbd7d40b67b7e6e78c8b43fd95a999c9eb49285 100644 (file)
@@ -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<String> getTypes() {
                List<String> list = new ArrayList<String>();
                for (Entry<MetaData, File> 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<String> getAuthors() {
+               List<String> list = new ArrayList<String>();
+               for (Entry<MetaData, File> 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<MetaData> getListByAuthor(String author) {
+               List<MetaData> list = new ArrayList<MetaData>();
+               for (Entry<MetaData, File> 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<MetaData> getList(String type) {
+       public synchronized List<MetaData> getListByType(String type) {
                List<MetaData> list = new ArrayList<MetaData>();
                for (Entry<MetaData, File> 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);
        }