package be.nikiroo.fanfix.supported; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.net.URL; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.data.MetaData; /** * Support class for .info text files ({@link Text} files with a * .info metadata file next to them). *

* The .info file is supposed to be written by this program, or * compatible. * * @author niki */ class InfoText extends Text { @Override public String getSourceName() { return "info-text"; } @Override protected MetaData getMeta(URL source, InputStream in) throws IOException { try { MetaData meta = InfoReader.readMeta( new File(new File(source.toURI()).getPath() + ".info"), true); // Some old .info files don't have those now required fields... String test = meta.getTitle() == null ? "" : meta.getTitle(); test += meta.getAuthor() == null ? "" : meta.getAuthor(); test += meta.getDate() == null ? "" : meta.getDate(); test += meta.getUrl() == null ? "" : meta.getUrl(); if (test.isEmpty()) { MetaData superMeta = super.getMeta(source, reset(in)); if (meta.getTitle() == null || meta.getTitle().isEmpty()) { meta.setTitle(superMeta.getTitle()); } if (meta.getAuthor() == null || meta.getAuthor().isEmpty()) { meta.setAuthor(superMeta.getAuthor()); } if (meta.getDate() == null || meta.getDate().isEmpty()) { meta.setDate(superMeta.getDate()); } if (meta.getUrl() == null || meta.getUrl().isEmpty()) { meta.setUrl(superMeta.getUrl()); } } return meta; } catch (URISyntaxException e) { throw new IOException("Cannot parse URL to file: " + source, e); } } @Override protected boolean supports(URL url) { if ("file".equals(url.getProtocol())) { File file; try { file = new File(url.toURI()); file = new File(file.getPath() + ".info"); } catch (URISyntaxException e) { Instance.syserr(e); file = null; } return file != null && file.exists(); } return false; } }