From 7bb739f800eedd52203277997f771f3b39cf8662 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Tue, 2 Jun 2009 11:32:30 +0000 Subject: [PATCH] + Sublight support (build, client, hash, test, lib) --- build.xml | 55 ++-- lib/sublight-ws.jar | Bin 0 -> 120716 bytes .../filebot/resources/search.sublight.png | Bin 0 -> 251 bytes .../sourceforge/filebot/web/IMDbClient.java | 13 +- .../filebot/web/SublightSubtitleClient.java | 252 ++++++++++++++++++ .../web/SublightSubtitleDescriptor.java | 60 +++++ .../filebot/web/SublightVideoHasher.java | 124 +++++++++ .../filebot/web/IMDbClientTest.java | 4 +- .../filebot/web/OpenSubtitlesHasherTest.java | 4 +- .../web/SublightSubtitleClientTest.java | 91 +++++++ .../sourceforge/filebot/web/WebTestSuite.java | 2 +- 11 files changed, 566 insertions(+), 39 deletions(-) create mode 100644 lib/sublight-ws.jar create mode 100644 source/net/sourceforge/filebot/resources/search.sublight.png create mode 100644 source/net/sourceforge/filebot/web/SublightSubtitleClient.java create mode 100644 source/net/sourceforge/filebot/web/SublightSubtitleDescriptor.java create mode 100644 source/net/sourceforge/filebot/web/SublightVideoHasher.java create mode 100644 test/net/sourceforge/filebot/web/SublightSubtitleClientTest.java diff --git a/build.xml b/build.xml index 4cf7099d..db5dfc21 100644 --- a/build.xml +++ b/build.xml @@ -1,6 +1,6 @@ - + @@ -22,15 +22,6 @@ - - - - - - - - - @@ -45,25 +36,31 @@ + + + + + + + - - - + + - + - + - + @@ -71,7 +68,7 @@ - + @@ -79,23 +76,27 @@ - + - + - + - + + + + + @@ -110,7 +111,7 @@ - + @@ -139,7 +140,7 @@ - + @@ -147,16 +148,16 @@ - + - - + + - + diff --git a/lib/sublight-ws.jar b/lib/sublight-ws.jar new file mode 100644 index 0000000000000000000000000000000000000000..b465f0d9e2badc4af450ab0f4102d6dd7227e2f4 GIT binary patch literal 120716 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 PA8cUCHO&C#M!5e09#8MY literal 0 HcmV?d00001 diff --git a/source/net/sourceforge/filebot/resources/search.sublight.png b/source/net/sourceforge/filebot/resources/search.sublight.png new file mode 100644 index 0000000000000000000000000000000000000000..662a00fcc3e2419010e8b5f815b54e800572da4b GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ za0`Jj zCtPVbn84s=<>Y2}8mw}G}Zc)I$ztaD0e0s!$nTd)8C literal 0 HcmV?d00001 diff --git a/source/net/sourceforge/filebot/web/IMDbClient.java b/source/net/sourceforge/filebot/web/IMDbClient.java index 479e32a3..0f463e3e 100644 --- a/source/net/sourceforge/filebot/web/IMDbClient.java +++ b/source/net/sourceforge/filebot/web/IMDbClient.java @@ -62,8 +62,8 @@ public class IMDbClient implements EpisodeListProvider { List results = new ArrayList(nodes.size()); for (Node node : nodes) { - String name = removeQuotationMarks(node.getTextContent().trim()); - String year = node.getNextSibling().getTextContent().trim(); + String name = normalizeName(node.getTextContent().trim()); + String year = node.getNextSibling().getTextContent().trim().replaceAll("\\D+", ""); // remove non-number characters String href = getAttribute("href", node); results.add(new MovieDescriptor(name, Integer.parseInt(year), getImdbId(href))); @@ -71,7 +71,7 @@ public class IMDbClient implements EpisodeListProvider { // we might have been redirected to the movie page if (results.isEmpty()) { - String name = removeQuotationMarks(selectString("//H1/text()", dom)); + String name = normalizeName(selectString("//H1/text()", dom)); String year = selectString("//H1//A", dom); String url = selectString("//LINK[@rel='canonical']/@href", dom); @@ -86,7 +86,7 @@ public class IMDbClient implements EpisodeListProvider { public List getEpisodeList(SearchResult searchResult) throws IOException, SAXException { Document dom = getHtmlDocument(openConnection(getEpisodeListLink(searchResult).toURL())); - String seriesName = removeQuotationMarks(selectString("//H1/A", dom)); + String seriesName = normalizeName(selectString("//H1/A", dom)); List nodes = selectNodes("//TABLE//H3/A[preceding-sibling::text()]", dom); @@ -129,8 +129,9 @@ public class IMDbClient implements EpisodeListProvider { } - protected String removeQuotationMarks(String name) { - return name.replaceAll("^\"|\"$", ""); + protected String normalizeName(String name) { + // remove quotation marks + return name.replaceAll("\"", ""); } diff --git a/source/net/sourceforge/filebot/web/SublightSubtitleClient.java b/source/net/sourceforge/filebot/web/SublightSubtitleClient.java new file mode 100644 index 00000000..f2677cd3 --- /dev/null +++ b/source/net/sourceforge/filebot/web/SublightSubtitleClient.java @@ -0,0 +1,252 @@ + +package net.sourceforge.filebot.web; + + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import javax.swing.Icon; +import javax.xml.ws.Holder; +import javax.xml.ws.WebServiceException; + +import net.sourceforge.filebot.ResourceManager; +import net.sourceforge.tuned.Timer; +import net.sublight.webservice.ArrayOfGenre; +import net.sublight.webservice.ArrayOfIMDB; +import net.sublight.webservice.ArrayOfRelease; +import net.sublight.webservice.ArrayOfSubtitle; +import net.sublight.webservice.ArrayOfSubtitleLanguage; +import net.sublight.webservice.Genre; +import net.sublight.webservice.IMDB; +import net.sublight.webservice.Release; +import net.sublight.webservice.Subtitle; +import net.sublight.webservice.SubtitleLanguage; +import net.sublight.webservice.SubtitlesAPI2; +import net.sublight.webservice.SubtitlesAPI2Soap; + + +public class SublightSubtitleClient implements SubtitleProvider { + + private static final String iid = "42cc1701-3752-49e2-a148-332960073452"; + + private final String clientInfo; + + private final SubtitlesAPI2Soap webservice; + + private String session; + + + public SublightSubtitleClient(String clientInfo) { + this.clientInfo = clientInfo; + this.webservice = new SubtitlesAPI2().getSubtitlesAPI2Soap(); + } + + + @Override + public String getName() { + return "Sublight"; + } + + + @Override + public Icon getIcon() { + return ResourceManager.getIcon("search.sublight"); + } + + + @Override + public List search(String query) throws WebServiceException { + // require login + login(); + + Holder response = new Holder(); + Holder error = new Holder(); + + webservice.findIMDB(query, null, null, response, error); + + // abort if something went wrong + checkError(error); + + List results = new ArrayList(); + + if (response.value != null) { + for (IMDB imdb : response.value.getIMDB()) { + // remove classifier (e.g. tt0436992 -> 0436992) + int id = Integer.parseInt(imdb.getId().substring(2)); + + results.add(new MovieDescriptor(imdb.getTitle(), imdb.getYear(), id)); + } + } + + return results; + } + + + @Override + public List getSubtitleList(SearchResult searchResult, String languageName) throws WebServiceException { + MovieDescriptor movie = (MovieDescriptor) searchResult; + + List subtitles = new ArrayList(); + + // retrieve subtitles by name and year + for (Subtitle subtitle : getSubtitleList(null, movie.getName(), movie.getYear(), languageName)) { + subtitles.add(new SublightSubtitleDescriptor(subtitle)); + } + + return subtitles; + } + + + public List getSubtitleList(File videoFile, String languageName) throws WebServiceException, IOException { + List subtitles = new ArrayList(); + + // retrieve subtitles by video hash + for (Subtitle subtitle : getSubtitleList(SublightVideoHasher.computeHash(videoFile), null, null, languageName)) { + // only keep linked subtitles + if (subtitle.isIsLinked()) { + subtitles.add(new SublightSubtitleDescriptor(subtitle)); + } + } + + return subtitles; + } + + + protected List getSubtitleList(String videoHash, String name, Integer year, String languageName) throws WebServiceException { + // require login + login(); + + // given language or all languages + ArrayOfSubtitleLanguage languages = new ArrayOfSubtitleLanguage(); + + if (languageName != null) { + // given language + languages.getSubtitleLanguage().add(getSubtitleLanguage(languageName)); + } else { + // all languages + Collections.addAll(languages.getSubtitleLanguage(), SubtitleLanguage.values()); + } + + // all genres + ArrayOfGenre genres = new ArrayOfGenre(); + Collections.addAll(genres.getGenre(), Genre.values()); + + // response holders + Holder subtitles = new Holder(); + Holder releases = new Holder(); + Holder error = new Holder(); + + webservice.searchSubtitles3(session, videoHash, name, year, null, null, languages, genres, null, null, null, subtitles, releases, null, error); + + // abort if something went wrong + checkError(error); + + // return empty list if response is empty + if (subtitles.value == null) { + return Collections.emptyList(); + } + + // map all release names by subtitle id + if (releases.value != null) { + Map releaseNameBySubtitleID = new HashMap(); + + // map release names by subtitle id + for (Release release : releases.value.getRelease()) { + releaseNameBySubtitleID.put(release.getSubtitleID(), release.getName()); + } + + // set release names + for (Subtitle subtitle : subtitles.value.getSubtitle()) { + subtitle.setRelease(releaseNameBySubtitleID.get(subtitle.getSubtitleID())); + } + } + + return subtitles.value.getSubtitle(); + } + + + protected SubtitleLanguage getSubtitleLanguage(String languageName) { + for (SubtitleLanguage language : SubtitleLanguage.values()) { + if (language.value().equalsIgnoreCase(languageName)) + return language; + } + + // special language name handling + if (languageName.equalsIgnoreCase("Brazilian")) + return SubtitleLanguage.PORTUGUESE_BRAZIL; + if (languageName.equalsIgnoreCase("Bosnian")) + return SubtitleLanguage.BOSNIAN_LATIN; + if (languageName.equalsIgnoreCase("Serbian")) + return SubtitleLanguage.SERBIAN_LATIN; + + // unkown language + throw new IllegalArgumentException("Illegal language: " + languageName); + } + + + @Override + public URI getSubtitleListLink(SearchResult searchResult, String languageName) { + return null; + } + + + protected synchronized void login() throws WebServiceException { + if (session == null) { + Holder session = new Holder(); + Holder error = new Holder(); + + webservice.logInAnonymous3(clientInfo, iid, session, null, error); + + // abort if something went wrong + checkError(error); + + // start session + this.session = session.value; + } + + // reset timer + logoutTimer.set(10, TimeUnit.MINUTES, true); + } + + + protected synchronized void logout() throws WebServiceException { + if (session != null) { + Holder error = new Holder(); + + webservice.logOut(session, null, error); + + // abort if something went wrong + checkError(error); + + // stop session + this.session = null; + + // cancel timer + logoutTimer.cancel(); + } + } + + + protected void checkError(Holder error) throws WebServiceException { + if (error.value != null) { + throw new WebServiceException("Login failed: " + error.value); + } + } + + + protected final Timer logoutTimer = new Timer() { + + @Override + public void run() { + logout(); + } + }; + +} diff --git a/source/net/sourceforge/filebot/web/SublightSubtitleDescriptor.java b/source/net/sourceforge/filebot/web/SublightSubtitleDescriptor.java new file mode 100644 index 00000000..4ec4f69d --- /dev/null +++ b/source/net/sourceforge/filebot/web/SublightSubtitleDescriptor.java @@ -0,0 +1,60 @@ + +package net.sourceforge.filebot.web; + + +import net.sourceforge.tuned.DownloadTask; +import net.sublight.webservice.Subtitle; + + +public class SublightSubtitleDescriptor implements SubtitleDescriptor { + + private final Subtitle subtitle; + + + public SublightSubtitleDescriptor(Subtitle subtitle) { + this.subtitle = subtitle; + } + + + @Override + public String getName() { + // use release name by default + String releaseName = subtitle.getRelease(); + + if (releaseName == null || releaseName.isEmpty()) { + // create name from subtitle information (name, season, episode, ...) + String season = subtitle.getSeason() != null ? subtitle.getSeason().toString() : null; + String episode = subtitle.getEpisode() != null ? subtitle.getEpisode().toString() : null; + + return EpisodeFormat.getInstance().format(new Episode(subtitle.getTitle(), season, episode, null)); + } + + return releaseName; + } + + + @Override + public String getArchiveType() { + return subtitle.getSubtitleType().value().toLowerCase(); + } + + + @Override + public String getLanguageName() { + return subtitle.getLanguage().value(); + } + + + @Override + public DownloadTask createDownloadTask() { + // TODO support + return new DownloadTask(null); + } + + + @Override + public String toString() { + return String.format("%s [%s]", getName(), getLanguageName()); + } + +} diff --git a/source/net/sourceforge/filebot/web/SublightVideoHasher.java b/source/net/sourceforge/filebot/web/SublightVideoHasher.java new file mode 100644 index 00000000..d674d00f --- /dev/null +++ b/source/net/sourceforge/filebot/web/SublightVideoHasher.java @@ -0,0 +1,124 @@ + +package net.sourceforge.filebot.web; + + +import static java.lang.Math.*; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.nio.channels.FileChannel; +import java.nio.channels.FileChannel.MapMode; +import java.security.MessageDigest; +import java.util.Formatter; +import java.util.concurrent.TimeUnit; + +import net.sourceforge.filebot.mediainfo.MediaInfo; +import net.sourceforge.filebot.mediainfo.MediaInfo.StreamKind; + + +/** + * Compute special hash used by Sublight to identify video files. + * + *
+ * The hash is divided into 5 sections:
+ * 1 byte : reserved
+ * 2 bytes: video duration in seconds
+ * 6 bytes: file size in bytes
+ * 16 bytes: MD5 hash of the first 5 MB
+ * 1 byte: control byte, sum of all other bytes
+ * 
+ */ +public final class SublightVideoHasher { + + + public static String computeHash(File file) throws IOException { + byte[][] hash = new byte[4][]; + + // 1 byte = 0 (reserved) + hash[0] = new byte[] { 0 }; + + // 2 bytes (video duration in seconds) + hash[1] = getTrailingBytes(getDuration(file, TimeUnit.SECONDS), 2); + + // 6 bytes (file size in bytes) + hash[2] = getTrailingBytes(file.length(), 6); + + // 16 bytes (md5 hash of the first 5 MB) + hash[3] = getHeadMD5(file, 5 * 1024 * 1024); + + // format and sum + Formatter hex = new Formatter(new StringBuilder(52)); + byte sum = 0; + + for (byte[] group : hash) { + for (byte b : group) { + hex.format("%02x", b); + sum += b; + } + } + + // 1 byte (control byte) + hex.format("%02x", sum); + + // done + return hex.out().toString(); + } + + + protected static byte[] getTrailingBytes(long value, int n) { + byte[] bytes = BigInteger.valueOf(value).toByteArray(); + + // bytes will be initialized with 0 + byte[] trailingBytes = new byte[n]; + + // copy the least significant n bytes to the new array + System.arraycopy(bytes, max(0, bytes.length - n), trailingBytes, max(0, n - bytes.length), min(n, bytes.length)); + + return trailingBytes; + } + + + protected static long getDuration(File file, TimeUnit unit) throws IOException { + try { + MediaInfo mediaInfo = new MediaInfo(); + + if (!mediaInfo.open(file)) + throw new IllegalArgumentException("Failed to open file: " + file); + + // get media info + String duration = mediaInfo.get(StreamKind.General, 0, "Duration"); + + // close handle + mediaInfo.close(); + + // convert from milliseconds to given unit + return unit.convert(Long.parseLong(duration), TimeUnit.MILLISECONDS); + } catch (Exception e) { + throw new IOException("Failed to get video duration", e); + } + } + + + protected static byte[] getHeadMD5(File file, long chunkSize) throws IOException { + try { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + + FileChannel channel = new FileInputStream(file).getChannel(); + + try { + // calculate md5 + md5.update(channel.map(MapMode.READ_ONLY, 0, min(channel.size(), chunkSize))); + } finally { + // close channel + channel.close(); + } + + return md5.digest(); + } catch (Exception e) { + throw new IOException("Failed to calculate md5 hash", e); + } + } + +} diff --git a/test/net/sourceforge/filebot/web/IMDbClientTest.java b/test/net/sourceforge/filebot/web/IMDbClientTest.java index bd3b03d3..954f7f1c 100644 --- a/test/net/sourceforge/filebot/web/IMDbClientTest.java +++ b/test/net/sourceforge/filebot/web/IMDbClientTest.java @@ -87,8 +87,8 @@ public class IMDbClientTest { @Test public void removeQuotationMarks() throws Exception { - assertEquals("test", imdb.removeQuotationMarks("\"test\"")); + assertEquals("test", imdb.normalizeName("\"test\"")); - assertEquals("inner \"quotation marks\"", imdb.removeQuotationMarks("\"inner \"quotation marks\"\"")); + assertEquals("inner \"quotation marks\"", imdb.normalizeName("\"inner \"quotation marks\"\"")); } } diff --git a/test/net/sourceforge/filebot/web/OpenSubtitlesHasherTest.java b/test/net/sourceforge/filebot/web/OpenSubtitlesHasherTest.java index 5081caa6..242c440d 100644 --- a/test/net/sourceforge/filebot/web/OpenSubtitlesHasherTest.java +++ b/test/net/sourceforge/filebot/web/OpenSubtitlesHasherTest.java @@ -9,7 +9,6 @@ import java.io.FileInputStream; import java.util.Arrays; import java.util.Collection; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -17,13 +16,12 @@ import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) -@Ignore("No test data") public class OpenSubtitlesHasherTest { private String expectedHash; private File file; - + public OpenSubtitlesHasherTest(String expectedHash, File file) { this.file = file; this.expectedHash = expectedHash; diff --git a/test/net/sourceforge/filebot/web/SublightSubtitleClientTest.java b/test/net/sourceforge/filebot/web/SublightSubtitleClientTest.java new file mode 100644 index 00000000..140e6b22 --- /dev/null +++ b/test/net/sourceforge/filebot/web/SublightSubtitleClientTest.java @@ -0,0 +1,91 @@ + +package net.sourceforge.filebot.web; + + +import static org.junit.Assert.*; + +import java.util.List; + +import net.sublight.webservice.Subtitle; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + + +public class SublightSubtitleClientTest { + + private static SublightSubtitleClient client = new SublightSubtitleClient("Test;0.0"); + + + @BeforeClass + public static void login() { + // login manually + client.login(); + } + + + @Test + public void search() { + List list = client.search("babylon 5"); + + MovieDescriptor sample = (MovieDescriptor) list.get(0); + + // check sample entry + assertEquals("Babylon 5", sample.getName()); + assertEquals(105946, sample.getImdbId()); + + // check size + assertEquals(8, list.size()); + } + + + @Test + public void getSubtitleListEnglish() { + List list = client.getSubtitleList(new MovieDescriptor("Heroes", 2006, 813715), "English"); + + SubtitleDescriptor sample = list.get(0); + + assertTrue(sample.getName().startsWith("Heroes")); + assertEquals("English", sample.getLanguageName()); + + // check size + assertTrue(list.size() > 45); + } + + + @Test + public void getSubtitleListAllLanguages() { + List list = client.getSubtitleList(new MovieDescriptor("Babylon 5", 1994, 105946), null); + + SubtitleDescriptor sample = list.get(0); + + assertEquals("Babylon.5.S01E01.Midnight.on.the.Firing.Line.AC3.DVDRip.DivX-AMC", sample.getName()); + assertEquals("Slovenian", sample.getLanguageName()); + + // check size + assertTrue(list.size() > 45); + } + + + @Test + public void getSubtitleListVideoHash() { + List list = client.getSubtitleList("000a20000045eacfebd3c2c83bfb4ea1598b14e9be7db38316fd", null, null, "English"); + + Subtitle sample = list.get(0); + + assertEquals("Terminator: The Sarah Connor Chronicles", sample.getTitle()); + assertEquals(2, sample.getSeason(), 0); + assertEquals(22, sample.getEpisode(), 0); + assertEquals("Terminator.The.Sarah.Connor.Chronicles.S02E22.HDTV.XviD-2HD", sample.getRelease()); + assertTrue(sample.isIsLinked()); + } + + + @AfterClass + public static void logout() { + // logout manually + client.logout(); + } + +} diff --git a/test/net/sourceforge/filebot/web/WebTestSuite.java b/test/net/sourceforge/filebot/web/WebTestSuite.java index 37993dc0..188e5711 100644 --- a/test/net/sourceforge/filebot/web/WebTestSuite.java +++ b/test/net/sourceforge/filebot/web/WebTestSuite.java @@ -8,7 +8,7 @@ import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) -@SuiteClasses( { TVDotComClientTest.class, AnidbClientTest.class, TVRageClientTest.class, TheTVDBClientTest.class, IMDbClientTest.class, SubsceneSubtitleClientTest.class, SubtitleSourceClientTest.class, OpenSubtitlesHasherTest.class }) +@SuiteClasses( { TVDotComClientTest.class, AnidbClientTest.class, TVRageClientTest.class, TheTVDBClientTest.class, IMDbClientTest.class, SubsceneSubtitleClientTest.class, SubtitleSourceClientTest.class, SublightSubtitleClientTest.class }) public class WebTestSuite { }