* WebRequest: try to use compression

* SubsceneClient: persist languageFilterMap
This commit is contained in:
Reinhard Pointner 2009-03-15 17:44:39 +00:00
parent daa665c00e
commit 90c8af354d
5 changed files with 32 additions and 15 deletions

View File

@ -42,7 +42,7 @@ public final class Settings {
public Settings node(String nodeName) { public Settings node(String nodeName) {
return new Settings(prefs.node(nodeName.toLowerCase())); return new Settings(prefs.node(nodeName));
} }

View File

@ -54,7 +54,7 @@ public class SubtitlePanel extends AbstractSearchPanel<SubtitleClient, SubtitleP
@Override @Override
protected Settings getSettings() { protected Settings getSettings() {
return Settings.userRoot().node("subtitle"); return Settings.userRoot().node("subtitles");
} }

View File

@ -29,7 +29,9 @@ import java.util.regex.Pattern;
import javax.swing.Icon; import javax.swing.Icon;
import net.sourceforge.filebot.ResourceManager; import net.sourceforge.filebot.ResourceManager;
import net.sourceforge.filebot.Settings;
import net.sourceforge.tuned.FileUtilities; import net.sourceforge.tuned.FileUtilities;
import net.sourceforge.tuned.PreferencesMap.SimpleAdapter;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@ -40,7 +42,7 @@ public class SubsceneSubtitleClient implements SubtitleClient {
private static final String host = "subscene.com"; private static final String host = "subscene.com";
private final Map<String, Integer> languageFilterMap = new HashMap<String, Integer>(50); private final Map<String, Integer> languageFilterMap = initLanguageFilterMap();
@Override @Override
@ -86,7 +88,9 @@ public class SubsceneSubtitleClient implements SubtitleClient {
// get current location // get current location
String file = selectString("id('aspnetForm')/@action", dom); String file = selectString("id('aspnetForm')/@action", dom);
searchResults.add(new HyperLink(name, new URL("http", host, file))); if (!name.isEmpty() && !file.isEmpty()) {
searchResults.add(new HyperLink(name, new URL("http", host, file)));
}
} catch (Exception e) { } catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.WARNING, "Cannot parse subtitle page: " + searchUrl, e); Logger.getLogger(getClass().getName()).log(Level.WARNING, "Cannot parse subtitle page: " + searchUrl, e);
} }
@ -172,13 +176,18 @@ public class SubsceneSubtitleClient implements SubtitleClient {
} }
protected Map<String, Integer> initLanguageFilterMap() {
return Settings.userRoot().node("subtitles/subscene/languageFilterMap").asMap(SimpleAdapter.forClass(Integer.class));
}
protected Map<String, Integer> getLanguageFilterMap(Document subtitleListDocument) { protected Map<String, Integer> getLanguageFilterMap(Document subtitleListDocument) {
Map<String, Integer> filters = new HashMap<String, Integer>(50); Map<String, Integer> filters = new HashMap<String, Integer>(50);
List<Node> nodes = selectNodes("//DIV[@class='languageList']/DIV", subtitleListDocument); List<Node> nodes = selectNodes("//DIV[@class='languageList']/DIV", subtitleListDocument);
for (Node node : nodes) { for (Node node : nodes) {
// select INPUT/@onclick, ditch non-number-characters // select INPUT/@onclick, then ditch non-number-characters
String filter = getAttribute("onclick", getChild("INPUT", node)).replaceAll("\\D+", ""); String filter = getAttribute("onclick", getChild("INPUT", node)).replaceAll("\\D+", "");
if (filter != null) { if (filter != null) {

View File

@ -14,6 +14,8 @@ import java.util.logging.Logger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
@ -37,12 +39,22 @@ public final class WebRequest {
public static Reader getReader(URLConnection connection) throws IOException { public static Reader getReader(URLConnection connection) throws IOException {
try {
connection.addRequestProperty("Accept-Encoding", "gzip,deflate");
} catch (IllegalStateException e) {
// too bad, can't request gzipped document anymore
}
Charset charset = getCharset(connection.getContentType()); Charset charset = getCharset(connection.getContentType());
String encoding = connection.getContentEncoding(); String encoding = connection.getContentEncoding();
InputStream inputStream = connection.getInputStream(); InputStream inputStream = connection.getInputStream();
if ((encoding != null) && encoding.equalsIgnoreCase("gzip")) if ("gzip".equalsIgnoreCase(encoding))
inputStream = new GZIPInputStream(inputStream); inputStream = new GZIPInputStream(inputStream);
else if ("deflate".equalsIgnoreCase(encoding)) {
inputStream = new InflaterInputStream(inputStream, new Inflater(true));
}
return new InputStreamReader(inputStream, charset); return new InputStreamReader(inputStream, charset);
} }

View File

@ -35,11 +35,7 @@ public class PreferencesMap<T> implements Map<String, T> {
@Override @Override
public T get(Object key) { public T get(Object key) {
if (key instanceof String) { return adapter.get(prefs, key.toString());
return adapter.get(prefs, (String) key);
}
return null;
} }
@ -47,16 +43,16 @@ public class PreferencesMap<T> implements Map<String, T> {
public T put(String key, T value) { public T put(String key, T value) {
adapter.put(prefs, key, value); adapter.put(prefs, key, value);
// don't know previous entry
return null; return null;
} }
@Override @Override
public T remove(Object key) { public T remove(Object key) {
if (key instanceof String) { adapter.remove(prefs, key.toString());
adapter.remove(prefs, (String) key);
}
// don't know removed entry
return null; return null;
} }
@ -100,7 +96,7 @@ public class PreferencesMap<T> implements Map<String, T> {
@Override @Override
public Set<Map.Entry<String, T>> entrySet() { public Set<Entry<String, T>> entrySet() {
Set<Map.Entry<String, T>> entries = new LinkedHashSet<Map.Entry<String, T>>(); Set<Map.Entry<String, T>> entries = new LinkedHashSet<Map.Entry<String, T>>();
for (String key : keys()) { for (String key : keys()) {