mirror of
https://github.com/mitb-archive/filebot
synced 2024-12-23 16:28:51 -05:00
* simplify things
This commit is contained in:
parent
dc079a9d13
commit
f65f84c593
@ -10,7 +10,6 @@ import java.net.URI;
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -46,7 +45,7 @@ public class IMDbClient extends AbstractEpisodeListProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SearchResult> search(String query, Locale locale) throws IOException, SAXException {
|
public List<SearchResult> search(String query, Locale locale) throws IOException, SAXException {
|
||||||
URL searchUrl = new URL("http", host, "/find?s=tt&q=" + URLEncoder.encode(query, "UTF-8"));
|
URL searchUrl = new URL("http", host, "/find?s=tt&q=" + encode(query));
|
||||||
Document dom = getHtmlDocument(openConnection(searchUrl));
|
Document dom = getHtmlDocument(openConnection(searchUrl));
|
||||||
|
|
||||||
List<Node> nodes = selectNodes("//TABLE//A[following-sibling::SMALL[contains(.,'series')]]", dom);
|
List<Node> nodes = selectNodes("//TABLE//A[following-sibling::SMALL[contains(.,'series')]]", dom);
|
||||||
|
@ -10,7 +10,6 @@ import java.net.MalformedURLException;
|
|||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -56,7 +55,7 @@ public class SubsceneSubtitleClient implements SubtitleProvider {
|
|||||||
@Override
|
@Override
|
||||||
public List<SearchResult> search(String query) throws IOException, SAXException {
|
public List<SearchResult> search(String query) throws IOException, SAXException {
|
||||||
|
|
||||||
URL searchUrl = new URL("http", host, "/filmsearch.aspx?q=" + URLEncoder.encode(query, "UTF-8"));
|
URL searchUrl = new URL("http", host, "/filmsearch.aspx?q=" + encode(query));
|
||||||
|
|
||||||
Document dom = getHtmlDocument(searchUrl);
|
Document dom = getHtmlDocument(searchUrl);
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import static net.sourceforge.tuned.XPathUtilities.*;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -43,7 +42,7 @@ public class TVRageClient extends AbstractEpisodeListProvider {
|
|||||||
@Override
|
@Override
|
||||||
public List<SearchResult> search(String query, Locale locale) throws IOException, SAXException {
|
public List<SearchResult> search(String query, Locale locale) throws IOException, SAXException {
|
||||||
|
|
||||||
URL searchUrl = new URL("http", host, "/feeds/full_search.php?show=" + URLEncoder.encode(query, "UTF-8"));
|
URL searchUrl = new URL("http", host, "/feeds/full_search.php?show=" + encode(query));
|
||||||
|
|
||||||
Document dom = getDocument(searchUrl);
|
Document dom = getDocument(searchUrl);
|
||||||
|
|
||||||
|
@ -9,11 +9,11 @@ import static net.sourceforge.tuned.XPathUtilities.*;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -80,28 +80,23 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SearchResult> search(String query, Locale language) throws Exception {
|
public List<SearchResult> search(String query, Locale language) throws Exception {
|
||||||
// check if the exact series name is already cached
|
|
||||||
Integer cachedResult = cache.getSeriesId(query, language);
|
|
||||||
|
|
||||||
if (cachedResult != null)
|
|
||||||
return Arrays.asList(new SearchResult[] { new TheTVDBSearchResult(query, cachedResult) });
|
|
||||||
|
|
||||||
// perform online search
|
// perform online search
|
||||||
URL url = getResource(null, "/api/GetSeries.php?seriesname=" + URLEncoder.encode(query, "UTF-8") + "&language=" + language.getLanguage());
|
URL url = getResource(null, "/api/GetSeries.php?seriesname=" + encode(query) + "&language=" + language.getLanguage());
|
||||||
Document dom = getDocument(url);
|
Document dom = getDocument(url);
|
||||||
|
|
||||||
List<Node> nodes = selectNodes("Data/Series", dom);
|
List<Node> nodes = selectNodes("Data/Series", dom);
|
||||||
List<SearchResult> searchResults = new ArrayList<SearchResult>(nodes.size());
|
Map<Integer, TheTVDBSearchResult> resultSet = new LinkedHashMap<Integer, TheTVDBSearchResult>();
|
||||||
|
|
||||||
for (Node node : nodes) {
|
for (Node node : nodes) {
|
||||||
int seriesId = getIntegerContent("seriesid", node);
|
int sid = getIntegerContent("seriesid", node);
|
||||||
String seriesName = getTextContent("SeriesName", node);
|
String seriesName = getTextContent("SeriesName", node);
|
||||||
|
|
||||||
searchResults.add(new TheTVDBSearchResult(seriesName, seriesId));
|
if (!resultSet.containsKey(sid)) {
|
||||||
cache.putSeriesId(seriesName, language, seriesId);
|
resultSet.put(sid, new TheTVDBSearchResult(seriesName, sid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return searchResults;
|
return new ArrayList<SearchResult>(resultSet.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -157,16 +152,6 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||||||
// handle as normal episode
|
// handle as normal episode
|
||||||
episodes.add(new Episode(seriesName, seriesStartDate, seasonNumber, episodeNumber, episodeName, absoluteNumber, null, airdate));
|
episodes.add(new Episode(seriesName, seriesStartDate, seasonNumber, episodeNumber, episodeName, absoluteNumber, null, airdate));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (episodeNumber == 1) {
|
|
||||||
try {
|
|
||||||
// cache seasonId for each season (always when we are at the first episode)
|
|
||||||
// because it might be required by getEpisodeListLink
|
|
||||||
cache.putSeasonId(series.getSeriesId(), seasonNumber, getIntegerContent("seasonid", node));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
// season/episode is not a number, just ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// episodes my not be ordered by DVD episode number
|
// episodes my not be ordered by DVD episode number
|
||||||
@ -216,16 +201,9 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||||||
int seriesId = ((TheTVDBSearchResult) searchResult).getSeriesId();
|
int seriesId = ((TheTVDBSearchResult) searchResult).getSeriesId();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Integer seasonId = cache.getSeasonId(seriesId, season);
|
// get episode xml from first episode of given season
|
||||||
|
Document dom = getDocument(getResource(MirrorType.XML, "/api/" + apikey + "/series/" + seriesId + "/default/" + season + "/1/en.xml"));
|
||||||
if (seasonId == null) {
|
int seasonId = Integer.valueOf(selectString("Data/Episode/seasonid", dom));
|
||||||
// get episode xml from first episode of given season
|
|
||||||
URL url = getResource(MirrorType.XML, "/api/" + apikey + "/series/" + seriesId + "/default/" + season + "/1/en.xml");
|
|
||||||
Document dom = getDocument(url);
|
|
||||||
|
|
||||||
seasonId = Integer.valueOf(selectString("Data/Episode/seasonid", dom));
|
|
||||||
cache.putSeasonId(seriesId, season, seasonId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new URI("http://" + host + "/?tab=season&seriesid=" + seriesId + "&seasonid=" + seasonId);
|
return new URI("http://" + host + "/?tab=season&seriesid=" + seriesId + "&seasonid=" + seasonId);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -348,36 +326,6 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void putSeriesId(String seriesName, Locale language, int seriesId) {
|
|
||||||
cache.put(new Element(key(host, "SeriesId", seriesName, language.getLanguage()), seriesId));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Integer getSeriesId(String seriesName, Locale language) {
|
|
||||||
Element element = cache.get(key(host, "SeriesId", seriesName, language.getLanguage()));
|
|
||||||
|
|
||||||
if (element != null)
|
|
||||||
return (Integer) element.getValue();
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void putSeasonId(int seriesId, int seasonNumber, int seasonId) {
|
|
||||||
cache.put(new Element(key(host, "SeasonId", seriesId, seasonNumber), seasonId));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Integer getSeasonId(int seriesId, int seasonNumber) {
|
|
||||||
Element element = cache.get(key(host, "SeasonId", seriesId, seasonNumber));
|
|
||||||
|
|
||||||
if (element != null)
|
|
||||||
return (Integer) element.getValue();
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void putEpisodeList(int seriesId, Locale language, List<Episode> episodes) {
|
public void putEpisodeList(int seriesId, Locale language, List<Episode> episodes) {
|
||||||
cache.put(new Element(key(host, "EpisodeList", seriesId, language.getLanguage()), episodes));
|
cache.put(new Element(key(host, "EpisodeList", seriesId, language.getLanguage()), episodes));
|
||||||
}
|
}
|
||||||
|
@ -223,19 +223,22 @@ public final class WebRequest {
|
|||||||
|
|
||||||
sb.append(entry.getKey());
|
sb.append(entry.getKey());
|
||||||
sb.append("=");
|
sb.append("=");
|
||||||
|
sb.append(encode(entry.getValue()));
|
||||||
try {
|
|
||||||
sb.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
// will never happen
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String encode(String string) {
|
||||||
|
try {
|
||||||
|
return URLEncoder.encode(string, "UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static SSLSocketFactory createIgnoreCertificateSocketFactory() {
|
public static SSLSocketFactory createIgnoreCertificateSocketFactory() {
|
||||||
// create a trust manager that does not validate certificate chains
|
// create a trust manager that does not validate certificate chains
|
||||||
TrustManager trustAnyCertificate = new X509TrustManager() {
|
TrustManager trustAnyCertificate = new X509TrustManager() {
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
package net.sourceforge.tuned;
|
package net.sourceforge.tuned;
|
||||||
|
|
||||||
|
|
||||||
|
import static net.sourceforge.filebot.web.WebRequest.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.channels.Channels;
|
import java.nio.channels.Channels;
|
||||||
import java.nio.channels.ReadableByteChannel;
|
import java.nio.channels.ReadableByteChannel;
|
||||||
@ -16,8 +16,6 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
|
|
||||||
@ -27,7 +25,7 @@ public class DownloadTask extends SwingWorker<ByteBuffer, Void> {
|
|||||||
public static final String DOWNLOAD_STATE = "download state";
|
public static final String DOWNLOAD_STATE = "download state";
|
||||||
public static final String DOWNLOAD_PROGRESS = "download progress";
|
public static final String DOWNLOAD_PROGRESS = "download progress";
|
||||||
|
|
||||||
|
|
||||||
public static enum DownloadState {
|
public static enum DownloadState {
|
||||||
PENDING,
|
PENDING,
|
||||||
CONNECTING,
|
CONNECTING,
|
||||||
@ -35,6 +33,7 @@ public class DownloadTask extends SwingWorker<ByteBuffer, Void> {
|
|||||||
DONE
|
DONE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private URL url;
|
private URL url;
|
||||||
|
|
||||||
private long contentLength = -1;
|
private long contentLength = -1;
|
||||||
@ -44,7 +43,7 @@ public class DownloadTask extends SwingWorker<ByteBuffer, Void> {
|
|||||||
private Map<String, String> requestHeaders;
|
private Map<String, String> requestHeaders;
|
||||||
private Map<String, List<String>> responseHeaders;
|
private Map<String, List<String>> responseHeaders;
|
||||||
|
|
||||||
|
|
||||||
public DownloadTask(URL url) {
|
public DownloadTask(URL url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
@ -70,7 +69,7 @@ public class DownloadTask extends SwingWorker<ByteBuffer, Void> {
|
|||||||
HttpURLConnection connection = createConnection();
|
HttpURLConnection connection = createConnection();
|
||||||
|
|
||||||
if (postParameters != null) {
|
if (postParameters != null) {
|
||||||
ByteBuffer postData = encodeParameters(postParameters);
|
ByteBuffer postData = Charset.forName("UTF-8").encode(encodeParameters(postParameters));
|
||||||
|
|
||||||
// add content type and content length headers
|
// add content type and content length headers
|
||||||
connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
||||||
@ -170,26 +169,4 @@ public class DownloadTask extends SwingWorker<ByteBuffer, Void> {
|
|||||||
return requestHeaders;
|
return requestHeaders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected ByteBuffer encodeParameters(Map<String, String> parameters) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
|
|
||||||
for (Entry<String, String> entry : parameters.entrySet()) {
|
|
||||||
if (sb.length() > 0)
|
|
||||||
sb.append("&");
|
|
||||||
|
|
||||||
sb.append(entry.getKey());
|
|
||||||
sb.append("=");
|
|
||||||
|
|
||||||
try {
|
|
||||||
sb.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
// will never happen
|
|
||||||
Logger.getLogger(getClass().getName()).log(Level.SEVERE, e.toString(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Charset.forName("UTF-8").encode(sb.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user