From: Niki Roo Date: Sat, 1 Jul 2017 16:42:43 +0000 (+0200) Subject: Update nikiroo-utils, update Library X-Git-Url: https://git.nikiroo.be/?a=commitdiff_plain;h=0d781e306746cf460f1f41338eb437f32cf9db33;p=nikiroo-utils.git Update nikiroo-utils, update Library --- diff --git a/libs/nikiroo-utils-1.5.1-sources.jar b/libs/nikiroo-utils-1.6.0-sources.jar similarity index 68% rename from libs/nikiroo-utils-1.5.1-sources.jar rename to libs/nikiroo-utils-1.6.0-sources.jar index 786794b..1ec2951 100644 Binary files a/libs/nikiroo-utils-1.5.1-sources.jar and b/libs/nikiroo-utils-1.6.0-sources.jar differ diff --git a/src/be/nikiroo/fanfix/Library.java b/src/be/nikiroo/fanfix/Library.java index 80a9e8c..8a3895a 100644 --- a/src/be/nikiroo/fanfix/Library.java +++ b/src/be/nikiroo/fanfix/Library.java @@ -36,7 +36,9 @@ import be.nikiroo.utils.Progress; * @author niki */ public class Library { - private File baseDir; + protected File baseDir; + protected boolean localSpeed; + private Map 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) { + this(); + this.baseDir = dir; - this.stories = new HashMap(); + this.lastId = 0; this.text = text; this.image = image; @@ -62,6 +66,15 @@ public class Library { dir.mkdirs(); } + /** + * Create a new {@link Library} with no link to the local machine. + *

+ * Reserved for extensions. + */ + protected Library() { + this.stories = new HashMap(); + } + /** * Refresh the {@link Library}, that is, make sure all stories are loaded. * @@ -146,7 +159,7 @@ public class Library { public synchronized List getListByType(String type) { if (type != null) { // convert the type to dir name - type = getDir(type).getName(); + type = getExpectedDir(type).getName(); } List list = new ArrayList(); @@ -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 MAY not be included. * * @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) { + getFile(luid); // to help remote implementation 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) { @@ -239,23 +254,24 @@ public class Library { if (luid != null) { for (Entry entry : getStories(null).entrySet()) { if (luid.equals(entry.getKey().getLuid())) { + MetaData meta = entry.getKey(); + File file = getFile(luid); // to help remote implementation 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: " - + entry.getKey().getType()); + + meta.getType()); } } 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); } - 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"); } @@ -391,7 +407,7 @@ public class Library { } BasicOutput it = BasicOutput.getOutput(out, true); - it.process(story, getFile(key).getPath(), pg); + it.process(story, getExpectedFile(key).getPath(), pg); // empty cache stories.clear(); @@ -439,7 +455,7 @@ public class Library { 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(); } @@ -469,6 +485,18 @@ public class Library { return false; } + /** + * The library is accessed locally or at local speed (for operations like + * {@link Library#getFile(String)}). + *

+ * 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}. *

@@ -483,7 +511,7 @@ public class Library { List files = new ArrayList(); MetaData meta = getInfo(luid); - File file = getStories(null).get(meta); + File file = getFile(luid); // to help remote implementation if (file != null) { files.add(file); @@ -539,7 +567,7 @@ public class Library { * * @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); } @@ -553,13 +581,14 @@ public class Library { * * @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._+-]", "_"); - 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 */ - private synchronized Map getStories(Progress pg) { + protected synchronized Map getStories(Progress pg) { if (pg == null) { pg = new Progress(); } else {