X-Git-Url: http://git.nikiroo.be/?p=nikiroo-utils.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Fsupported%2FYiffStar.java;h=498b7d9a611db6417b153e4b5689dc786b70d513;hp=e9c10c9f06eb4d2d333976e039d09e8adfb37305;hb=cfdaf6052ddc5ca44cf19f1f6d9f154cc8443024;hpb=a4143cd74a90e17a811a4581cbeb213fed1f6304 diff --git a/src/be/nikiroo/fanfix/supported/YiffStar.java b/src/be/nikiroo/fanfix/supported/YiffStar.java index e9c10c9..498b7d9 100644 --- a/src/be/nikiroo/fanfix/supported/YiffStar.java +++ b/src/be/nikiroo/fanfix/supported/YiffStar.java @@ -1,17 +1,22 @@ package be.nikiroo.fanfix.supported; -import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; import java.net.URL; +import java.util.AbstractMap; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import be.nikiroo.fanfix.Instance; +import be.nikiroo.fanfix.bundles.Config; import be.nikiroo.fanfix.data.MetaData; +import be.nikiroo.utils.Image; +import be.nikiroo.utils.Progress; import be.nikiroo.utils.StringUtils; /** @@ -20,29 +25,20 @@ import be.nikiroo.utils.StringUtils; * * @author niki */ -class YiffStar extends BasicSupport { - - @Override - public String getSourceName() { - return "YiffStar"; - } - +class YiffStar extends BasicSupport_Deprecated { @Override protected MetaData getMeta(URL source, InputStream in) throws IOException { MetaData meta = new MetaData(); meta.setTitle(getTitle(reset(in))); - meta.setAuthor(getAuthor(source, reset(in))); + meta.setAuthor(getAuthor(reset(in))); meta.setDate(""); meta.setTags(getTags(reset(in))); - meta.setSource(getSourceName()); meta.setUrl(source.toString()); - meta.setPublisher(getSourceName()); meta.setUuid(source.toString()); meta.setLuid(""); - meta.setLang("EN"); + meta.setLang("en"); meta.setSubject("Furry"); - meta.setType(getType().toString()); meta.setImageDocument(false); meta.setCover(getCover(source, reset(in))); @@ -65,25 +61,48 @@ class YiffStar extends BasicSupport { } @Override - public Map getCookies() { - // TODO - // Cookies will actually be retained by the cache manager once logged in - // But we need to connect here and notify the cache manager - - return super.getCookies(); + public void login() throws IOException { + // Note: this should not be necessary anymore + // (the "/guest" trick is enough) + String login = Instance.getInstance().getConfig().getString(Config.LOGIN_YIFFSTAR_USER); + String password = Instance.getInstance().getConfig().getString(Config.LOGIN_YIFFSTAR_PASS); + + if (login != null && !login.isEmpty() && password != null + && !password.isEmpty()) { + + Map post = new HashMap(); + post.put("LoginForm[sfLoginUsername]", login); + post.put("LoginForm[sfLoginPassword]", password); + post.put("YII_CSRF_TOKEN", ""); + post.put("yt1", "Login"); + post.put("returnUrl", "/"); + + // Cookies will actually be retained by the cache manager once + // logged in + Instance.getInstance().getCache() + .openNoCache(new URL("https://www.sofurry.com/user/login"), this, post, null, null).close(); + } } @Override - public URL getCanonicalUrl(URL source) throws IOException { - if (source.getPath().startsWith("/view")) { - InputStream in = Instance.getCache().open(source, this, false); - String line = getLine(in, "/browse/folder/", 0); - String[] tab = line.split("\""); - if (tab.length > 1) { - String groupUrl = source.getProtocol() + "://" - + source.getHost() + tab[1]; - return new URL(groupUrl); + public URL getCanonicalUrl(URL source) { + try { + if (source.getPath().startsWith("/view")) { + source = guest(source.toString()); + // NO CACHE because we don't want the NotLoggedIn message later + InputStream in = Instance.getInstance().getCache().openNoCache(source, this, null, null, null); + String line = getLine(in, "/browse/folder/", 0); + if (line != null) { + String[] tab = line.split("\""); + if (tab.length > 1) { + String groupUrl = source.getProtocol() + "://" + + source.getHost() + tab[1]; + return guest(groupUrl); + } + } } + } catch (Exception e) { + Instance.getInstance().getTraceHandler().error(e); } return super.getCanonicalUrl(source); @@ -106,12 +125,11 @@ class YiffStar extends BasicSupport { return tags; } - private BufferedImage getCover(URL source, InputStream in) - throws IOException { + private Image getCover(URL source, InputStream in) throws IOException { - List> chaps = getChapters(source, in); + List> chaps = getChapters(source, in, null); if (!chaps.isEmpty()) { - in = Instance.getCache().open(chaps.get(0).getValue(), this, true); + in = Instance.getInstance().getCache().open(chaps.get(0).getValue(), this, true); String line = getLine(in, " name=\"og:image\"", 0); if (line != null) { int pos = -1; @@ -137,7 +155,7 @@ class YiffStar extends BasicSupport { return null; } - private String getAuthor(URL source, InputStream in) throws IOException { + private String getAuthor(InputStream in) { String author = getLine(in, "class=\"onlinestatus", 0); if (author != null) { return StringUtils.unhtml(author).trim(); @@ -146,7 +164,7 @@ class YiffStar extends BasicSupport { return null; } - private String getTitle(InputStream in) throws IOException { + private String getTitle(InputStream in) { String title = getLine(in, "class=\"sflabel pagetitle", 0); if (title != null) { if (title.contains("(series)")) { @@ -164,8 +182,8 @@ class YiffStar extends BasicSupport { } @Override - protected List> getChapters(URL source, InputStream in) - throws IOException { + protected List> getChapters(URL source, InputStream in, + Progress pg) throws IOException { List> urls = new ArrayList>(); @SuppressWarnings("resource") @@ -181,21 +199,8 @@ class YiffStar extends BasicSupport { link = source.getProtocol() + "://" + source.getHost() + link; } - final URL value = new URL(link); - final String key = StringUtils.unhtml(line).trim(); - urls.add(new Entry() { - public URL setValue(URL value) { - return null; - } - - public URL getValue() { - return value; - } - - public String getKey() { - return key; - } - }); + urls.add(new AbstractMap.SimpleEntry( + StringUtils.unhtml(line).trim(), guest(link))); } } } @@ -204,8 +209,8 @@ class YiffStar extends BasicSupport { } @Override - protected String getChapterContent(URL source, InputStream in, int number) - throws IOException { + protected String getChapterContent(URL source, InputStream in, int number, + Progress pg) throws IOException { StringBuilder builder = new StringBuilder(); String startAt = "id=\"sfContentBody"; @@ -226,10 +231,34 @@ class YiffStar extends BasicSupport { if (ok) { builder.append(line); - builder.append('\n'); + builder.append(' '); } } return builder.toString(); } + + /** + * Return a {@link URL} from the given link, but add the "/guest" part to it + * to make sure we don't need to be logged-in to see it. + * + * @param link + * the link + * + * @return the {@link URL} + * + * @throws MalformedURLException + * in case of data error + */ + private URL guest(String link) throws MalformedURLException { + if (link.contains("?")) { + if (link.contains("/?")) { + return new URL(link.replace("?", "guest?")); + } + + return new URL(link.replace("?", "/guest?")); + } + + return new URL(link + "/guest"); + } }