X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2FLibrary.java;h=cae2d7dc781990aa4bf8be024d2e53099a9b4582;hp=88228497d8e1b6722e42ca35490006d331fadc9b;hb=10d558d2429c984327f9e5a16933fefe5cc37314;hpb=63985d926fe1649517bc06d8f50761925b4c9984 diff --git a/src/be/nikiroo/fanfix/Library.java b/src/be/nikiroo/fanfix/Library.java index 8822849..cae2d7d 100644 --- a/src/be/nikiroo/fanfix/Library.java +++ b/src/be/nikiroo/fanfix/Library.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import be.nikiroo.fanfix.bundles.Config; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.fanfix.data.Story; import be.nikiroo.fanfix.output.BasicOutput; @@ -58,7 +59,7 @@ public class Library { * * @return the types */ - public List getTypes() { + public synchronized List getTypes() { List list = new ArrayList(); for (Entry entry : getStories().entrySet()) { String storyType = entry.getValue().getParentFile().getName(); @@ -79,7 +80,7 @@ public class Library { * * @return the stories */ - public List getList(String type) { + public synchronized List getList(String type) { List list = new ArrayList(); for (Entry entry : getStories().entrySet()) { String storyType = entry.getValue().getParentFile().getName(); @@ -99,7 +100,7 @@ public class Library { * * @return the corresponding {@link Story} */ - public MetaData getInfo(String luid) { + public synchronized MetaData getInfo(String luid) { if (luid != null) { for (Entry entry : getStories().entrySet()) { if (luid.equals(entry.getKey().getLuid())) { @@ -119,7 +120,7 @@ public class Library { * * @return the corresponding {@link Story} */ - public File getFile(String luid) { + public synchronized File getFile(String luid) { if (luid != null) { for (Entry entry : getStories().entrySet()) { if (luid.equals(entry.getKey().getLuid())) { @@ -141,7 +142,7 @@ public class Library { * * @return the corresponding {@link Story} or NULL if not found */ - public Story getStory(String luid, Progress pg) { + public synchronized Story getStory(String luid, Progress pg) { if (luid != null) { for (Entry entry : getStories().entrySet()) { if (luid.equals(entry.getKey().getLuid())) { @@ -271,7 +272,8 @@ public class Library { * @throws IOException * in case of I/O error */ - public Story save(Story story, String luid, Progress pg) throws IOException { + public synchronized Story save(Story story, String luid, Progress pg) + throws IOException { // Do not change the original metadata, but change the original story MetaData key = story.getMeta().clone(); story.setMeta(key); @@ -296,12 +298,61 @@ public class Library { } BasicOutput it = BasicOutput.getOutput(out, true); - File file = it.process(story, getFile(key).getPath(), pg); - getStories().put(story.getMeta(), file); + it.process(story, getFile(key).getPath(), pg); + + // empty cache + stories.clear(); return story; } + /** + * Delete the given {@link Story} from this {@link Library}. + * + * @param luid + * the LUID of the target {@link Story} + * + * @return TRUE if it was deleted + */ + public synchronized boolean delete(String luid) { + boolean ok = false; + + MetaData meta = getInfo(luid); + File file = getStories().get(meta); + + if (file != null) { + if (file.delete()) { + String newExt = getOutputType(meta).getDefaultExtension(false); + + String path = file.getAbsolutePath(); + File infoFile = new File(path + ".info"); + if (!infoFile.exists()) { + infoFile = new File(path.substring(0, path.length() + - newExt.length()) + + ".info"); + } + infoFile.delete(); + + String coverExt = "." + + Instance.getConfig().getString( + Config.IMAGE_FORMAT_COVER); + File coverFile = new File(path + coverExt); + if (!coverFile.exists()) { + coverFile = new File(path.substring(0, path.length() + - newExt.length())); + } + coverFile.delete(); + + ok = true; + } + + // clear cache + stories.clear(); + } + + return ok; + } + /** * The directory (full path) where the {@link Story} related to this * {@link MetaData} should be located on disk. @@ -335,7 +386,7 @@ public class Library { * * @return the stories */ - private Map getStories() { + private synchronized Map getStories() { if (stories.isEmpty()) { lastId = 0; @@ -358,7 +409,7 @@ public class Library { - ext.length()); String newExt = getOutputType(meta) - .getDefaultExtension(); + .getDefaultExtension(true); file = new File(path + newExt); //