+ String typeString = Instance.getInstance().getConfig().getString(Config.READER_TYPE);
+ if (typeString != null && !typeString.isEmpty()) {
+ try {
+ ReaderType type = ReaderType.valueOf(typeString.toUpperCase());
+ defaultType = type;
+ } catch (IllegalArgumentException e) {
+ // Do nothing
+ }
+ }
+ }
+
+ @Override
+ public synchronized Story getStory(Progress pg) throws IOException {
+ if (story == null) {
+ story = getLibrary().getStory(meta.getLuid(), pg);
+ }
+
+ return story;
+ }
+
+ @Override
+ public BasicLibrary getLibrary() {
+ if (lib == null) {
+ lib = defaultLibrary;
+ }
+
+ return lib;
+ }
+
+ @Override
+ public void setLibrary(BasicLibrary lib) {
+ this.lib = lib;
+ }
+
+ @Override
+ public synchronized 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);
+ }
+ }
+
+ @Override
+ public synchronized void setMeta(URL url, Progress pg) throws IOException {
+ BasicSupport support = BasicSupport.getSupport(url);
+ if (support == null) {
+ throw new IOException("URL not supported: " + url.toString());
+ }
+
+ story = support.process(pg);
+ if (story == null) {
+ throw new IOException(
+ "Cannot retrieve story from external source: "
+ + url.toString());
+ }
+
+ meta = story.getMeta();
+ }
+
+ @Override
+ public int getChapter() {
+ return chapter;
+ }
+
+ @Override
+ public void setChapter(int chapter) {
+ this.chapter = chapter;