import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.bundles.Config;
import be.nikiroo.utils.Image;
+import be.nikiroo.utils.StringUtils;
/**
* Helper class for {@link BasicSupport}, mostly dedicated to text formating for
*
* @author niki
*/
-class BasicSupportHelper {
+public class BasicSupportHelper {
/**
* Get the default cover related to this subject (see <tt>.info</tt> files).
*
*
* @return the cover if any, or NULL
*/
- public static Image getDefaultCover(String subject) {
- if (subject != null && !subject.isEmpty()
- && Instance.getCoverDir() != null) {
+ public Image getDefaultCover(String subject) {
+ if (subject != null && !subject.isEmpty() && Instance.getInstance().getCoverDir() != null) {
try {
- File fileCover = new File(Instance.getCoverDir(), subject);
+ File fileCover = new File(Instance.getInstance().getCoverDir(), subject);
return getImage(null, fileCover.toURI().toURL(), subject);
} catch (MalformedURLException e) {
}
*
* @return the extensions
*/
- public static String[] getImageExt(boolean emptyAllowed) {
+ public String[] getImageExt(boolean emptyAllowed) {
if (emptyAllowed) {
return new String[] { "", ".png", ".jpg", ".jpeg", ".gif", ".bmp" };
}
* refresh the cache with it if it is.
*
* @param support
- * the linked {@link BasicSupport}
+ * the linked {@link BasicSupport} (can be NULL)
* @param source
- * the story source
+ * the source of the story (for image lookup in the same path if
+ * the source is a file, can be NULL)
* @param line
* the resource to check
*
* @return the image if found, or NULL
*
*/
- public static Image getImage(BasicSupport support, URL source, String line) {
+ public Image getImage(BasicSupport support, URL source, String line) {
URL url = getImageUrl(support, source, line);
if (url != null) {
if ("file".equals(url.getProtocol())) {
}
InputStream in = null;
try {
- in = Instance.getCache().open(url, support, true);
+ in = Instance.getInstance().getCache().open(url, support, true);
return new Image(in);
} catch (IOException e) {
} finally {
* refresh the cache with it if it is.
*
* @param support
- * the linked {@link BasicSupport}
+ * the linked {@link BasicSupport} (can be NULL)
* @param source
- * the story source
+ * the source of the story (for image lookup in the same path if
+ * the source is a file, can be NULL)
* @param line
* the resource to check
*
* @return the image URL if found, or NULL
*
*/
- public static URL getImageUrl(BasicSupport support, URL source, String line) {
+ public URL getImageUrl(BasicSupport support, URL source, String line) {
URL url = null;
if (line != null) {
// try for URLs
try {
for (String ext : getImageExt(true)) {
- if (Instance.getCache()
- .check(new URL(line + ext), true)) {
+ if (Instance.getInstance().getCache().check(new URL(line + ext), true)) {
url = new URL(line + ext);
break;
}
for (String ext : getImageExt(true)) {
try {
url = new URL(line + ext);
- Instance.getCache().refresh(url, support, true);
+ Instance.getInstance().getCache().refresh(url, support, true);
break;
} catch (IOException e) {
// no image with this ext
// refresh the cached file
if (url != null) {
try {
- Instance.getCache().refresh(url, support, true);
+ Instance.getInstance().getCache().refresh(url, support, true);
} catch (IOException e) {
// woops, broken image
url = null;
*
* @return the author without prefixes
*/
- public static String fixAuthor(String author) {
+ public String fixAuthor(String author) {
if (author != null) {
for (String suffix : new String[] { " ", ":" }) {
- for (String byString : Instance.getConfig().getList(Config.CONF_BYS)) {
+ for (String byString : Instance.getInstance().getConfig().getList(Config.CONF_BYS)) {
byString += suffix;
if (author.toUpperCase().startsWith(byString.toUpperCase())) {
author = author.substring(byString.length()).trim();
return author;
}
+
+ /**
+ * Try to convert the date to a known, fixed format.
+ * <p>
+ * If it fails to do so, it will return the date as-is.
+ *
+ * @param date
+ * the date to convert
+ *
+ * @return the converted date, or the date as-is
+ */
+ public String formatDate(String date) {
+ long ms = 0;
+
+ if (date != null && !date.isEmpty()) {
+ // Default Fanfix format:
+ try {
+ ms = StringUtils.toTime(date);
+ } catch (ParseException e) {
+ }
+
+ // Second chance:
+ if (ms <= 0) {
+ SimpleDateFormat sdf = new SimpleDateFormat(
+ "yyyy-MM-dd'T'HH:mm:ssSSS");
+ try {
+ ms = sdf.parse(date).getTime();
+ } catch (ParseException e) {
+ }
+ }
+
+ // Last chance:
+ if (ms <= 0 && date.length() >= 10) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ ms = sdf.parse(date.substring(0, 10)).getTime();
+ } catch (ParseException e) {
+ }
+ }
+
+ // If we found something, use THIS format:
+ if (ms > 0) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ return sdf.format(new Date(ms));
+ }
+ }
+
+ if (date == null) {
+ date = "";
+ }
+
+ // :(
+ return date;
+ }
}