package be.nikiroo.fanfix.reader.ui;
import java.awt.Desktop;
import java.awt.EventQueue;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.VersionCheck;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.fanfix.library.BasicLibrary;
import be.nikiroo.fanfix.library.CacheLibrary;
import be.nikiroo.fanfix.reader.BasicReader;
import be.nikiroo.utils.Progress;
import be.nikiroo.utils.Version;
import be.nikiroo.utils.ui.UIUtils;
class GuiReader extends BasicReader {
static private boolean nativeLookLoaded;
private CacheLibrary cacheLib;
private File cacheDir;
public GuiReader() throws IOException {
if (!nativeLookLoaded) {
UIUtils.setLookAndFeel();
nativeLookLoaded = true;
}
cacheDir = Instance.getReaderDir();
cacheDir.mkdirs();
if (!cacheDir.exists()) {
throw new IOException(
"Cannote create cache directory for local reader: "
+ cacheDir);
}
}
@Override
public synchronized BasicLibrary getLibrary() {
if (cacheLib == null) {
BasicLibrary lib = super.getLibrary();
if (lib instanceof CacheLibrary) {
cacheLib = (CacheLibrary) lib;
} else {
cacheLib = new CacheLibrary(cacheDir, lib);
}
}
return cacheLib;
}
@Override
public void read() throws IOException {
MetaData meta = getMeta();
if (meta == null) {
throw new IOException("No story to read");
}
read(meta.getLuid(), null);
}
/**
* Check if the {@link Story} denoted by this Library UID is present in the
* {@link GuiReader} cache.
*
* @param luid
* the Library UID
*
* @return TRUE if it is
*/
public boolean isCached(String luid) {
return cacheLib.isCached(luid);
}
@Override
public void browse(String type) {
// TODO: improve presentation of update message
final VersionCheck updates = VersionCheck.check();
StringBuilder builder = new StringBuilder();
final JEditorPane updateMessage = new JEditorPane("text/html", "");
if (updates.isNewVersionAvailable()) {
builder.append("A new version of the program is available at https://github.com/nikiroo/fanfix/releases");
builder.append("
");
builder.append("
");
for (Version v : updates.getNewer()) {
builder.append("\tVersion " + v + "");
builder.append("
");
builder.append("