def download(sub_id, option_id, filename, stack=False):
    result = None
    subtitle_list = []
    exts = [".srt", ".sub"]
    downloader = TorecSubtitlesDownloader()
    start_time = time.time()

    delete_old_subs()

    try:
        result = downloader.get_download_link(sub_id, option_id)
    except Exception as e:
        log(__name__,"failed to connect to service for subtitle download %s" % e)
        return subtitle_list
        
    if result is not None:
        log(__name__, "Downloading subtitles from '%s'" % result)
        
        (subtitle_data, subtitle_name) = downloader.download(result)
        (file_name, file_ext) = os.path.splitext(subtitle_name)
        archive_file = os.path.join(__temp__, "Torec%s" % file_ext)
        with open(archive_file, "wb") as subFile:
            subFile.write(subtitle_data)

        xbmc.executebuiltin(
            ('XBMC.Extract("%s","%s")' % (archive_file, __temp__,)
             ).encode('utf-8'), True)

        for file_ in xbmcvfs.listdir(__temp__)[1]:
            ufile = file_.decode('utf-8')
            log(__name__, "file=%s" % ufile)
            file_ = os.path.join(__temp__, ufile)
            if os.path.splitext(ufile)[1] in exts:
                convert_to_utf(file_)
                subtitle_list.append(file_)
      
    log(__name__, "Overall download took %f" % (time.time() - start_time))
    return subtitle_list
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
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
class TVShowTests(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.downloader = TorecSubtitlesDownloader()

    def test_search_tvshow_sanity(self):
        item = self._create_test_valid_item()
        options = self.downloader.search_tvshow(item['tvshow'], item['season'],
                                                item['episode'])
        self.assertIsNotNone(options)
        self.assertGreaterEqual(len(options), 5)

    def test_search_tvshow_last_season_episode(self):
        item = {'tvshow': 'house of cards', 'season': '3', 'episode': '13'}

        options = self.downloader.search_tvshow(item['tvshow'], item['season'],
                                                item['episode'])
        self.assertIsNotNone(options)
        self.assertGreaterEqual(len(options), 1)

    def test_search_inexisting_tvshow(self):
        item = {'tvshow': 'house of lards', 'season': '3', 'episode': '1'}

        options = self.downloader.search_tvshow(item['tvshow'], item['season'],
                                                item['episode'])
        self.assertIsNone(options)

    def test_search_existing_tvshow_with_no_subtitles(self):
        item = {'tvshow': 'Cowboy Bebop', 'season': '1', 'episode': '1'}

        options = self.downloader.search_tvshow(item['tvshow'], item['season'],
                                                item['episode'])
        self.assertIsNone(options)

    def test_download_tvshow_sanity(self):
        item = self._create_test_valid_item()
        options = self.downloader.search_tvshow(item['tvshow'], item['season'],
                                                item['episode'])

        option = options[-1]
        page_id = option.sub_id
        subtitle_id = option.option_id

        download_link = self.downloader.get_download_link(page_id, subtitle_id)
        self.assertTrue(len(download_link) != 0)

        subtitleData, fileName = self.downloader.download(download_link)
        self.assertIsNotNone(subtitleData)

        self._assert_subtitle_data(subtitleData, fileName)

    def _create_test_valid_item(self):
        return {'tvshow': 'house of cards', 'season': '3', 'episode': '1'}

    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