X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FBasicLibrary.java;h=d753267ee5bce6082cfb4c0f277a2b0244efe3bb;hb=e1de8087ab1623f7624018af905ea3bb0ef45802;hp=8c86fc90e5baf2449689f2857f1f86ff52877cd8;hpb=16a81ef7656c5c692fb831927e75edde25dd77a0;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/library/BasicLibrary.java b/src/be/nikiroo/fanfix/library/BasicLibrary.java index 8c86fc9..d753267 100644 --- a/src/be/nikiroo/fanfix/library/BasicLibrary.java +++ b/src/be/nikiroo/fanfix/library/BasicLibrary.java @@ -14,7 +14,7 @@ import be.nikiroo.fanfix.data.Story; 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.fanfix.supported.SupportType; import be.nikiroo.utils.Image; import be.nikiroo.utils.Progress; @@ -94,7 +94,8 @@ abstract public class BasicLibrary { /** * Return the cover image associated to this source. *

- * By default, return the cover of the first story with this source. + * By default, return the custom cover if any, and if not, return the cover + * of the first story with this source. * * @param source * the source @@ -102,6 +103,11 @@ abstract public class BasicLibrary { * @return the cover image or NULL */ public Image getSourceCover(String source) { + Image custom = getCustomSourceCover(source); + if (custom != null) { + return custom; + } + List metas = getListBySource(source); if (metas.size() > 0) { return getCover(metas.get(0).getLuid()); @@ -110,6 +116,20 @@ abstract public class BasicLibrary { return null; } + /** + * Return the custom cover image associated to this source. + *

+ * By default, return NULL. + * + * @param source + * the source to look for + * + * @return the custom cover or NULL if none + */ + public Image getCustomSourceCover(@SuppressWarnings("unused") String source) { + return null; + } + /** * Fix the source cover to the given story cover. * @@ -135,19 +155,29 @@ abstract public class BasicLibrary { * Invalidate the {@link Story} cache (when the content should be re-read * because it was changed). */ - protected void invalidateInfo() { - invalidateInfo(null); + protected void deleteInfo() { + deleteInfo(null); } /** - * Invalidate the {@link Story} cache (when the content should be re-read - * because it was changed). + * Invalidate the {@link Story} cache (when the content is removed). + *

+ * All the cache can be deleted if NULL is passed as meta. * * @param luid - * the luid of the {@link Story} to clear from the cache, or NULL + * the LUID of the {@link Story} to clear from the cache, or NULL * for all stories */ - protected abstract void invalidateInfo(String luid); + protected abstract void deleteInfo(String luid); + + /** + * Invalidate the {@link Story} cache (when the content has changed, but we + * already have it) with the new given meta. + * + * @param meta + * the {@link Story} to clear from the cache + */ + protected abstract void updateInfo(MetaData meta); /** * Return the next LUID that can be used. @@ -343,8 +373,9 @@ abstract public class BasicLibrary { .getType()); URL url = file.toURI().toURL(); if (type != null) { - story = BasicSupport.getSupport(type).process(url, - pgProcess); + story = BasicSupport.getSupport(type, url) // + .process(pgProcess); + // Because we do not want to clear the meta cache: meta.setCover(story.getMeta().getCover()); story.setMeta(meta); @@ -387,12 +418,24 @@ abstract public class BasicLibrary { * in case of I/O error */ public Story imprt(URL url, Progress pg) throws IOException { + if (pg == null) + pg = new Progress(); + + pg.setMinMax(0, 1000); + Progress pgProcess = new Progress(); + Progress pgSave = new Progress(); + pg.addProgress(pgProcess, 800); + pg.addProgress(pgSave, 200); + BasicSupport support = BasicSupport.getSupport(url); if (support == null) { throw new UnknownHostException("" + url); } - return save(support.process(url, pg), null); + Story story = save(support.process(pgProcess), pgSave); + pg.done(); + + return story; } /** @@ -507,6 +550,10 @@ 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); + // Do not change the original metadata, but change the original story MetaData meta = story.getMeta().clone(); story.setMeta(meta); @@ -521,9 +568,13 @@ abstract public class BasicLibrary { delete(luid); } - doSave(story, pg); + story = doSave(story, pg); + + updateInfo(story.getMeta()); - invalidateInfo(luid); + Instance.getTraceHandler().trace( + this.getClass().getSimpleName() + ": story saved (" + luid + + ")"); return story; } @@ -538,8 +589,15 @@ 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); + doDelete(luid); - invalidateInfo(luid); + deleteInfo(luid); + + Instance.getTraceHandler().trace( + this.getClass().getSimpleName() + ": story deleted (" + luid + + ")"); } /**