X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2FBasicReader.java;h=7f79da3a8ec62b854b7bcdba62838a23779fcaf4;hb=d66deb8d8b30cff6b54db352eef34a3508939f84;hp=71f19a101bc8b5b3216b66bc2fea24bcde24f7ee;hpb=350bc060516184774f8116e61696a8c3c45ba85d;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/reader/BasicReader.java b/src/be/nikiroo/fanfix/reader/BasicReader.java index 71f19a1..7f79da3 100644 --- a/src/be/nikiroo/fanfix/reader/BasicReader.java +++ b/src/be/nikiroo/fanfix/reader/BasicReader.java @@ -4,6 +4,11 @@ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.TreeMap; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.bundles.Config; @@ -14,6 +19,7 @@ import be.nikiroo.fanfix.library.BasicLibrary; import be.nikiroo.fanfix.library.LocalLibrary; import be.nikiroo.fanfix.supported.BasicSupport; import be.nikiroo.utils.Progress; +import be.nikiroo.utils.StringUtils; import be.nikiroo.utils.serial.SerialUtils; /** @@ -24,7 +30,7 @@ import be.nikiroo.utils.serial.SerialUtils; * @author niki */ public abstract class BasicReader implements Reader { - private static BasicLibrary defaultLibrary = Instance.getLibrary(); + private static BasicLibrary defaultLibrary = Instance.getInstance().getLibrary(); private static ReaderType defaultType = ReaderType.GUI; private BasicLibrary lib; @@ -36,7 +42,7 @@ public abstract class BasicReader implements Reader { * Take the default reader type configuration from the config file. */ static { - String typeString = Instance.getConfig().getString(Config.READER_TYPE); + String typeString = Instance.getInstance().getConfig().getString(Config.READER_TYPE); if (typeString != null && !typeString.isEmpty()) { try { ReaderType type = ReaderType.valueOf(typeString.toUpperCase()); @@ -48,7 +54,7 @@ public abstract class BasicReader implements Reader { } @Override - public synchronized Story getStory(Progress pg) { + public synchronized Story getStory(Progress pg) throws IOException { if (story == null) { story = getLibrary().getStory(meta.getLuid(), pg); } @@ -131,9 +137,8 @@ public abstract class BasicReader implements Reader { .getTypeName()); } } catch (Exception e) { - Instance.getTraceHandler().error( - new Exception("Cannot create a reader of type: " - + defaultType + " (Not compiled in?)", e)); + Instance.getInstance().getTraceHandler() + .error(new Exception("Cannot create a reader of type: " + defaultType + " (Not compiled in?)", e)); } return null; @@ -199,6 +204,50 @@ public abstract class BasicReader implements Reader { return source; } + /** + * Describe a {@link Story} from its {@link MetaData} and return a list of + * title/value that represent this {@link Story}. + * + * @param meta + * the {@link MetaData} to represent + * + * @return the information + */ + public static Map getMetaDesc(MetaData meta) { + Map metaDesc = new TreeMap(); + + // TODO: i18n + + StringBuilder tags = new StringBuilder(); + for (String tag : meta.getTags()) { + if (tags.length() > 0) { + tags.append(", "); + } + tags.append(tag); + } + + // TODO: i18n + metaDesc.put("Author", meta.getAuthor()); + metaDesc.put("Publication date", formatDate(meta.getDate())); + metaDesc.put("Published on", meta.getPublisher()); + metaDesc.put("URL", meta.getUrl()); + String count = ""; + if (meta.getWords() > 0) { + count = StringUtils.formatNumber(meta.getWords()); + } + if (meta.isImageDocument()) { + metaDesc.put("Number of images", count); + } else { + metaDesc.put("Number of words", count); + } + metaDesc.put("Source", meta.getSource()); + metaDesc.put("Subject", meta.getSubject()); + metaDesc.put("Language", meta.getLang()); + metaDesc.put("Tags", tags.toString()); + + return metaDesc; + } + /** * Open the {@link Story} with an external reader (the program will be * passed the main file associated with this {@link Story}). @@ -242,11 +291,9 @@ public abstract class BasicReader implements Reader { throws IOException { String program = null; if (meta.isImageDocument()) { - program = Instance.getUiConfig().getString( - UiConfig.IMAGES_DOCUMENT_READER); + program = Instance.getInstance().getUiConfig().getString(UiConfig.IMAGES_DOCUMENT_READER); } else { - program = Instance.getUiConfig().getString( - UiConfig.NON_IMAGES_DOCUMENT_READER); + program = Instance.getInstance().getUiConfig().getString(UiConfig.NON_IMAGES_DOCUMENT_READER); } if (program != null && program.trim().isEmpty()) { @@ -280,10 +327,8 @@ public abstract class BasicReader implements Reader { for (String starter : new String[] { "xdg-open", "open", "see", "start", "run" }) { try { - Instance.getTraceHandler().trace( - "starting external program"); - proc = Runtime.getRuntime().exec( - new String[] { starter, target.getAbsolutePath() }); + Instance.getInstance().getTraceHandler().trace("starting external program"); + proc = Runtime.getRuntime().exec(new String[] { starter, target.getAbsolutePath() }); ok = true; break; } catch (IOException e) { @@ -293,18 +338,48 @@ public abstract class BasicReader implements Reader { throw new IOException("Cannot find a program to start the file"); } } else { - Instance.getTraceHandler().trace("starting external program"); + Instance.getInstance().getTraceHandler().trace("starting external program"); proc = Runtime.getRuntime().exec( new String[] { program, target.getAbsolutePath() }); } if (proc != null && sync) { - while (proc.isAlive()) { + try { + proc.waitFor(); + } catch (InterruptedException e) { + } + } + } + + static private String formatDate(String date) { + long ms = 0; + + if (date != null && !date.isEmpty()) { + try { + ms = StringUtils.toTime(date); + } catch (ParseException e) { + } + + if (ms <= 0) { + SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd'T'HH:mm:ssSSS"); try { - Thread.sleep(100); - } catch (InterruptedException e) { + ms = sdf.parse(date).getTime(); + } catch (ParseException e) { } } + + if (ms > 0) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + return sdf.format(new Date(ms)); + } } + + if (date == null) { + date = ""; + } + + // :( + return date; } }