Ejemplo n.º 1
0
    def showsByActor(self, actionArgs):
        if actionArgs == None:
            k = tools.showKeyboard('', tools.lang(32016))
            k.doModal()
            query = (k.getText() if k.isConfirmed() else None)
            if query == None or query == '':
                tools.cancel_directory()
                return
        else:
            query = tools.unquote(actionArgs)

        database.addSearchHistory(query, 'showActor')
        query = tools.deaccentString(query)
        query = query.replace(' ', '-')
        query = tools.quote_plus(query)

        trakt_list = trakt.json_response('people/%s/shows' % query, limit=True)

        try:
            trakt_list = trakt_list['cast']
        except:
            import traceback
            traceback.print_exc()
            trakt_list = []

        trakt_list = [i['show'] for i in trakt_list]

        self.showListBuilder(trakt_list)

        tools.closeDirectory('tvshows')
Ejemplo n.º 2
0
    def movie_magnet_to_stream(self, magnet, args):
        selectedFile = None

        magnet_id = self.upload_magnet(magnet)['id']
        folder_details = self.magnet_status(magnet_id)['links']

        folder_details = [(key, value)
                          for key, value in folder_details.iteritems() if any(
                              value.endswith(ext)
                              for ext in source_utils.COMMON_VIDEO_EXTENSIONS)]

        for torrent_file in folder_details:
            if source_utils.filter_movie_title(
                    torrent_file[1],
                    tools.deaccentString(args['info']['title']),
                    args['info']['year']):
                selectedFile = torrent_file[0]
                break

        if selectedFile is None:
            folder_details = [
                tfile for tfile in folder_details
                if 'sample' not in tfile[1].lower()
            ]
            folder_details = [
                tfile for tfile in folder_details
                if source_utils.cleanTitle(args['info']['title']) in
                source_utils.cleanTitle(tfile[1].lower())
            ]
            if len(folder_details) == 1:
                selectedFile = folder_details[0]
            else:
                return
        self.delete_magnet(magnet_id)
        return self.resolve_hoster(selectedFile)
Ejemplo n.º 3
0
    def moviesSearch(self):

        k = tools.showKeyboard('', tools.lang(32016).encode('utf-8'))
        k.doModal()
        query = (k.getText() if k.isConfirmed() else None)
        if query == None or query == '':
            return
        query = tools.deaccentString(query.encode('utf-8'))
        query = tools.quote_plus(query)
        traktList = trakt.json_response('search/movie?query=%s' % query)
        self.commonListBuilder(traktList)
        tools.closeDirectory('movies', viewType=self.viewType)
Ejemplo n.º 4
0
    def showsSearch(self):

        k = tools.showKeyboard('', tools.lang(32016))
        k.doModal()
        query = (k.getText() if k.isConfirmed() else None)
        if query == None or query == '':
            return
        query = tools.deaccentString(query)
        query = tools.quote_plus(query)
        traktList = trakt.json_response('search/show?query=%s&extended=full' % query, limit=True)
        self.showListBuilder(traktList)
        tools.closeDirectory('tvshows')
Ejemplo n.º 5
0
def build_display_title(source):
    if 'debrid_provider' in source:
        debrid_provider = tools.colorString(
            tools.shortened_debrid(source.get('debrid_provider', '')))
        if debrid_provider != '':
            debrid_provider = " " + debrid_provider + " |"
        else:
            tools.log('No Debrid Provider')
    else:
        debrid_provider = ''
    quality = tools.color_quality(source['quality'])
    release_title = tools.colorString(source['release_title'])
    info = source['info']
    if len(info) > 0:
        info = ' '.join(info)
        info = '| ' + info
    else:
        info = ''

    title = ''

    if source['type'] == 'torrent':
        size = tools.colorString(tools.source_size_display(source['size']))
        title = "%s |%s %s | %s %s\n%s" % (
            quality, debrid_provider, source['source'].upper(), size, info,
            tools.deaccentString(release_title).encode('utf-8'))
    if source['type'] == 'hoster':
        title = "%s |%s %s | %s %s\n%s" % (
            quality,
            debrid_provider,
            source['provider'].upper(),
            source['source'],
            info,
            tools.deaccentString(release_title).encode('utf-8'),
        )

    if tools.getSetting('general.sourceselectlines') == 'false':
        title = title.replace('\n', ' | ')

    return title
Ejemplo n.º 6
0
    def moviesSearch(self, actionArgs=None):

        if actionArgs == None:
            k = tools.showKeyboard('', tools.lang(32016))
            k.doModal()
            query = (k.getText() if k.isConfirmed() else None)
            if query == None or query == '':
                return
        else:
            query = actionArgs
        database.addSearchHistory(query, 'movie')
        query = tools.deaccentString(tools.display_string(query))
        tools.quote(query)
        tools.closeAllDialogs()
        tools.closeDirectory('movies')
        tools.execute("Container.Update(%s?action=moviesSearchResults&actionArgs=%s, replace)'" % (sysaddon, query))
Ejemplo n.º 7
0
    def showsSearch(self, actionArgs=None):

        if actionArgs == None:
            k = tools.showKeyboard('', tools.lang(32016))
            k.doModal()
            query = (k.getText() if k.isConfirmed() else None)
            if query == None or query == '':
                tools.cancel_directory()
                return
        else:
            query = actionArgs

        query = query.decode('utf-8')
        database.addSearchHistory(query, 'show')
        query = tools.deaccentString(tools.display_string(query))
        query = tools.quote(query)
        self.showsSearchResults(query)
Ejemplo n.º 8
0
    def moviesSearch(self, actionArgs=None):

        if actionArgs == None:
            k = tools.showKeyboard('', tools.lang(32016).encode('utf-8'))
            k.doModal()
            query = (k.getText() if k.isConfirmed() else None)
            if query == None or query == '':
                return
        else:
            query = actionArgs

        database.addSearchHistory(query, 'movie')
        query = tools.deaccentString(query.encode('utf-8'))
        query = tools.quote_plus(query)
        trakt_list = trakt.json_response('search/movie?query=%s' % query)
        if trakt_list is None:
            return
        self.commonListBuilder(trakt_list)
        tools.closeDirectory('movies', viewType=self.viewType)
Ejemplo n.º 9
0
    def _single_magnet_resolve(self, magnet, args, pack_select=False):

        selectedFile = None
        folder_details = self.direct_download(magnet)['content']
        folder_details = sorted(folder_details, key=lambda i: int(i['size']), reverse=True)
        folder_details = [tfile for tfile in folder_details
                          if any(tfile['link'].endswith(ext) for ext in source_utils.COMMON_VIDEO_EXTENSIONS)]
        for torrent_file in folder_details:
            if source_utils.filter_movie_title(torrent_file['path'].split('/')[-1],
                                               tools.deaccentString(args['info']['title']),
                                               args['info']['year']):
                selectedFile = torrent_file
                break

        if selectedFile is None:
            folder_details = [tfile for tfile in folder_details if 'sample' not in tfile['path'].lower()]
            folder_details = [tfile for tfile in folder_details if source_utils.cleanTitle(args['info']['title'])
                              in source_utils.cleanTitle(tfile['path'].lower())]
            if len(folder_details) == 1:
                selectedFile = folder_details[0]
            else:
                return

        if tools.getSetting('premiumize.transcoded') == 'true':
            if selectedFile['transcode_status'] == 'finished':
                try:
                    if selectedFile['stream_link'] is not None and tools.getSetting('premiumize.addToCloud') == 'true':
                        transfer = self.create_transfer(magnet)
                        database.add_premiumize_transfer(transfer['id'])
                except:
                    pass
                return selectedFile['stream_link']
            else:
                pass
        try:
            if selectedFile['link'] is not None and tools.getSetting('premiumize.addToCloud') == 'true':
                transfer = self.create_transfer(magnet)
                database.add_premiumize_transfer(transfer['id'])
        except:
            pass
        return selectedFile['link']
Ejemplo n.º 10
0
    def showsSearch(self, actionArgs):

        if actionArgs == None:
            k = tools.showKeyboard('', tools.lang(32016).encode('utf-8'))
            k.doModal()
            query = (k.getText() if k.isConfirmed() else None)
            if query == None or query == '':
                return
        else:
            query = actionArgs

        database.addSearchHistory(query, 'show')
        query = tools.deaccentString(query)
        query = tools.quote_plus(query)

        trakt_list = trakt.json_response('search/show?query=%s&extended=full' % query, limit=True)
        if trakt_list is None:
            return

        self.showListBuilder(trakt_list)
        tools.closeDirectory('tvshows')
Ejemplo n.º 11
0
def clean_title(title, broken=None):
    title = title.lower()
    title = tools.deaccentString(title)
    title = tools.strip_non_ascii_and_unprintable(title)

    if broken == 1:
        apostrophe_replacement = ''
    elif broken == 2:
        apostrophe_replacement = ' s'
    else:
        apostrophe_replacement = 's'

    title = title.replace("\\'s", apostrophe_replacement)
    title = title.replace("'s", apostrophe_replacement)
    title = title.replace("'s", apostrophe_replacement)
    title = title.replace(" 039 s", apostrophe_replacement)

    title = re.sub(r'\:|\\|\/|\,|\!|\?|\(|\)|\'|\"|\\|\[|\]|\-|\_|\.', ' ', title)
    title = re.sub(r'\s+', ' ', title)
    title = re.sub(r'\&', 'and', title)

    return title.strip()
Ejemplo n.º 12
0
    def parseEpisodeInfo(self, response, traktInfo, showArgs):
        try:
            if "status_code" in response:
                if response["status_code"] == 34: return None

            try:response['name'] = tools.deaccentString(response['name'])
            except: pass
            try:
                currentDate = datetime.today().date()
                airdate = str(response['air_date'])
                airdate = tools.datetime_workaround(airdate)
            except:
                pass
            try:
                if airdate > currentDate:
                    return
            except:
                pass
            item = {'info': None, 'art': None}

            art = {}
            try:art['poster'] = showArgs['seasonInfo']['art']['poster']
            except:art['poster'] = showArgs['showInfo']['art']['poster']
            try:art['thumb'] = self.thumbPath + response.get('still_path', '')
            except:pass
            try:art['landscape'] = showArgs['showInfo']['art']['landscape']
            except:pass
            try:art['fanart'] = showArgs['showInfo']['art']['fanart']
            except:pass

            info = {}

            try:info['trailer'] = tools.youtube_url % [i for i in response['videos']['results'] if i['site'] == 'YouTube'][0]['key']
            except:pass
            try:info['duration'] = showArgs['showInfo']['info'].get('duration')
            except:pass
            try:info['episode'] = response.get('episode_number', '')
            except:pass
            try:info['season'] = response.get('season_number', '')
            except:pass
            try:info['sortepisode'] = response.get('episode_number', '')
            except:pass
            try:info['sortseason'] = response.get('season_number', '')
            except:pass
            try:info['genre'] = showArgs['showInfo']['info']['genre']
            except:pass
            try:info['title'] = info['sorttitle'] = info['originaltitle'] = tools.deaccentString(response['name'])
            except: return None
            try:info['rating'] = response.get('vote_average', '')
            except:pass
            try:info['aired'] = response.get('air_date', '')
            except:
                import traceback
                traceback.print_exc()
                pass
            try:info['premiered'] = response.get('air_date', '')
            except:pass
            try:info['year'] = int(response.get('air_date', '0000')[:4])
            except:pass
            try:info['tvshowtitle'] = showArgs['showInfo']['info']['tvshowtitle']
            except:pass
            try:info['year'] = response.get('firstAired', '')[:4]
            except:pass

            try:info['plot'] = response.get('overview', '')
            except:pass
            try:info['imdbnumber'] = showArgs['showInfo']['ids']['imdb']
            except:pass
            try:info['mediatype'] = 'episode'
            except:pass
            try:info['mpaa'] = showArgs['showInfo']['info']['mpaa']
            except:pass

            try:info['castandrole'] = [(i['name'],i['character']) for i in response['credits']['cast']]
            except:pass

            item['ids'] = traktInfo['ids']
            item['info'] = info
            item['art'] = art
            item['showInfo'] = showArgs['showInfo']
            item['trakt_object'] = {}
            item['trakt_object']['episodes'] = [traktInfo]

            return item

        except:
            import traceback
            traceback.print_exc()
            return None
Ejemplo n.º 13
0
    def resolve(self, sources, args, pack_select=False):
        try:
            if 'showInfo' in args:
                background = args['showInfo']['art']['fanart']
            else:
                background = args['fanart']

            self.setText(tools.lang(33000).encode('utf-8'))
            self.setBackground(background)
            stream_link = None
            loop_count = 0
            # Begin resolving links
            tools.log('Attempting to Resolve file link', 'info')
            for i in sources:
                debrid_provider = i.get('debrid_provider', '')
                loop_count += 1
                try:
                    if self.is_canceled():
                        self.close()
                        return
                    if 'size' in i:
                        i['info'].append(tools.source_size_display(i['size']))
                    loop_count_string = "(" + str(loop_count) + " of " + str(
                        len(sources)) + ")"
                    line1 = "%s %s - %s" % (
                        tools.lang(32036).encode('utf-8'),
                        tools.colorString(
                            tools.deaccentString(
                                i['release_title']).encode('utf-8')),
                        loop_count_string)
                    line2 = "%s %s | Source: %s" % (
                        tools.lang(32037).encode('utf-8'),
                        tools.colorString(debrid_provider.upper()),
                        tools.colorString(i['source']))
                    line3 = '%s %s | Info: %s' % (
                        tools.lang(32038).encode('utf-8'),
                        tools.colorString(i['quality']),
                        tools.colorString(" ".join(i['info'])))

                    self.setText(line1)
                    self.setText2(line2)
                    self.setText3(line3)

                    if i['type'] == 'torrent':
                        if i['debrid_provider'] == 'premiumize':
                            stream_link = self.premiumizeResolve(
                                i, args, pack_select)
                        elif i['debrid_provider'] == 'real_debrid':
                            stream_link = self.realdebridResolve(i, args)

                        if stream_link is None:
                            tools.log('Failed to resolve for torrent %s' %
                                      i['release_title'])
                            continue
                        else:
                            self.return_data = stream_link
                            self.close()
                            return

                    elif i['type'] == 'hoster':
                        # Quick fallback to speed up resolving while direct and free hosters are not supported
                        if 'debrid_provider' not in i:
                            continue
                        provider = i['provider_imports']
                        providerModule = __import__('%s.%s' %
                                                    (provider[0], provider[1]),
                                                    fromlist=[''])
                        providerModule = providerModule.source()

                        try:
                            i['url'] = providerModule.resolve(i['url'])
                        except:
                            import traceback
                            traceback.print_exc()
                            pass

                        if i['url'] is None:
                            continue

                        if 'debrid_provider' in i:
                            if i['debrid_provider'] == 'premiumize' and tools.getSetting(
                                    'premiumize.enabled') == 'true':
                                stream_link = self.premiumizeResolve(i, args)
                                if stream_link is None:
                                    continue

                            if i['debrid_provider'] == 'real_debrid':
                                stream_link = self.realdebridResolve(i, args)
                                if stream_link is None:
                                    continue

                        else:
                            # Currently not supporting free hosters at this point in time
                            # ResolveURL and Direct link testing needs to be tested first
                            continue
                            try:
                                try:
                                    headers = i['url'].rsplit('|', 1)[1]
                                except:
                                    headers = ''

                                headers = tools.quote_plus(headers).replace(
                                    '%3D', '=') if ' ' in headers else headers
                                headers = dict(tools.parse_qsl(headers))

                                live_check = requests.head(i['url'],
                                                           headers=headers)

                                if not live_check.status_code == 200:
                                    continue

                                stream_link = i['url']
                            except:
                                stream_link = None

                        if stream_link is None:
                            continue
                        else:
                            if stream_link.endswith('.rar'):
                                continue
                            self.return_data = stream_link
                            self.close()
                            return
                    continue

                except:
                    import traceback
                    traceback.print_exc()
                    continue

            self.close()
            if tools.getSetting('premiumize.enabled') == 'true':
                tools.execute(
                    'RunPlugin("plugin://plugin.video.%s/?action=premiumizeCleanup")'
                    % tools.addonName.lower())
            return
        except:
            import traceback
            traceback.print_exc()
            self.close()
            return
Ejemplo n.º 14
0
    def parseEpisodeInfo(self, response, traktInfo, showArgs):
        try:
            if "status_code" in response:
                if response["status_code"] == 34: return None

            try:
                response['name'] = tools.deaccentString(response['name'])
            except:
                pass
            try:
                currentDate = datetime.today().date()
                airdate = str(response['air_date'])
                airdate = tools.datetime_workaround(airdate)
                if airdate > currentDate:
                    return
            except:
                pass

            item = {'info': None, 'art': None}

            art = copy.deepcopy(showArgs['seasonInfo']['art'])
            try:
                if self.episode_fanart == 'true':
                    art.update(self.parseEpisodeFanart(response))

                art['landscape'] = self.backgroundPath + response.get(
                    'still_path', '')
                art['thumb'] = self.thumbPath + response.get('still_path', '')
            except:
                pass

            info = {}

            try:
                info['trailer'] = tools.youtube_url % \
                                  [i for i in response['videos']['results'] if i['site'] == 'YouTube'][0]['key']
            except:
                pass
            try:
                info['duration'] = showArgs['showInfo']['info'].get('duration')
            except:
                pass
            try:
                info['episode'] = response.get('episode_number', '')
            except:
                return None
            try:
                info['season'] = response.get('season_number', '')
            except:
                return None
            try:
                info['sortepisode'] = response.get('episode_number', '')
            except:
                pass
            try:
                info['sortseason'] = response.get('season_number', '')
            except:
                pass
            try:
                info['genre'] = showArgs['showInfo']['info']['genre']
            except:
                pass
            try:
                info['title'] = info['sorttitle'] = info[
                    'originaltitle'] = tools.deaccentString(response['name'])
            except:
                return None
            try:
                info['rating'] = response.get('vote_average', '')
            except:
                pass
            try:
                info['aired'] = traktInfo['first_aired']
            except:
                import traceback
                traceback.print_exc()
                pass
            try:
                info['premiered'] = traktInfo['first_aired']
            except:
                pass
            try:
                info['year'] = int(response.get('air_date', '0000')[:4])
                if info['year'] == '0000':
                    info['year'] = int(traktInfo.get('firstAired', '0000')[:4])
            except:
                pass
            try:
                info['tvshowtitle'] = showArgs['showInfo']['info'][
                    'tvshowtitle']
            except:
                pass
            try:
                info['plot'] = response.get('overview', '')
                if info['plot'] == '':
                    traktInfo.get('overview', '')
            except:
                pass
            try:
                info['imdbnumber'] = showArgs['showInfo']['ids']['imdb']
            except:
                pass
            try:
                info['mediatype'] = 'episode'
            except:
                pass
            try:
                info['mpaa'] = showArgs['showInfo']['info']['mpaa']
            except:
                pass

            try:
                item['cast'] = [{
                    'name':
                    i['name'],
                    'role':
                    i['character'],
                    'thumbnail':
                    '{}{}'.format(self.backgroundPath, i['profile_path'])
                } for i in response['credits']['cast']]
            except:
                item['cast'] = []
                pass

            item['ids'] = traktInfo['ids']
            for id, value in showArgs['showInfo']['ids'].items():
                item['ids']['tvshow.{}'.format(id)] = value
            item['info'] = info
            item['art'] = art
            item['showInfo'] = showArgs['showInfo']
            item['trakt_object'] = {}
            item['trakt_object']['episodes'] = [traktInfo]

            return item

        except:
            import traceback
            traceback.print_exc()
            return None