X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FBasicLibrary.java;h=7f286079ed1fe87c88f2ec798a85c26774950089;hb=e4e740f55b13b48f849e44c8f9a7ef5b746835c1;hp=099859dcfaffed075f30b3d716b790f644a43a09;hpb=d442b96e0b1453c21abf7f34bfaf73dcbed2a7ee;p=fanfix.git
diff --git a/src/be/nikiroo/fanfix/library/BasicLibrary.java b/src/be/nikiroo/fanfix/library/BasicLibrary.java
index 099859d..7f28607 100644
--- a/src/be/nikiroo/fanfix/library/BasicLibrary.java
+++ b/src/be/nikiroo/fanfix/library/BasicLibrary.java
@@ -122,6 +122,13 @@ abstract public class BasicLibrary {
*/
public abstract Image getCover(String luid) throws IOException;
+ // TODO: ensure it is the main used interface
+ public synchronized MetaResultList getList(Progress pg) throws IOException {
+ return new MetaResultList(getMetas(pg));
+ }
+
+ //TODO: make something for (normal and custom) not-story covers
+
/**
* Return the cover image associated to this source.
*
@@ -142,7 +149,7 @@ abstract public class BasicLibrary {
return custom;
}
- List metas = getListBySource(source);
+ List metas = getList().filter(source, null, null);
if (metas.size() > 0) {
return getCover(metas.get(0).getLuid());
}
@@ -170,7 +177,7 @@ abstract public class BasicLibrary {
return custom;
}
- List metas = getListByAuthor(author);
+ List metas = getList().filter(null, author, null);
if (metas.size() > 0) {
return getCover(metas.get(0).getLuid());
}
@@ -245,6 +252,8 @@ abstract public class BasicLibrary {
/**
* Return the list of stories (represented by their {@link MetaData}, which
* MAY not have the cover included).
+ *
+ * The returned list MUST be a copy, not the original one.
*
* @param pg
* the optional {@link Progress}
@@ -329,13 +338,43 @@ abstract public class BasicLibrary {
* @param pg
* the optional progress reporter
*/
- public void refresh(Progress pg) {
+ public synchronized void refresh(Progress pg) {
try {
getMetas(pg);
} catch (IOException e) {
// We will let it fail later
}
}
+
+ /**
+ * Check if the {@link Story} denoted by this Library UID is present in the
+ * cache (if we have no cache, we default to true).
+ *
+ * @param luid
+ * the Library UID
+ *
+ * @return TRUE if it is
+ */
+ public boolean isCached(String luid) {
+ // By default, everything is cached
+ return true;
+ }
+
+ /**
+ * Clear the {@link Story} from the cache, if needed.
+ *
+ * The next time we try to retrieve the {@link Story}, it may be required to
+ * cache it again.
+ *
+ * @param luid
+ * the story to clear
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ public void clearFromCache(String luid) throws IOException {
+ // By default, this is a noop.
+ }
/**
* List all the known types (sources) of stories.
@@ -558,64 +597,8 @@ abstract public class BasicLibrary {
* @throws IOException
* in case of IOException
*/
- public synchronized List getList() throws IOException {
- return getMetas(null);
- }
-
- /**
- * List all the stories of the given source type in the {@link BasicLibrary}
- * , or all the stories if NULL is passed as a type.
- *
- * Cover images not included.
- *
- * @param type
- * the type of story to retrieve, or NULL for all
- *
- * @return the stories
- *
- * @throws IOException
- * in case of IOException
- */
- public synchronized List getListBySource(String type)
- throws IOException {
- List list = new ArrayList();
- for (MetaData meta : getMetas(null)) {
- String storyType = meta.getSource();
- if (type == null || type.equalsIgnoreCase(storyType)) {
- list.add(meta);
- }
- }
-
- Collections.sort(list);
- return list;
- }
-
- /**
- * List all the stories of the given author in the {@link BasicLibrary}, or
- * all the stories if NULL is passed as an author.
- *
- * Cover images not included.
- *
- * @param author
- * the author of the stories to retrieve, or NULL for all
- *
- * @return the stories
- *
- * @throws IOException
- * in case of IOException
- */
- public synchronized List getListByAuthor(String author)
- throws IOException {
- List list = new ArrayList();
- for (MetaData meta : getMetas(null)) {
- String storyAuthor = meta.getAuthor();
- if (author == null || author.equalsIgnoreCase(storyAuthor)) {
- list.add(meta);
- }
- }
-
- Collections.sort(list);
- return list;
+ public MetaResultList getList() throws IOException {
+ return getList(null);
}
/**
@@ -730,10 +713,8 @@ abstract public class BasicLibrary {
} catch (IOException e) {
// We should not have not-supported files in the
// library
- Instance.getTraceHandler().error(
- new IOException(String.format(
- "Cannot load file of type '%s' from library: %s",
- meta.getType(), file), e));
+ Instance.getInstance().getTraceHandler().error(new IOException(
+ String.format("Cannot load file of type '%s' from library: %s", meta.getType(), file), e));
} finally {
pgProcess.done();
pg.done();
@@ -774,6 +755,7 @@ abstract public class BasicLibrary {
}
Story story = save(support.process(pgProcess), pgSave);
+ pg.setName(story.getMeta().getTitle());
pg.done();
return story.getMeta();
@@ -891,14 +873,18 @@ abstract public class BasicLibrary {
*/
public synchronized Story save(Story story, String luid, Progress pg)
throws IOException {
-
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": saving story " + luid);
+ if (pg == null) {
+ pg = new Progress();
+ }
+
+ Instance.getInstance().getTraceHandler().trace(this.getClass().getSimpleName() + ": saving story " + luid);
// Do not change the original metadata, but change the original story
MetaData meta = story.getMeta().clone();
story.setMeta(meta);
+ pg.setName("Saving story");
+
if (luid == null || luid.isEmpty()) {
meta.setLuid(String.format("%03d", getNextId()));
} else {
@@ -913,10 +899,11 @@ abstract public class BasicLibrary {
updateInfo(story.getMeta());
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": story saved (" + luid
- + ")");
+ Instance.getInstance().getTraceHandler()
+ .trace(this.getClass().getSimpleName() + ": story saved (" + luid + ")");
+ pg.setName(meta.getTitle());
+ pg.done();
return story;
}
@@ -930,14 +917,13 @@ abstract public class BasicLibrary {
* in case of I/O error
*/
public synchronized void delete(String luid) throws IOException {
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": deleting story " + luid);
+ Instance.getInstance().getTraceHandler().trace(this.getClass().getSimpleName() + ": deleting story " + luid);
doDelete(luid);
invalidateInfo(luid);
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": story deleted (" + luid
+ Instance.getInstance().getTraceHandler()
+ .trace(this.getClass().getSimpleName() + ": story deleted (" + luid
+ ")");
}
@@ -1039,8 +1025,6 @@ abstract public class BasicLibrary {
meta.setTitle(newTitle);
meta.setAuthor(newAuthor);
saveMeta(meta, pg);
-
- invalidateInfo(luid);
}
/**