X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2FBasicReader.java;h=0ea403c40f4fdf5af11da2d1345cf5184069b6fb;hb=62c63b0724f4bc45999cb2e7186b4b3ada479a0a;hp=cbd4e0308a4584895b805d7ed3ac8bbdaf2c3732;hpb=e42573a004fac26378c693ce9ef0d6319713c682;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/reader/BasicReader.java b/src/be/nikiroo/fanfix/reader/BasicReader.java index cbd4e03..0ea403c 100644 --- a/src/be/nikiroo/fanfix/reader/BasicReader.java +++ b/src/be/nikiroo/fanfix/reader/BasicReader.java @@ -29,7 +29,9 @@ public abstract class BasicReader implements Reader { private static ReaderType defaultType = ReaderType.GUI; private BasicLibrary lib; + private MetaData meta; private Story story; + private int chapter; /** * Take the default reader type configuration from the config file. @@ -46,10 +48,16 @@ public abstract class BasicReader implements Reader { } } - public Story getStory() { + @Override + public synchronized Story getStory(Progress pg) { + if (story == null) { + story = getLibrary().getStory(meta.getLuid(), pg); + } + return story; } + @Override public BasicLibrary getLibrary() { if (lib == null) { lib = defaultLibrary; @@ -58,18 +66,34 @@ public abstract class BasicReader implements Reader { return lib; } - public void setLibrary(LocalLibrary lib) { + @Override + public void setLibrary(BasicLibrary lib) { this.lib = lib; } - public void setStory(String luid, Progress pg) throws IOException { - story = lib.getStory(luid, pg); - if (story == null) { + @Override + public MetaData getMeta() { + return meta; + } + + @Override + public synchronized void setMeta(MetaData meta) throws IOException { + setMeta(meta == null ? null : meta.getLuid()); // must check the library + } + + @Override + public synchronized void setMeta(String luid) throws IOException { + story = null; + meta = getLibrary().getInfo(luid); + + if (meta == null) { throw new IOException("Cannot retrieve story from library: " + luid); } } - public void setStory(URL source, Progress pg) throws IOException { + @Override + public synchronized void setMeta(URL source, Progress pg) + throws IOException { BasicSupport support = BasicSupport.getSupport(source); if (support == null) { throw new IOException("URL not supported: " + source.toString()); @@ -80,8 +104,19 @@ public abstract class BasicReader implements Reader { throw new IOException( "Cannot retrieve story from external source: " + source.toString()); - } + + meta = story.getMeta(); + } + + @Override + public int getChapter() { + return chapter; + } + + @Override + public void setChapter(int chapter) { + this.chapter = chapter; } /** @@ -98,7 +133,7 @@ public abstract class BasicReader implements Reader { .getTypeName()); } } catch (Exception e) { - Instance.syserr(new Exception("Cannot create a reader of type: " + Instance.getTraceHandler().error(new Exception("Cannot create a reader of type: " + defaultType + " (Not compiled in?)", e)); } @@ -106,7 +141,7 @@ public abstract class BasicReader implements Reader { } /** - * The default {@link ReaderType} used when calling + * The default {@link Reader.ReaderType} used when calling * {@link BasicReader#getReader()}. * * @return the default type @@ -116,7 +151,7 @@ public abstract class BasicReader implements Reader { } /** - * The default {@link ReaderType} used when calling + * The default {@link Reader.ReaderType} used when calling * {@link BasicReader#getReader()}. * * @param defaultType @@ -177,11 +212,12 @@ public abstract class BasicReader implements Reader { * @throws IOException * in case of I/O error */ - public static void open(BasicLibrary lib, String luid) throws IOException { + public static void openExternal(BasicLibrary lib, String luid) + throws IOException { MetaData meta = lib.getInfo(luid); - File target = lib.getFile(luid); + File target = lib.getFile(luid, null); - open(meta, target); + openExternal(meta, target); } /** @@ -196,7 +232,8 @@ public abstract class BasicReader implements Reader { * @throws IOException * in case of I/O error */ - protected static void open(MetaData meta, File target) throws IOException { + protected static void openExternal(MetaData meta, File target) + throws IOException { String program = null; if (meta.isImageDocument()) { program = Instance.getUiConfig().getString(