import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.bundles.Config;
+import be.nikiroo.fanfix.bundles.ConfigBundle;
+import be.nikiroo.fanfix.bundles.UiConfigBundle;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.fanfix.output.BasicOutput;
/**
* Create a new {@link LocalLibrary} with the given back-end directory.
*
- * @param baseDir
- * the directory where to find the {@link Story} objects
+ * @param baseDir the directory where to find the {@link Story} objects
+ * @param config the configuration used to know which kind of default
+ * {@link OutputType} to use for images and non-images stories
*/
- public LocalLibrary(File baseDir) {
- this(baseDir, Instance.getConfig().getString(
- Config.NON_IMAGES_DOCUMENT_TYPE), Instance.getConfig()
- .getString(Config.IMAGES_DOCUMENT_TYPE), false);
+ public LocalLibrary(File baseDir, ConfigBundle config) {
+ this(baseDir, //
+ config.getString(Config.FILE_FORMAT_NON_IMAGES_DOCUMENT_TYPE),
+ config.getString(Config.FILE_FORMAT_IMAGES_DOCUMENT_TYPE), false);
}
/**
}
@Override
- protected List<MetaData> getMetas(Progress pg) {
+ protected synchronized List<MetaData> getMetas(Progress pg) {
return new ArrayList<MetaData>(getStories(pg).keySet());
}
@Override
- public File getFile(String luid, Progress pg) {
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": get file for " + luid);
+ public File getFile(String luid, Progress pg) throws IOException {
+ Instance.getInstance().getTraceHandler().trace(this.getClass().getSimpleName() + ": get file for " + luid);
File file = null;
String mess = "no file found for ";
file = files[1];
}
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": " + mess + luid + " ("
- + meta.getTitle() + ")");
+ Instance.getInstance().getTraceHandler()
+ .trace(this.getClass().getSimpleName() + ": " + mess + luid + " (" + meta.getTitle() + ")");
return file;
}
@Override
- public Image getCover(String luid) {
+ public Image getCover(String luid) throws IOException {
MetaData meta = getInfo(luid);
if (meta != null) {
if (meta.getCover() != null) {
meta = InfoReader.readMeta(infoFile, true);
return meta.getCover();
} catch (IOException e) {
- Instance.getTraceHandler().error(e);
+ Instance.getInstance().getTraceHandler().error(e);
}
}
}
InfoCover.writeInfo(newDir, name, meta);
relatedFile.getParentFile().delete();
} catch (IOException e) {
- Instance.getTraceHandler().error(e);
+ Instance.getInstance().getTraceHandler().error(e);
}
} else {
relatedFile.renameTo(new File(newDir, relatedFile.getName()));
}
}
- invalidateInfo();
+ updateInfo(meta);
}
@Override
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
- Instance.getTraceHandler().error(
- new IOException(
- "Cannot load the existing custom source cover: "
- + cover, e));
+ Instance.getInstance().getTraceHandler()
+ .error(new IOException("Cannot load the existing custom source cover: " + cover, e));
}
}
}
@Override
public synchronized Image getCustomAuthorCover(String author) {
+ if (authorCovers == null) {
+ authorCovers = new HashMap<String, Image>();
+ }
+
+ Image img = authorCovers.get(author);
+ if (img != null) {
+ return img;
+ }
+
File cover = getAuthorCoverFile(author);
if (cover.exists()) {
InputStream in;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
- Instance.getTraceHandler().error(
- new IOException(
- "Cannot load the existing custom author cover: "
- + cover, e));
+ Instance.getInstance().getTraceHandler()
+ .error(new IOException("Cannot load the existing custom author cover: " + cover, e));
}
}
}
@Override
- public void setSourceCover(String source, String luid) {
+ public void setSourceCover(String source, String luid) throws IOException {
setSourceCover(source, getCover(luid));
}
@Override
- public void setAuthorCover(String author, String luid) {
+ public void setAuthorCover(String author, String luid) throws IOException {
setAuthorCover(author, getCover(luid));
}
dir.mkdirs();
File cover = new File(dir, ".cover");
try {
- Instance.getCache().saveAsImage(coverImage, cover, true);
+ Instance.getInstance().getCache().saveAsImage(coverImage, cover, true);
if (sourceCovers != null) {
sourceCovers.put(source, coverImage);
}
} catch (IOException e) {
- Instance.getTraceHandler().error(e);
+ Instance.getInstance().getTraceHandler().error(e);
}
}
File cover = getAuthorCoverFile(author);
cover.getParentFile().mkdirs();
try {
- Instance.getCache().saveAsImage(coverImage, cover, true);
+ Instance.getInstance().getCache().saveAsImage(coverImage, cover, true);
if (authorCovers != null) {
authorCovers.put(author, coverImage);
}
} catch (IOException e) {
- Instance.getTraceHandler().error(e);
+ Instance.getInstance().getTraceHandler().error(e);
}
}
return text;
}
+ /**
+ * Return the default {@link OutputType} for this kind of {@link Story}.
+ *
+ * @param imageDocument
+ * TRUE for images document, FALSE for text documents
+ *
+ * @return the type
+ */
+ public String getOutputType(boolean imageDocument) {
+ if (imageDocument) {
+ return image.toString();
+ }
+
+ return text.toString();
+ }
+
/**
* Get the target {@link File} related to the given <tt>.info</tt>
* {@link File} and {@link MetaData}.
private File getAuthorCoverFile(String author) {
File aDir = new File(baseDir, "_AUTHORS");
String hash = StringUtils.getMd5Hash(author);
- String ext = Instance.getConfig().getString(Config.IMAGE_FORMAT_COVER);
+ String ext = Instance.getInstance().getConfig().getString(Config.FILE_FORMAT_IMAGE_FORMAT_COVER);
return new File(aDir, hash + "." + ext.toLowerCase());
}
}
String coverExt = "."
- + Instance.getConfig().getString(Config.IMAGE_FORMAT_COVER)
- .toLowerCase();
+ + Instance.getInstance().getConfig().getString(Config.FILE_FORMAT_IMAGE_FORMAT_COVER).toLowerCase();
File coverFile = new File(path + coverExt);
if (!coverFile.exists()) {
coverFile = new File(path.substring(0,
boolean info = file != null && file.isFile()
&& file.getPath().toLowerCase().endsWith(".info");
boolean dir = file != null && file.isDirectory();
- return info || dir;
+ boolean isExpandedHtml = new File(file, "index.html").isFile();
+ return info || (dir && !isExpandedHtml);
}
});
} catch (IOException e) {
// We should not have not-supported files in the
// library
- Instance.getTraceHandler().error(
- new IOException("Cannot load file from library: "
- + infoFileOrSubdir, e));
+ Instance.getInstance().getTraceHandler()
+ .error(new IOException("Cannot load file from library: " + infoFileOrSubdir, e));
}
}