X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FBasicLibrary.java;h=8c86fc90e5baf2449689f2857f1f86ff52877cd8;hb=ecfb936ef1c22ff75a55d8fc80e9daf767a55f34;hp=328ef656e444fbe4686dca82e08fafa204590d0d;hpb=99ccbdf63b539f1f40e070f5833f2d15fcf79830;p=fanfix.git
diff --git a/src/be/nikiroo/fanfix/library/BasicLibrary.java b/src/be/nikiroo/fanfix/library/BasicLibrary.java
index 328ef65..8c86fc9 100644
--- a/src/be/nikiroo/fanfix/library/BasicLibrary.java
+++ b/src/be/nikiroo/fanfix/library/BasicLibrary.java
@@ -1,9 +1,9 @@
package be.nikiroo.fanfix.library;
-import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -15,6 +15,7 @@ import be.nikiroo.fanfix.output.BasicOutput;
import be.nikiroo.fanfix.output.BasicOutput.OutputType;
import be.nikiroo.fanfix.supported.BasicSupport;
import be.nikiroo.fanfix.supported.BasicSupport.SupportType;
+import be.nikiroo.utils.Image;
import be.nikiroo.utils.Progress;
/**
@@ -29,6 +30,22 @@ import be.nikiroo.utils.Progress;
* @author niki
*/
abstract public class BasicLibrary {
+ /**
+ * A {@link BasicLibrary} status.
+ *
+ * @author niki
+ */
+ public enum Status {
+ /** The library is ready. */
+ READY,
+ /** The library is invalid (not correctly set up). */
+ INVALID,
+ /** You are not allowed to access this library. */
+ UNAUTORIZED,
+ /** The library is currently out of commission. */
+ UNAVAILABLE,
+ }
+
/**
* Return a name for this library (the UI may display this).
*
@@ -40,6 +57,15 @@ abstract public class BasicLibrary {
return "";
}
+ /**
+ * The library status.
+ *
+ * @return the current status
+ */
+ public Status getStatus() {
+ return Status.READY;
+ }
+
/**
* Retrieve the main {@link File} corresponding to the given {@link Story},
* which can be passed to an external reader or instance.
@@ -48,10 +74,12 @@ abstract public class BasicLibrary {
*
* @param luid
* the Library UID of the story
+ * @param pg
+ * the optional {@link Progress}
*
* @return the corresponding {@link Story}
*/
- public abstract File getFile(String luid);
+ public abstract File getFile(String luid, Progress pg);
/**
* Return the cover image associated to this story.
@@ -61,7 +89,7 @@ abstract public class BasicLibrary {
*
* @return the cover image
*/
- public abstract BufferedImage getCover(String luid);
+ public abstract Image getCover(String luid);
/**
* Return the cover image associated to this source.
@@ -73,7 +101,7 @@ abstract public class BasicLibrary {
*
* @return the cover image or NULL
*/
- public BufferedImage getSourceCover(String source) {
+ public Image getSourceCover(String source) {
List metas = getListBySource(source);
if (metas.size() > 0) {
return getCover(metas.get(0).getLuid());
@@ -107,7 +135,19 @@ abstract public class BasicLibrary {
* Invalidate the {@link Story} cache (when the content should be re-read
* because it was changed).
*/
- protected abstract void clearCache();
+ protected void invalidateInfo() {
+ invalidateInfo(null);
+ }
+
+ /**
+ * Invalidate the {@link Story} cache (when the content should be re-read
+ * because it was changed).
+ *
+ * @param luid
+ * the luid of the {@link Story} to clear from the cache, or NULL
+ * for all stories
+ */
+ protected abstract void invalidateInfo(String luid);
/**
* Return the next LUID that can be used.
@@ -145,26 +185,14 @@ abstract public class BasicLibrary {
throws IOException;
/**
- * Refresh the {@link BasicLibrary}, that is, make sure all stories are
+ * Refresh the {@link BasicLibrary}, that is, make sure all metas are
* loaded.
*
- * @param full
- * force the full content of the stories to be loaded, not just
- * the {@link MetaData}
- *
* @param pg
* the optional progress reporter
*/
- public void refresh(boolean full, Progress pg) {
- if (full) {
- // TODO: progress
- List metas = getMetas(pg);
- for (MetaData meta : metas) {
- getStory(meta.getLuid(), null);
- }
- } else {
- getMetas(pg);
- }
+ public void refresh(Progress pg) {
+ getMetas(pg);
}
/**
@@ -294,30 +322,44 @@ abstract public class BasicLibrary {
* @return the corresponding {@link Story} or NULL if not found
*/
public synchronized Story getStory(String luid, Progress pg) {
- // TODO: pg
if (pg == null) {
pg = new Progress();
}
+ Progress pgGet = new Progress();
+ Progress pgProcess = new Progress();
+
+ pg.setMinMax(0, 2);
+ pg.addProgress(pgGet, 1);
+ pg.addProgress(pgProcess, 1);
+
Story story = null;
for (MetaData meta : getMetas(null)) {
if (meta.getLuid().equals(luid)) {
- File file = getFile(luid);
+ File file = getFile(luid, pgGet);
+ pgGet.done();
try {
SupportType type = SupportType.valueOfAllOkUC(meta
.getType());
URL url = file.toURI().toURL();
if (type != null) {
- story = BasicSupport.getSupport(type).process(url, pg);
+ story = BasicSupport.getSupport(type).process(url,
+ pgProcess);
+ // Because we do not want to clear the meta cache:
+ meta.setCover(story.getMeta().getCover());
+ story.setMeta(meta);
+ //
} else {
throw new IOException("Unknown type: " + meta.getType());
}
} catch (IOException e) {
// We should not have not-supported files in the
// library
- Instance.syserr(new IOException(
- "Cannot load file from library: " + file, e));
+ Instance.getTraceHandler().error(
+ new IOException("Cannot load file from library: "
+ + file, e));
} finally {
+ pgProcess.done();
pg.done();
}
@@ -339,13 +381,15 @@ abstract public class BasicLibrary {
*
* @return the imported {@link Story}
*
+ * @throws UnknownHostException
+ * if the host is not supported
* @throws IOException
* in case of I/O error
*/
public Story imprt(URL url, Progress pg) throws IOException {
BasicSupport support = BasicSupport.getSupport(url);
if (support == null) {
- throw new IOException("URL not supported: " + url.toString());
+ throw new UnknownHostException("" + url);
}
return save(support.process(url, pg), null);
@@ -413,7 +457,7 @@ abstract public class BasicLibrary {
pg.addProgress(pgOut, 1);
}
- BasicOutput out = BasicOutput.getOutput(type, false);
+ BasicOutput out = BasicOutput.getOutput(type, false, false);
if (out == null) {
throw new IOException("Output type not supported: " + type);
}
@@ -473,13 +517,13 @@ abstract public class BasicLibrary {
meta.setLuid(luid);
}
- if (getInfo(luid) != null) {
+ if (luid != null && getInfo(luid) != null) {
delete(luid);
}
doSave(story, pg);
- clearCache();
+ invalidateInfo(luid);
return story;
}
@@ -495,7 +539,7 @@ abstract public class BasicLibrary {
*/
public synchronized void delete(String luid) throws IOException {
doDelete(luid);
- clearCache();
+ invalidateInfo(luid);
}
/**