class MovieTests(unittest.TestCase):
	@classmethod
	def setUpClass(self):
		self.downloader  = TorecSubtitlesDownloader()

	def test_search_movie_sanity(self):
		item    = self._create_test_valid_item()
		options = self.downloader.search_movie(item['title'])
		self.assertIsNotNone(options)
		self.assertEqual(len(options), 22)

	def test_search_inexisting_movie(self):
		item = {
			'title': 'finding mori',
		}

		options = self.downloader.search_movie(item['title'])
		self.assertIsNone(options)

	def test_download_movie_sanity(self):
		item    = self._create_test_valid_item()
		options = self.downloader.search_movie(item['title'])

		option      = options[0]
		page_id     = option.sub_id
		subtitle_id = option.option_id

		result                 = self.downloader.get_download_link(page_id, subtitle_id)
		subtitleData, fileName = self.downloader.download(result)
		self.assertIsNotNone(subtitleData)

		self._assert_subtitle_data(subtitleData, fileName)

	def _create_test_valid_item(self):
		return {
			'title': 'finding dory',
		}

	def _assert_subtitle_data(self, subtitleData, fileName):
		extension = os.path.splitext(fileName)[1]

		temp = tempfile.NamedTemporaryFile()
		temp.write(subtitleData)
		temp.flush()

		if (extension == ".zip"):
			rf = zipfile.ZipFile(temp.name)
		elif (extension == ".rar"):
			rf = rarfile.RarFile(temp.name)
		else:
			fail("unknown extension found %s", extension)

		for f in rf.infolist():
			data = rf.read(f.filename)

			temp = tempfile.NamedTemporaryFile()
			temp.write(data)
			temp.flush()

			self.assertIsNotNone(temp.read())
			break
Beispiel #2
0
class MovieTests(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.downloader = TorecSubtitlesDownloader()

    def test_search_movie_sanity(self):
        item = self._create_test_valid_item()
        options = self.downloader.search_movie(item['title'])
        self.assertIsNotNone(options)
        self.assertEqual(len(options), 22)

    def test_search_inexisting_movie(self):
        item = {
            'title': 'finding mori',
        }

        options = self.downloader.search_movie(item['title'])
        self.assertIsNone(options)

    def test_download_movie_sanity(self):
        item = self._create_test_valid_item()
        options = self.downloader.search_movie(item['title'])

        option = options[0]
        page_id = option.sub_id
        subtitle_id = option.option_id

        result = self.downloader.get_download_link(page_id, subtitle_id)
        subtitleData, fileName = self.downloader.download(result)
        self.assertIsNotNone(subtitleData)

        self._assert_subtitle_data(subtitleData, fileName)

    def _create_test_valid_item(self):
        return {
            'title': 'finding dory',
        }

    def _assert_subtitle_data(self, subtitleData, fileName):
        extension = os.path.splitext(fileName)[1]

        temp = tempfile.NamedTemporaryFile()
        temp.write(subtitleData)
        temp.flush()

        if (extension == ".zip"):
            rf = zipfile.ZipFile(temp.name)
        elif (extension == ".rar"):
            rf = rarfile.RarFile(temp.name)
        else:
            fail("unknown extension found %s", extension)

        for f in rf.infolist():
            data = rf.read(f.filename)

            temp = tempfile.NamedTemporaryFile()
            temp.write(data)
            temp.flush()

            self.assertIsNotNone(temp.read())
            break
def search(item):
    best_match_id = None
    downloader = TorecSubtitlesDownloader()
    subtitles_options = None
    
    start_time = time.time()

    try:
        search_start_time = time.time()
        
        if (item['mansearch'] == False):
            if item['tvshow'] != "":
                subtitles_options = downloader.search_tvshow(item['tvshow'], item['season'], item['episode'])
            else:              
                title, year = xbmc.getCleanMovieTitle(item['title'])
                subtitles_options = downloader.search_movie(title)
        else:
            item['tvshow'], item['season'], item['episode'] = check_and_parse_if_title_is_TVshow(item['title'])
            if (item['tvshow'] == "NotTVShow"):
                item['title'] = item['title'].replace("%20", "%2b") # " " to "+"
                title, year = xbmc.getCleanMovieTitle(item['title'])
                subtitles_options = downloader.search_movie(title)
            else:
                subtitles_options = downloader.search_tvshow(item['tvshow'], int(item['season']), int(item['episode']))
                                    
        log(__name__, "search took %f" % (time.time() - search_start_time))
    except Exception as e:
        log(
            __name__,
            "failed to connect to service for subtitle search %s" % e
        )
        xbmc.executebuiltin(
            (u'Notification(%s,%s)' % (__scriptname__, __language__(32001))
             ).encode('utf-8'))
        return
    
    list_items = []
    if subtitles_options:
        best_match_option_id = downloader.get_best_match_id(
            os.path.basename(item['file_original_path']), subtitles_options
        )

        for item_data in subtitles_options:
            listitem = xbmcgui.ListItem(
                label="Hebrew", label2=item_data.name, iconImage="0",
                thumbnailImage="he"
            )
            url = (
                "plugin://%s/?action=download&sub_id=%s&option_id="
                "%s&filename=%s" % (
                    __scriptid__, item_data.sub_id, item_data.option_id, item_data.name
                )
            )

            if item_data.option_id == best_match_option_id:
                log(
                    __name__, "Found most relevant option to be : %s" %
                              item_data.name
                )
                listitem.setProperty("sync", "true")
                list_items.insert(0, (url, listitem, False,))
            else:
                list_items.append((url, listitem, False,))

    xbmcplugin.addDirectoryItems(handle=int(sys.argv[1]), items=list_items)
    log(__name__, "Overall search took %f" % (time.time() - start_time))