X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2FLibrary.java;h=304f19f462e1a05a899e4b01de430e6c283abfef;hp=1b9419a6cb73804c3b509fff15322fc30288f8ce;hb=2206ef66ee00ad42d806f04a7b7ad6f8cb2d8828;hpb=68686a37a591a767f6d1af428ea0d5f3d3a1ddc1 diff --git a/src/be/nikiroo/fanfix/Library.java b/src/be/nikiroo/fanfix/Library.java index 1b9419a..304f19f 100644 --- a/src/be/nikiroo/fanfix/Library.java +++ b/src/be/nikiroo/fanfix/Library.java @@ -29,17 +29,25 @@ public class Library { private File baseDir; private Map stories; private int lastId; + private OutputType text; + private OutputType image; /** * Create a new {@link Library} with the given backend directory. * * @param dir - * the directoy where to find the {@link Story} objects + * the directory where to find the {@link Story} objects + * @param text + * the {@link OutputType} to save the text-focused stories into + * @param image + * the {@link OutputType} to save the images-focused stories into */ - public Library(File dir) { + public Library(File dir, OutputType text, OutputType image) { this.baseDir = dir; this.stories = new HashMap(); this.lastId = 0; + this.text = text; + this.image = image; dir.mkdirs(); } @@ -67,6 +75,26 @@ public class Library { return list; } + /** + * Retrieve a {@link File} corresponding to the given {@link Story}. + * + * @param luid + * the Library UID of the story + * + * @return the corresponding {@link Story} + */ + public File getFile(String luid) { + if (luid != null) { + for (Entry entry : getStories().entrySet()) { + if (luid.equals(entry.getKey().getLuid())) { + return entry.getValue(); + } + } + } + + return null; + } + /** * Retrieve a specific {@link Story}. * @@ -121,12 +149,7 @@ public class Library { throw new IOException("URL not supported: " + url.toString()); } - getStories(); // refresh lastId - Story story = support.process(url); - story.getMeta().setLuid(String.format("%03d", (++lastId))); - save(story); - - return story; + return save(support.process(url), null); } /** @@ -155,37 +178,61 @@ public class Library { } /** - * Save a story as-is to the {@link Library} -- the LUID must be - * correct. + * Save a {@link Story} to the {@link Library}. + * + * @param story + * the {@link Story} to save + * + * @return the same {@link Story}, whose LUID may have changed + * + * @throws IOException + * in case of I/O error + */ + public Story save(Story story) throws IOException { + return save(story, null); + } + + /** + * Save a {@link Story} to the {@link Library} -- the LUID must be + * correct, or NULL to get the next free one. * * @param story * the {@link Story} to save + * @param luid + * the correct LUID or NULL to get the next free one + * + * @return the same {@link Story}, whose LUID may have changed * * @throws IOException * in case of I/O error */ - private void save(Story story) throws IOException { + private Story save(Story story, String luid) throws IOException { MetaData key = story.getMeta(); + if (luid == null || luid.isEmpty()) { + getStories(); // refresh lastId if needed + key.setLuid(String.format("%03d", (++lastId))); + } else { + key.setLuid(luid); + } + getDir(key).mkdirs(); if (!getDir(key).exists()) { throw new IOException("Cannot create library dir"); } OutputType out; - SupportType in; if (key != null && key.isImageDocument()) { - in = SupportType.CBZ; - out = OutputType.CBZ; + out = image; } else { - in = SupportType.INFO_TEXT; - out = OutputType.INFO_TEXT; + out = text; } + BasicOutput it = BasicOutput.getOutput(out, true); File file = it.process(story, getFile(key).getPath()); - getStories().put( - BasicSupport.getSupport(in).processMeta(file.toURI().toURL()) - .getMeta(), file); + getStories().put(story.getMeta(), file); + + return story; } /** @@ -225,11 +272,12 @@ public class Library { if (stories.isEmpty()) { lastId = 0; + String ext = ".info"; for (File dir : baseDir.listFiles()) { if (dir.isDirectory()) { for (File file : dir.listFiles()) { try { - if (file.getPath().toLowerCase().endsWith(".info")) { + if (file.getPath().toLowerCase().endsWith(ext)) { MetaData meta = InfoReader.readMeta(file); try { int id = Integer.parseInt(meta.getLuid()); @@ -237,6 +285,17 @@ public class Library { lastId = id; } + // Replace .info with whatever is needed: + String path = file.getPath(); + path = path.substring(0, path.length() + - ext.length()); + + String newExt = getOutputType(meta) + .getDefaultExtension(); + + file = new File(path + newExt); + // + stories.put(meta, file); } catch (Exception e) { @@ -261,4 +320,20 @@ public class Library { return stories; } + + /** + * Return the {@link OutputType} for this {@link Story}. + * + * @param meta + * the {@link Story} {@link MetaData} + * + * @return the type + */ + private OutputType getOutputType(MetaData meta) { + if (meta != null && meta.isImageDocument()) { + return image; + } else { + return text; + } + } }