Update nikiroo-utils, update Library
authorNiki Roo <niki@nikiroo.be>
Sat, 1 Jul 2017 16:42:43 +0000 (18:42 +0200)
committerNiki Roo <niki@nikiroo.be>
Sat, 1 Jul 2017 16:42:43 +0000 (18:42 +0200)
libs/nikiroo-utils-1.6.0-sources.jar [moved from libs/nikiroo-utils-1.5.1-sources.jar with 68% similarity]
src/be/nikiroo/fanfix/Library.java

similarity index 68%
rename from libs/nikiroo-utils-1.5.1-sources.jar
rename to libs/nikiroo-utils-1.6.0-sources.jar
index 786794b6334d9d21272d0395f38ec40b52f18f58..1ec2951b17dc08ac7051355d62f75c9813b28aac 100644 (file)
Binary files a/libs/nikiroo-utils-1.5.1-sources.jar and b/libs/nikiroo-utils-1.6.0-sources.jar differ
index 80a9e8c54231d995a8ff89ed2e6a2a1628b409af..8a3895ad8c82a5c3e8e8754f3202f9da48e3edf8 100644 (file)
@@ -36,7 +36,9 @@ import be.nikiroo.utils.Progress;
  * @author niki
  */
 public class Library {
  * @author niki
  */
 public class Library {
-       private File baseDir;
+       protected File baseDir;
+       protected boolean localSpeed;
+
        private Map<MetaData, File> stories;
        private int lastId;
        private OutputType text;
        private Map<MetaData, File> stories;
        private int lastId;
        private OutputType text;
@@ -53,8 +55,10 @@ public class Library {
         *            the {@link OutputType} to save the images-focused stories into
         */
        public Library(File dir, OutputType text, OutputType image) {
         *            the {@link OutputType} to save the images-focused stories into
         */
        public Library(File dir, OutputType text, OutputType image) {
+               this();
+
                this.baseDir = dir;
                this.baseDir = dir;
-               this.stories = new HashMap<MetaData, File>();
+
                this.lastId = 0;
                this.text = text;
                this.image = image;
                this.lastId = 0;
                this.text = text;
                this.image = image;
@@ -62,6 +66,15 @@ public class Library {
                dir.mkdirs();
        }
 
                dir.mkdirs();
        }
 
+       /**
+        * Create a new {@link Library} with no link to the local machine.
+        * <p>
+        * Reserved for extensions.
+        */
+       protected Library() {
+               this.stories = new HashMap<MetaData, File>();
+       }
+
        /**
         * Refresh the {@link Library}, that is, make sure all stories are loaded.
         * 
        /**
         * Refresh the {@link Library}, that is, make sure all stories are loaded.
         * 
@@ -146,7 +159,7 @@ public class Library {
        public synchronized List<MetaData> getListByType(String type) {
                if (type != null) {
                        // convert the type to dir name
        public synchronized List<MetaData> getListByType(String type) {
                if (type != null) {
                        // convert the type to dir name
-                       type = getDir(type).getName();
+                       type = getExpectedDir(type).getName();
                }
 
                List<MetaData> list = new ArrayList<MetaData>();
                }
 
                List<MetaData> list = new ArrayList<MetaData>();
@@ -162,8 +175,8 @@ public class Library {
        }
 
        /**
        }
 
        /**
-        * Retrieve a {@link File} corresponding to the given {@link Story}, cover
-        * image not included.
+        * Retrieve a {@link MetaData} corresponding to the given {@link Story},
+        * cover image <b>MAY</b> not be included.
         * 
         * @param luid
         *            the Library UID of the story
         * 
         * @param luid
         *            the Library UID of the story
@@ -213,8 +226,10 @@ public class Library {
        public synchronized BufferedImage getCover(String luid) {
                MetaData meta = getInfo(luid);
                if (meta != null) {
        public synchronized BufferedImage getCover(String luid) {
                MetaData meta = getInfo(luid);
                if (meta != null) {
+                       getFile(luid); // to help remote implementation
                        try {
                        try {
-                               File infoFile = new File(getFile(meta).getPath() + ".info");
+                               File infoFile = new File(getExpectedFile(meta).getPath()
+                                               + ".info");
                                meta = readMeta(infoFile, true).getKey();
                                return meta.getCover();
                        } catch (IOException e) {
                                meta = readMeta(infoFile, true).getKey();
                                return meta.getCover();
                        } catch (IOException e) {
@@ -239,23 +254,24 @@ public class Library {
                if (luid != null) {
                        for (Entry<MetaData, File> entry : getStories(null).entrySet()) {
                                if (luid.equals(entry.getKey().getLuid())) {
                if (luid != null) {
                        for (Entry<MetaData, File> entry : getStories(null).entrySet()) {
                                if (luid.equals(entry.getKey().getLuid())) {
+                                       MetaData meta = entry.getKey();
+                                       File file = getFile(luid); // to help remote implementation
                                        try {
                                        try {
-                                               SupportType type = SupportType.valueOfAllOkUC(entry
-                                                               .getKey().getType());
-                                               URL url = entry.getValue().toURI().toURL();
+                                               SupportType type = SupportType.valueOfAllOkUC(meta
+                                                               .getType());
+                                               URL url = file.toURI().toURL();
                                                if (type != null) {
                                                        return BasicSupport.getSupport(type).process(url,
                                                                        pg);
                                                } else {
                                                        throw new IOException("Unknown type: "
                                                if (type != null) {
                                                        return BasicSupport.getSupport(type).process(url,
                                                                        pg);
                                                } else {
                                                        throw new IOException("Unknown type: "
-                                                                       + entry.getKey().getType());
+                                                                       + meta.getType());
                                                }
                                        } catch (IOException e) {
                                                // We should not have not-supported files in the
                                                // library
                                                Instance.syserr(new IOException(
                                                }
                                        } catch (IOException e) {
                                                // We should not have not-supported files in the
                                                // library
                                                Instance.syserr(new IOException(
-                                                               "Cannot load file from library: "
-                                                                               + entry.getValue().getPath(), e));
+                                                               "Cannot load file from library: " + file, e));
                                        }
                                }
                        }
                                        }
                                }
                        }
@@ -378,8 +394,8 @@ public class Library {
                        key.setLuid(luid);
                }
 
                        key.setLuid(luid);
                }
 
-               getDir(key.getSource()).mkdirs();
-               if (!getDir(key.getSource()).exists()) {
+               getExpectedDir(key.getSource()).mkdirs();
+               if (!getExpectedDir(key.getSource()).exists()) {
                        throw new IOException("Cannot create library dir");
                }
 
                        throw new IOException("Cannot create library dir");
                }
 
@@ -391,7 +407,7 @@ public class Library {
                }
 
                BasicOutput it = BasicOutput.getOutput(out, true);
                }
 
                BasicOutput it = BasicOutput.getOutput(out, true);
-               it.process(story, getFile(key).getPath(), pg);
+               it.process(story, getExpectedFile(key).getPath(), pg);
 
                // empty cache
                stories.clear();
 
                // empty cache
                stories.clear();
@@ -439,7 +455,7 @@ public class Library {
                MetaData meta = getInfo(luid);
                if (meta != null) {
                        meta.setSource(newType);
                MetaData meta = getInfo(luid);
                if (meta != null) {
                        meta.setSource(newType);
-                       File newDir = getDir(meta.getSource());
+                       File newDir = getExpectedDir(meta.getSource());
                        if (!newDir.exists()) {
                                newDir.mkdir();
                        }
                        if (!newDir.exists()) {
                                newDir.mkdir();
                        }
@@ -469,6 +485,18 @@ public class Library {
                return false;
        }
 
                return false;
        }
 
+       /**
+        * The library is accessed locally or at local speed (for operations like
+        * {@link Library#getFile(String)}).
+        * <p>
+        * It could be cached, too, it is only about the access speed.
+        * 
+        * @return TRUE if it is accessed locally
+        */
+       public boolean isLocalSpeed() {
+               return localSpeed;
+       }
+
        /**
         * Return the list of files/dirs on disk for this {@link Story}.
         * <p>
        /**
         * Return the list of files/dirs on disk for this {@link Story}.
         * <p>
@@ -483,7 +511,7 @@ public class Library {
                List<File> files = new ArrayList<File>();
 
                MetaData meta = getInfo(luid);
                List<File> files = new ArrayList<File>();
 
                MetaData meta = getInfo(luid);
-               File file = getStories(null).get(meta);
+               File file = getFile(luid); // to help remote implementation
 
                if (file != null) {
                        files.add(file);
 
                if (file != null) {
                        files.add(file);
@@ -539,7 +567,7 @@ public class Library {
         * 
         * @return the target directory
         */
         * 
         * @return the target directory
         */
-       private File getDir(String type) {
+       private File getExpectedDir(String type) {
                String source = type.replaceAll("[^a-zA-Z0-9._+-]", "_");
                return new File(baseDir, source);
        }
                String source = type.replaceAll("[^a-zA-Z0-9._+-]", "_");
                return new File(baseDir, source);
        }
@@ -553,13 +581,14 @@ public class Library {
         * 
         * @return the target
         */
         * 
         * @return the target
         */
-       private File getFile(MetaData key) {
+       private File getExpectedFile(MetaData key) {
                String title = key.getTitle();
                if (title == null) {
                        title = "";
                }
                title = title.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.getSource()), key.getLuid() + "_" + title);
+               return new File(getExpectedDir(key.getSource()), key.getLuid() + "_"
+                               + title);
        }
 
        /**
        }
 
        /**
@@ -570,7 +599,7 @@ public class Library {
         * 
         * @return the stories
         */
         * 
         * @return the stories
         */
-       private synchronized Map<MetaData, File> getStories(Progress pg) {
+       protected synchronized Map<MetaData, File> getStories(Progress pg) {
                if (pg == null) {
                        pg = new Progress();
                } else {
                if (pg == null) {
                        pg = new Progress();
                } else {