package be.nikiroo.fanfix.library;
-import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.util.List;
import java.util.Map;
-import javax.imageio.ImageIO;
-
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.bundles.Config;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.output.InfoCover;
import be.nikiroo.fanfix.supported.InfoReader;
import be.nikiroo.utils.IOUtils;
-import be.nikiroo.utils.ImageUtils;
-import be.nikiroo.utils.MarkableFileInputStream;
+import be.nikiroo.utils.Image;
import be.nikiroo.utils.Progress;
/**
public class LocalLibrary extends BasicLibrary {
private int lastId;
private Map<MetaData, File[]> stories; // Files: [ infoFile, TargetFile ]
- private Map<String, BufferedImage> sourceCovers;
+ private Map<String, Image> sourceCovers;
private File baseDir;
private OutputType text;
this.lastId = 0;
this.stories = null;
- this.sourceCovers = new HashMap<String, BufferedImage>();
+ this.sourceCovers = null;
baseDir.mkdirs();
}
}
@Override
- public BufferedImage getCover(String luid) {
+ public Image getCover(String luid) {
MetaData meta = getInfo(luid);
if (meta != null) {
File[] files = getStories(null).get(meta);
}
@Override
- protected void clearCache() {
+ protected synchronized void updateInfo(MetaData meta) {
+ deleteInfo();
+ }
+
+ @Override
+ protected void deleteInfo(String luid) {
stories = null;
- sourceCovers = new HashMap<String, BufferedImage>();
+ sourceCovers = null;
}
@Override
for (File file : getRelatedFiles(luid)) {
// TODO: throw an IOException if we cannot delete the files?
IOUtils.deltree(file);
+ file.getParentFile().delete();
}
}
File expectedTarget = getExpectedFile(meta);
expectedTarget.getParentFile().mkdirs();
- BasicOutput it = BasicOutput.getOutput(getOutputType(meta), true);
+ BasicOutput it = BasicOutput.getOutput(getOutputType(meta), true, true);
it.process(story, expectedTarget.getPath(), pg);
return story;
"\\.info$", "");
InfoCover.writeInfo(newDir, name, meta);
relatedFile.delete();
+ relatedFile.getParentFile().delete();
} catch (IOException e) {
Instance.getTraceHandler().error(e);
}
} else {
relatedFile.renameTo(new File(newDir, relatedFile.getName()));
+ relatedFile.getParentFile().delete();
}
}
- clearCache();
+ deleteInfo();
}
@Override
- public BufferedImage getSourceCover(String source) {
+ public Image getSourceCover(String source) {
+ if (sourceCovers == null) {
+ getStories(null);
+ }
+
if (!sourceCovers.containsKey(source)) {
sourceCovers.put(source, super.getSourceCover(source));
}
@Override
public void setSourceCover(String source, String luid) {
+ if (sourceCovers == null) {
+ getStories(null);
+ }
+
sourceCovers.put(source, getCover(luid));
- File cover = new File(getExpectedDir(source), ".cover.png");
+ File cover = new File(getExpectedDir(source), ".cover");
try {
- ImageIO.write(sourceCovers.get(source), "png", cover);
+ Instance.getCache().saveAsImage(sourceCovers.get(source), cover,
+ true);
} catch (IOException e) {
Instance.getTraceHandler().error(e);
sourceCovers.remove(source);
pg.add(1);
}
- clearCache();
+ deleteInfo();
pg.done();
return;
}
}
super.imprt(other, luid, pg);
-
- clearCache();
}
/**
}
String coverExt = "."
- + Instance.getConfig().getString(Config.IMAGE_FORMAT_COVER);
+ + Instance.getConfig().getString(Config.IMAGE_FORMAT_COVER)
+ .toLowerCase();
File coverFile = new File(path + coverExt);
if (!coverFile.exists()) {
coverFile = new File(path.substring(0,
* {@link LocalLibrary#baseDir}.
* <p>
* Will use a cached list when possible (see
- * {@link BasicLibrary#clearCache()}).
+ * {@link BasicLibrary#deleteInfo()}).
*
* @param pg
* the optional {@link Progress}
if (stories == null) {
stories = new HashMap<MetaData, File[]>();
+ sourceCovers = new HashMap<String, Image>();
lastId = 0;
}
});
- Progress pgDirs = new Progress(0, 100 * dirs.length);
- pg.addProgress(pgDirs, 100);
+ if (dirs != null) {
+ Progress pgDirs = new Progress(0, 100 * dirs.length);
+ pg.addProgress(pgDirs, 100);
+
+ for (File dir : dirs) {
+ File[] infoFiles = dir.listFiles(new FileFilter() {
+ @Override
+ public boolean accept(File file) {
+ return file != null
+ && file.getPath().toLowerCase()
+ .endsWith(".info");
+ }
+ });
- for (File dir : dirs) {
- File[] infoFiles = dir.listFiles(new FileFilter() {
- @Override
- public boolean accept(File file) {
- return file != null
- && file.getPath().toLowerCase()
- .endsWith(".info");
- }
- });
-
- Progress pgFiles = new Progress(0, infoFiles.length);
- pgDirs.addProgress(pgFiles, 100);
- pgDirs.setName("Loading from: " + dir.getName());
-
- String source = null;
- for (File infoFile : infoFiles) {
- pgFiles.setName(infoFile.getName());
- try {
- MetaData meta = InfoReader.readMeta(infoFile, false);
- source = meta.getSource();
+ Progress pgFiles = new Progress(0, infoFiles.length);
+ pgDirs.addProgress(pgFiles, 100);
+ pgDirs.setName("Loading from: " + dir.getName());
+
+ String source = null;
+ for (File infoFile : infoFiles) {
+ pgFiles.setName(infoFile.getName());
try {
- int id = Integer.parseInt(meta.getLuid());
- if (id > lastId) {
- lastId = id;
- }
+ MetaData meta = InfoReader
+ .readMeta(infoFile, false);
+ source = meta.getSource();
+ try {
+ int id = Integer.parseInt(meta.getLuid());
+ if (id > lastId) {
+ lastId = id;
+ }
- stories.put(meta, new File[] { infoFile,
- getTargetFile(meta, infoFile) });
- } catch (Exception e) {
- // not normal!!
- throw new IOException(
- "Cannot understand the LUID of "
- + infoFile
- + ": "
- + (meta == null ? "[meta is NULL]"
- : meta.getLuid()), e);
+ stories.put(meta, new File[] { infoFile,
+ getTargetFile(meta, infoFile) });
+ } catch (Exception e) {
+ // not normal!!
+ throw new IOException(
+ "Cannot understand the LUID of "
+ + infoFile + ": "
+ + meta.getLuid(), e);
+ }
+ } catch (IOException e) {
+ // We should not have not-supported files in the
+ // library
+ Instance.getTraceHandler().error(
+ new IOException(
+ "Cannot load file from library: "
+ + infoFile, e));
}
- } catch (IOException e) {
- // We should not have not-supported files in the
- // library
- Instance.getTraceHandler().error(new IOException(
- "Cannot load file from library: " + infoFile, e));
+ pgFiles.add(1);
}
- pgFiles.add(1);
- }
- File cover = new File(dir, ".cover.png");
- if (cover.exists()) {
- try {
- InputStream in = new MarkableFileInputStream(
- new FileInputStream(cover));
+ File cover = new File(dir, ".cover.png");
+ if (cover.exists()) {
try {
- sourceCovers.put(source, ImageUtils.fromStream(in));
- } finally {
- in.close();
+ InputStream in = new FileInputStream(cover);
+ try {
+ sourceCovers.put(source, new Image(in));
+ } finally {
+ in.close();
+ }
+ } catch (IOException e) {
+ Instance.getTraceHandler().error(e);
}
- } catch (IOException e) {
- Instance.getTraceHandler().error(e);
}
+
+ pgFiles.setName(null);
}
- pgFiles.setName(null);
+ pgDirs.setName("Loading directories");
}
-
- pgDirs.setName("Loading directories");
}
+ pg.done();
return stories;
}
* @param coverImage
* the cover image
*/
- void setSourceCover(String source, BufferedImage coverImage) {
+ void setSourceCover(String source, Image coverImage) {
+ if (sourceCovers == null) {
+ getStories(null);
+ }
+
sourceCovers.put(source, coverImage);
- File cover = new File(getExpectedDir(source), ".cover.png");
+ File cover = new File(getExpectedDir(source), ".cover");
try {
- ImageIO.write(sourceCovers.get(source), "png", cover);
+ Instance.getCache().saveAsImage(sourceCovers.get(source), cover,
+ true);
} catch (IOException e) {
Instance.getTraceHandler().error(e);
sourceCovers.remove(source);