def showYears(self, year=None, page=None):
        if year is None:
            current_year = int(
                tools.datetime_workaround(
                    datetime.datetime.today().strftime('%Y-%m-%d')).year)
            all_years = reversed(
                [year for year in range(1900, current_year + 1)])
            menu_items = []
            for year in all_years:
                menu_items.append(
                    tools.addDirectoryItem(str(year),
                                           'showYears&actionArgs=%s' % year,
                                           bulk_add=True))
            tools.addMenuItems(syshandle, menu_items, len(menu_items))
            tools.closeDirectory('tvshows')
        else:
            if page is None:
                page = 1

            trakt_list = trakt.json_response('shows/popular?years=%s&page=%s' %
                                             (year, page))
            self.showListBuilder(trakt_list)
            tools.addDirectoryItem(
                tools.lang(32019),
                'showYears&actionArgs=%s&page=%s' % (year, int(page) + 1))
            tools.closeDirectory('tvshows')
    def onDeckShows(self):
        hidden_shows = hidden_database.get_hidden_items(
            'progress_watched', 'shows')
        trakt_list = trakt.json_response('sync/playback/episodes', limit=True)

        if trakt_list is None:
            return
        trakt_list = [
            i for i in trakt_list
            if i['show']['ids']['trakt'] not in hidden_shows
        ]
        trakt_list = sorted(
            trakt_list,
            key=lambda i: tools.datetime_workaround(i['paused_at'][:19],
                                                    format="%Y-%m-%dT%H:%M:%S",
                                                    date_only=False),
            reverse=True)
        filter_list = []
        showList = []
        sort_list = []
        for i in trakt_list:
            if i['show']['ids']['trakt'] not in filter_list:
                if int(i['progress']) != 0:
                    showList.append(i)
                    filter_list.append(i['show']['ids']['trakt'])
                    sort_list.append(i['show']['ids']['trakt'])

        sort = {'type': 'showInfo', 'id_list': sort_list}
        self.mixedEpisodeBuilder(showList, sort=sort)
        tools.closeDirectory('tvshows')
Exemple #3
0
    def myNextUp(self, ):
        hidden_shows = trakt.get_trakt_hidden_items('watched')['shows']
        self.threadList = []
        watched = trakt.json_response('users/me/watched/shows?extended=full',
                                      limit=False)

        watched = watched[:200]
        if watched is None:
            return
        watch_list = []
        for i in watched:
            if i is not None:
                watch_list.append(i)

        watched = [
            i for i in watched if i['show']['ids']['trakt'] not in hidden_shows
        ]
        if tools.getSetting('nextup.sort') == '1':
            watched = sorted(watched,
                             key=lambda i: tools.datetime_workaround(
                                 i['last_watched_at'][:19],
                                 format="%Y-%m-%dT%H:%M:%S",
                                 date_only=False),
                             reverse=True)

            sort = {
                'type': 'showInfo',
                'id_list': [i['show']['ids']['trakt'] for i in watched]
            }
        else:
            sort = None

        for i in watched:
            self.threadList.append(
                Thread(target=self.traktProgressWorker, args=(i, )))
        self.runThreads()
        self.threadList = []
        next_up = self.itemList

        self.itemList = []
        next_list = []
        for i in next_up:
            try:
                if i['progress']['next_episode'] is not None:
                    next_list.append(i)
            except:
                pass
        next_list = next_list[:50]
        build_list = []

        for i in next_list:
            item = {
                'show': i['show'],
                'episode': i['progress']['next_episode']
            }
            build_list.append(item)

        self.directToEpisodeBuilder(build_list, sort=sort)

        tools.closeDirectory('episodes')
    def is_aired(self, info):
        try:
            try:air_date = info['aired']
            except: air_date = info['premiered']

            if tools.getSetting('general.datedelay') == 'true':
                air_date = tools.datetime_workaround(air_date, '%Y-%m-%d', date_only=True)
                air_date += datetime.timedelta(days=1)
            else:
                air_date = tools.datetime_workaround(air_date, '%Y-%m-%d', date_only=True)

            if air_date > datetime.date.today():
                return False

            else:
                return True
        except:
            # Assume an item is aired if we do not have any information on it
            return True
Exemple #5
0
    def onDeckMovies(self):
        traktList = trakt.json_response('sync/playback/movies', limit=True)
        if traktList is None:
            return
        traktList = sorted(
            traktList,
            key=lambda i: tools.datetime_workaround(i['paused_at'][:10]))
        movieList = []
        filter_list = []
        for i in traktList:
            if i['movie']['ids']['trakt'] not in filter_list:
                if int(i['progress']) != 0:
                    movieList.append(i)
                    filter_list.append(i['movie']['ids']['trakt'])

        self.commonListBuilder(movieList)
        tools.closeDirectory('movies', viewType=self.viewType)
    def onDeckMovies(self):
        traktList = trakt.json_response('sync/playback/movies', limit=True)
        if traktList is None:
            return

        trakt_list = sorted(traktList, key=lambda i: tools.datetime_workaround(i['paused_at'][:19],
                                                                               format="%Y-%m-%dT%H:%M:%S",
                                                                               date_only=False), reverse=True)
        movie_list = []
        filter_list = []
        for i in trakt_list:
            if i['movie']['ids']['trakt'] not in filter_list:
                if int(i['progress']) != 0:
                    movie_list.append(i)
                    filter_list.append(i['movie']['ids']['trakt'])

        self.commonListBuilder(movie_list)
        tools.closeDirectory('movies')
    def onDeckShows(self):
        hidden_shows = trakt.get_trakt_hidden_items('watched')['shows']
        traktList = trakt.json_response('sync/playback/episodes?extended=full',
                                        limit=True)
        if traktList is None:
            return
        traktList = [
            i for i in traktList
            if i['show']['ids']['trakt'] not in hidden_shows
        ]
        traktList = sorted(
            traktList,
            key=lambda i: tools.datetime_workaround(i['paused_at'][:19],
                                                    format="%Y-%m-%dT%H:%M:%S",
                                                    date_only=False),
            reverse=True)
        filter_list = []
        showList = []
        sort_list = []
        for i in traktList:
            if i['show']['ids']['trakt'] not in filter_list:
                if int(i['progress']) != 0:
                    showList.append(i)
                    filter_list.append(i['show']['ids']['trakt'])
                    sort_list.append(i['show']['ids']['trakt'])

        sort = {'type': 'showInfo', 'id_list': sort_list}
        title_appends = {}
        for i in showList:
            title_appends[i['episode']['ids']
                          ['trakt']] = 'Paused (%s%%)' % int(i['progress'])

        self.directToEpisodeBuilder(showList,
                                    sort=sort,
                                    title_appends=title_appends)
        tools.closeDirectory('tvshows')
Exemple #8
0
    def episodeIDToListItem(self, trakt_object, show_meta):
        response = requests.get(
            self.base_url + self.season_url %
            (show_meta['showInfo']['ids']['imdb'], trakt_object['season']))
        details = BeautifulSoup(response.text,
                                'html.parser',
                                parse_only=SoupStrainer(
                                    'div', {'id': 'pagecontent'}))

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

        art = {}

        info = {}

        try:
            info['episode'] = info['sortepisode'] = int(trakt_object['number'])
            episode = details.find('div', {
                'class': 'list detail eplist'
            }).find_all('div',
                        recursive=False)[int(trakt_object['number']) - 1]
        except:
            return

        try:
            info['season'] = info['sortseason'] = trakt_object['season']
        except:
            pass
        try:
            info['title'] = info['originaltitle'] = tools.unquote(
                episode.find('a', {
                    'itemprop': 'name'
                }).text.strip())
            if info['title'] is None:
                return None
        except:
            pass
        try:
            info['rating'] = float(
                episode.find('span', {
                    'class': 'ipl-rating-star__rating'
                }).text.strip())
        except:
            pass

        try:
            info['premiered'] = trakt_object['first_aired']
        except:
            info['premiered'] = ''

        try:
            aired = episode.find('div', {'class': 'airdate'}).text.strip()
            aired = aired.split(' ')
            aired[0] = aired[0].zfill(2)
            aired = tools.datetime_workaround(
                '%s %s %s' % (aired[0], aired[1].rstrip('.'), aired[2]),
                '%d %b %Y')
            info['aired'] = aired.strftime('%Y-%m-%d')
        except:
            info['aired'] = ''
            pass

        try:
            info['year'] = trakt_object['aired'][:4]
        except:
            pass
        try:
            info['plot'] = episode.find('div', {
                'itemprop': 'description'
            }).text.strip()
        except:
            pass
        try:
            info['imdbnumber'] = episode.find(
                'div', {'class': 'wtw-option-standalone'})['data-tconst']
        except:
            pass
        try:
            info['studio'] = show_meta['showInfo']['info'].get('studio')
        except:
            pass
        try:
            info['mpaa'] = show_meta['showInfo']['info'].get('mpaa')
        except:
            pass
        try:
            art = show_meta['showInfo']['art']
        except:
            pass

        try:
            self.art.update(self.fanartart)
            art['thumb'] = self._amazon_image_enlarger(
                episode.find('img', src=True)['src'].strip())
        except:
            art['thumb'] = art['fanart']
            pass
        try:
            info['tvshowtitle'] = show_meta['showInfo']['info']['tvshowtitle']
        except:
            pass
        try:
            info['genre'] = show_meta['showInfo']['info']['genre']
        except:
            pass
        try:
            info['duration'] = show_meta['showInfo']['info']['duration']
        except:
            pass
        try:
            art['landscape'] = art['thumb']
        except:
            pass

        info['trailer'] = ''
        info['mediatype'] = 'episode'
        item['ids'] = trakt_object['ids']
        for id, value in show_meta['showInfo']['ids'].items():
            item['ids']['tvshow.{}'.format(id)] = value
        item['info'] = info
        item['art'] = art
        item['cast'] = show_meta['showInfo'].get('cast', [])
        item['trakt_object'] = {}
        item['trakt_object']['episodes'] = [trakt_object]
        item['showInfo'] = show_meta['showInfo']

        requirements = ['title', 'season', 'episode']
        for i in requirements:
            if info.get(i, None) is None:
                return None
            if i not in info:
                return None
        return item
        pass
Exemple #9
0
    def episodeIDToListItem(self, trakt_object, showArgs):
        if 'showInfo' not in showArgs:
            show_thread = threading.Thread(target=self.seriesIDToListItem,
                                           args=(showArgs, False))
            show_thread.daemon = True
            show_thread.start()

        url = "episodes/%s" % trakt_object['ids']['tvdb']
        response = self.get_request(url)['data']

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

        art = {}

        try:
            art['thumb'] = self.baseImageUrl + response['filename']
        except:
            pass

        info = {}
        try:
            info['dateadded'] = response['firstAired']
        except:
            pass
        try:
            info['episode'] = info['sortepisode'] = int(
                response['airedEpisodeNumber'])
        except:
            pass
        try:
            info['season'] = info['sortseason'] = int(response['airedSeason'])
        except:
            pass
        try:
            info['title'] = info['originaltitle'] = response['episodeName']
        except:
            pass
        try:
            info['rating'] = float(response['siteRating'])
        except:
            pass
        try:
            info['premiered'] = response['firstAired']
        except:
            pass
        try:
            info['year'] = int(response['firstAired'][:4])
        except:
            pass
        try:
            info['plot'] = response['overview']
        except:
            pass
        try:
            info['imdbnumber'] = response['imdbId']
        except:
            pass
        if 'showInfo' not in showArgs:
            if show_thread.is_alive():
                show_thread.join()
            if self.show_cursory is False or self.show_cursory is None:
                return None
            else:
                showArgs = {'showInfo': {}}
                showArgs['showInfo'] = self.show_cursory
        try:
            info['mpaa'] = showArgs['showInfo']['info']['mpaa']
        except:
            pass
        try:
            art['poster'] = showArgs['showInfo']['art']['poster']
        except:
            pass
        try:
            info['castandrole'] = showArgs['showInfo']['info']['castandrole']
        except:
            pass
        try:
            info['tvshowtitle'] = showArgs['showInfo']['info']['tvshowtitle']
        except:
            pass
        try:
            info['genre'] = showArgs['showInfo']['info']['genre']
        except:
            pass
        try:
            info['duration'] = showArgs['showInfo']['info']['duration']
        except:
            pass
        try:
            art['landscape'] = art['thumb']
        except:
            pass
        try:
            art['fanart'] = showArgs['showInfo']['art']['fanart']
        except:
            pass

        try:
            currentDate = datetime.datetime.today().date()
            airdate = str(response['firstAired'])
            if airdate == '':
                info['title'] = '[I][COLOR red]%s[/COLOR][/I]' % info['title']
            airdate = tools.datetime_workaround(airdate)
            if airdate > currentDate:
                info['title'] = '[I][COLOR red]%s[/COLOR][/I]' % info['title']
        except:
            pass

        info['trailer'] = ''
        info['mediatype'] = 'episode'

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

        requirements = ['title', 'season', 'episode']
        for i in requirements:
            if info.get(i, None) == None:
                return None
            if i not in info:
                return None
        return item
Exemple #10
0
    def trakt_movie_to_list_item(self, trakt_object):
        response = requests.get(self.base_url + self.title_url % trakt_object['ids']['imdb'])
        details = BeautifulSoup(response.text, 'html.parser')

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

        # Set Info
        info = {}
        try:
            info['genre'] = []
        except:
            pass

        try:
            info['rating'] = float(details.find('div', {'class': 'ratingValue'}).find('span').text)
        except:
            pass

        try:
            title = details.find('div', {'class': 'title_wrapper'}).find('h1').text
            title = tools.unquote(title).split('(')[0]
            info['title'] = info['originaltitle'] = title.encode('utf-8')
        except:
            return None

        try:
            duration = details.find('div', {'class': 'subtext'}).text
            duration = duration.split('|')[1].strip(' ')
            if 'h' in duration:
                duration = duration.split('h')
                duration[0] = int(duration[0].strip('h')) * 60
                duration[1] = re.findall(r'\d\d', duration[1])[0]
                duration[1] = int(duration[1])
                duration = duration[0] + duration[1]
            else:
                duration = int(duration.strip('min'))
            info['duration'] = duration
        except:
            pass

        try:
            tag = details.find('div', {'id': 'titleStoryLine'}).find('div', {'class': 'txt-block'}).text
            tag = tag.split('\n')[2]
            info['tagline'] = tag.encode('utf-8')
        except:
            pass

        try:
            aired = details.find('div', {'class': 'subtext'}).find_all('a')[2].text
            aired = aired.split('(')[0]
            aired = aired.split(' ')
            aired[0] = aired[0].zfill(2)
            aired = tools.datetime_workaround('%s %s %s' % (aired[0], aired[1], aired[2]), '%d %B %Y')
            info['aired'] = info['premiered'] = aired.strftime('%Y-%m-%d')
            info['year'] = aired.strftime('%Y')
        except:
            pass

        try:
            info['plot'] = details.find('div', {'id': 'titleStoryLine'}).find_all('span')[1].text
        except:
            pass

        try:
            info['imdbnumber'] = trakt_object['ids']['imdb']
        except:
            pass

        try:
            info['trailer'] = tools.youtube_url % trakt_object['trailer'].split('v=')[1]
        except:
            pass

        try:
            info['castandrole'] = [()]
        except:
            pass

        # Begin Scraping Artwork
        art = {}

        try:
            art['poster'] = details.find('div', {'class': 'poster'}).find('img')['src']
        except:
            pass

        try:
            art['fanart'] = ''
        except:
            pass

        info['mediatype'] = 'movie'
        info['mpaa'] = ''

        # Set Crew/Cast Info
        # director = None
        # for person in details['credits']['crew']:
        #     if person.get('job') == 'Director':
        #         director = person.get('name')
        #
        # if not director == None:
        #     info['director'] = director
        #
        # try:
        #     info['cast'] = [i['name'] for i in details['credits']['cast']]
        # except:
        #     pass

        item['ids'] = trakt_object['ids']
        item['info'] = info
        item['art'] = art
        item['trakt_object'] = {}
        item['trakt_object']['movies'] = [trakt_object]

        return item
Exemple #11
0
    def showToListItem(self, trakt_object):
        response = requests.get(self.base_url +
                                self.title_url % trakt_object['ids']['imdb'])
        details = BeautifulSoup(response.text,
                                'html.parser',
                                parse_only=SoupStrainer(
                                    'div', {'id': 'pagecontent'}))

        tvdbID = trakt_object['ids']['tvdb']
        if self.fanart_support:
            self.threads.append(
                threading.Thread(target=self.getFanartTVShow, args=(tvdbID, )))

        [i.start() for i in self.threads]
        [i.join() for i in self.threads]

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

        # Set Info
        info = {}
        title_wrapper = details.find('div', {'class': 'title_wrapper'})
        try:
            info['genre'] = [
                genre.text for genre in title_wrapper.find_all('a', href=True)
                if 'title?genres=' in genre['href']
            ]
        except:
            pass

        try:
            info['rating'] = float(
                details.find('div', {
                    'class': 'ratingValue'
                }).find('span').text)
        except:
            pass

        try:
            info['mpaa'] = trakt_object['certification']
        except:
            pass

        try:
            info['studio'] = trakt_object['network']
        except:
            pass

        try:
            info['tvshowtitle'] = info['originaltitle'] = title_wrapper.find(
                'h1').text.strip()
        except:
            pass

        try:
            duration = details.find('div', {
                'class': 'subtext'
            }).find('time').text.strip()
            if 'h' in duration:
                duration = duration.split('h')
                duration[0] = int(duration[0].strip('h')) * 60
                duration[1] = re.findall(r'\d{1,2}', duration[1])[0]
                duration[1] = int(duration[1])
                duration = duration[0] + duration[1]
            else:
                duration = int(duration.strip('min'))
            info['duration'] = duration
        except:
            pass

        title_details = details.find('div', {'id': 'titleDetails'})
        try:
            aired = title_details.find_all('div',
                                           {'class': 'txt-block'})[3].text
            aired = aired.split(':')[1]
            aired = aired.split('(')[0].strip()
            aired = aired.split(' ')
            aired[0] = aired[0].zfill(2)
            aired = tools.datetime_workaround(
                '%s %s %s' % (aired[0], aired[1], aired[2]), '%d %B %Y')
            info['premiered'] = trakt_object['first_aired']
            info['year'] = aired.strftime('%Y')
        except:
            pass

        try:
            info['showaliases'] = [
                title_details.find_all(
                    'div', {'class': 'txt-block'})[4].contents[2].strip()
            ]
        except:
            pass

        try:
            info['country'] = \
                title_details.find_all('div', {'class': 'txt-block'})[1].contents[3]['href'].strip().split('=')[
                    1].upper()
        except:
            pass

        try:
            info['plot'] = details.find('div', {
                'id': 'titleStoryLine'
            }).find_all('span')[1].text.strip()
        except:
            pass

        try:
            info['imdbnumber'] = trakt_object['ids']['imdb']
        except:
            pass

        try:
            info['trailer'] = tools.youtube_url % trakt_object[
                'trailer'].split('v=')[1]
        except:
            pass

        # Set Crew/Cast Info
        try:
            crew_table = details.find('table', {'class': 'cast_list'})
            rows = crew_table.find_all('tr')
            self.cast = []
            for row in rows:
                cells = row.find_all('td')
                if len(cells) > 1:
                    self.cast.append({
                        'name':
                        cells[1].find('a').text.encode('utf-8').strip(),
                        'role':
                        cells[3].find('a').text.encode('utf-8').strip(),
                        'thumbnail':
                        self._amazon_image_enlarger(cells[0].find(
                            'img', src=True).get('loadlate'))
                    })
        except:
            traceback.print_exc()
            pass
        try:
            info['episode_count'] = re.findall(
                r'(\d{1,3})',
                details.find('span', {
                    'class': 'bp_sub_heading'
                }).text)[0]
        except:
            info['episode_count'] = 0
            pass

        try:
            info['status'] = trakt_object['status']
        except:
            pass

        try:
            season_urls = [
                i['href'] for i in details.find('div', {
                    'class': 'seasons-and-year-nav'
                }).find_all('a', href=True) if 'episodes?season' in i['href']
            ]

            info['season_count'] = len(season_urls)
        except:
            traceback.print_exc()
            info['season_count'] = 0
            pass

        # Begin Scraping Artwork
        self.art.update(self.fanartart)
        if not self.tvshows_prefer_fanart:
            self.art['poster'] = self._amazon_image_enlarger(
                details.find('div', {
                    'class': 'poster'
                }).find('img')['src'])
        if not self.tvshows_prefer_fanart:
            self.art['fanart'] = self._amazon_image_enlarger(
                details.find('div', {
                    'class': 'mediastrip'
                }).find('img', src=True).get('loadlate'))

        requirements = ['country', 'tvshowtitle', 'year', 'season_count']
        for i in requirements:
            if i not in info:
                return None

        info['mediatype'] = 'tvshow'
        item['ids'] = trakt_object['ids']
        item['info'] = info
        item['art'] = self.art
        item['cast'] = self.cast
        item['trakt_object'] = {}
        item['trakt_object']['shows'] = [trakt_object]

        item['art']['thumb'] = item['art'].get('poster', '')

        return item
Exemple #12
0
    def showSeasonToListItem(self, trakt_object, show_meta):
        try:
            item = {
                'info': copy.deepcopy(show_meta['info']),
                'art': copy.deepcopy(show_meta['art'])
            }
            season = trakt_object['number']

            tvdbID = trakt_object['ids']['tvdb']
            if self.fanart_support:
                self.threads.append(
                    threading.Thread(target=self.getFanartTVSeason,
                                     args=(tvdbID, season)))

            [i.start() for i in self.threads]
            [i.join() for i in self.threads]

            response = requests.get(self.base_url + self.season_url %
                                    (show_meta['ids']['imdb'], season))
            details = BeautifulSoup(response.text,
                                    'html.parser',
                                    parse_only=SoupStrainer(
                                        'div', {'id': 'pagecontent'}))

            if details is None:
                return None
            try:
                item['info']['studio'] = show_meta['info'].get('studio')
            except:
                pass
            try:
                item['art']['poster'] = item['art']['thumb'] = self.art.get(
                    'poster', '')
                if item['art']['poster'] == '' or item['art']['poster'] is None:
                    item['art']['poster'] = item['art']['thumb'] = show_meta[
                        'art']['poster']
            except:
                item['art']['poster'] = item['art']['thumb'] = ''

            try:
                episode = details.find('div', {
                    'class': 'list detail eplist'
                }).find_all('div', recursive=False)[0]
                aired = episode.find('div', {'class': 'airdate'}).text.strip()
                aired = aired.split(' ')
                aired[0] = aired[0].zfill(2)
                aired = tools.datetime_workaround(
                    '%s %s %s' % (aired[0], aired[1].rstrip('.'), aired[2]),
                    '%d %b %Y')
                item['info']['aired'] = aired
                item['year'] = aired[:4]
            except:
                pass
            try:
                item['info']['episode_count'] = trakt_object['episode_count']
            except:
                item['info']['episode_count'] = 0
                pass
            try:
                item['info']['aired_episodes'] = trakt_object['aired_episodes']
            except:
                item['info']['aired_episodes'] = 0
                pass
            try:
                item['info']['premiered'] = trakt_object['first_aired']
                item['info']['aired'] = trakt_object['first_aired']
            except:
                pass
            try:
                item['info']['plot'] = item['info']['overview'] = trakt_object[
                    'overview']
            except:
                pass

            try:
                item['info']['season'] = season
            except:
                pass

            try:
                item['info']['sortseason'] = season
            except:
                pass

            try:
                item['info']['season_title'] = trakt_object['title']
            except:
                pass

            if item['info']['season_title'] == '':
                import traceback
                traceback.print_exc()
                return None

            self.art.update(self.fanartart)

            item['info']['mediatype'] = 'season'
            item['ids'] = trakt_object['ids']
            for id, value in show_meta['ids'].items():
                item['ids']['tvshow.{}'.format(id)] = value
            item['trakt_object'] = {}
            item['trakt_object']['seasons'] = [trakt_object]
            item['showInfo'] = show_meta
            item['cast'] = show_meta['cast']

            item['art']['thumb'] = item['art'].get('poster', '')

        except:
            import traceback
            traceback.print_exc()
            return None

        return item
Exemple #13
0
def _requires_update(new_date, old_date):
    if tools.datetime_workaround(new_date, tools.trakt_gmt_format, False) > \
            tools.datetime_workaround(old_date, '%Y-%m-%dT%H:%M:%S', False):
        return True
    else:
        return False
Exemple #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)
            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
Exemple #15
0
    def episodeListBuilder(self, trakt_list, showInfo, smartPlay=False, hide_unaired=False):

        self.threadList = []

        try:
            play_list = []

            if len(trakt_list) == 0: return

            for item in trakt_list:

                # if tools.getSetting('general.metalocation') == '1':
                if 1 == 1:
                    self.threadList.append(Thread(target=self.tvdbEpisodeWorker, args=(item, showInfo)))
                else:
                    self.threadList.append(Thread(target=self.tmdbEpisodeWorker, args=(item, showInfo)))

            self.runThreads()

            if smartPlay is False and tools.getSetting('trakt.auth') != '':
                try:
                    traktWatched = trakt.json_response(
                        'shows/%s/progress/watched' % showInfo['showInfo']['ids']['trakt'])
                except:
                    pass

            self.itemList = [x for x in self.itemList if x is not None]

            try:
                self.itemList = sorted(self.itemList, key=lambda k: k['info']['episode'])
            except:
                pass

            for item in self.itemList:
                if hide_unaired:
                    try:
                        currentDate = datetime.datetime.today().date()
                        airdate = item['info']['premiered']
                        if airdate == '':
                            continue
                        airdate = tools.datetime_workaround(airdate)
                        if airdate > currentDate:
                            continue
                    except:
                        import traceback
                        traceback.print_exc()
                        pass
                cm = []


                if item is None: continue

                if smartPlay is False and tools.getSetting('trakt.auth') != '':
                    item['info']['playcount'] = 0
                    try:
                        for season in traktWatched['seasons']:
                            if season['number'] == item['info']['season']:
                                for episode in season['episodes']:
                                    if episode['number'] == item['info']['episode'] and episode['completed'] == True:
                                        item['info']['playcount'] = 1
                    except:
                        pass

                try:
                    args = {'showInfo': {}, 'episodeInfo': {}}

                    if tools.getSetting('smartplay.playlistcreate') == 'true' and smartPlay is False:
                        action = 'smartPlay'
                        playable = False
                    else:
                        playable = True
                        action = 'getSources'
                    args['showInfo'] = showInfo['showInfo']
                    args['episodeInfo']['info'] = item['info']
                    args['episodeInfo']['art'] = item['art']
                    args['episodeInfo']['ids'] = item['ids']
                    name = item['info']['title']

                    args = tools.quote(json.dumps(args, sort_keys=True))

                except:
                    import traceback
                    traceback.print_exc()
                    continue

                cm.append((tools.lang(33022).encode('utf-8'),
                           'PlayMedia(%s?action=getSources&seren_reload=true&actionArgs=%s)' % (sysaddon, args)))

                cm.append((tools.lang(32066).encode('utf-8'),
                           'PlayMedia(%s?action=getSources&source_select=true&actionArgs=%s)' % (sysaddon, args)))

                if tools.getSetting('trakt.auth') != '':
                    cm.append(('Trakt Manager', 'RunPlugin(%s?action=traktManager&actionArgs=%s)'
                               % (sysaddon, tools.quote(json.dumps(item['trakt_object'])))))

                if tools.context_addon():
                    cm = []

                if tools.getSetting('premiumize.enabled') == 'true' and tools.getSetting('premiumize.pin') != '':
                    cm.append((tools.lang(32068).encode('utf-8'),
                               'XBMC.RunPlugin(%s?action=filePicker&actionArgs=%s)' % (sysaddon, args)))

                if smartPlay is False:
                    tools.addDirectoryItem(name, action, item['info'], item['art'], cm=cm,
                                           isFolder=False, isPlayable=playable, actionArgs=args, set_ids=item['ids'])
                else:
                    play_list.append(tools.addDirectoryItem(name, action, item['info'],
                                                            item['art'], isFolder=False, isPlayable=playable,
                                                            actionArgs=args, smart_play=True, set_ids=item['ids']))

            if smartPlay is True:
                return play_list

        except:
            import traceback
            traceback.print_exc()
Exemple #16
0
    def mixedEpisodeBuilder(self,
                            trakt_list,
                            sort=None,
                            hide_watched=False,
                            smartPlay=False,
                            hide_unaired=True,
                            prepend_date=False):

        self.threadList = []

        try:
            if len(trakt_list) == 0: return

            self.itemList = TraktSyncDatabase().get_episode_list(trakt_list)

            self.itemList = [
                x for x in self.itemList if x is not None and 'info' in x
            ]
            self.itemList = [
                i for i in self.itemList
                if 'info' in i and i['info'].get('premiered', None) is not None
            ]
            if sort is None:
                self.itemList = sorted(
                    self.itemList,
                    key=lambda i: tools.datetime_workaround(
                        i['info']['premiered'], tools.trakt_gmt_format, False),
                    reverse=True)
            elif sort is not False:
                sort_list = []
                for trakt_id in sort['id_list']:
                    try:
                        if not sort['type']:
                            item = [
                                i for i in self.itemList
                                if i['ids']['trakt'] == trakt_id
                            ][0]
                        else:
                            item = [
                                i for i in self.itemList
                                if i[sort['type']]['ids']['trakt'] == trakt_id
                            ][0]
                        sort_list.append(item)
                    except IndexError:
                        continue
                    except:
                        import traceback
                        traceback.print_exc()
                self.itemList = sort_list

            item_list = []

            for item in self.itemList:
                if item is None:
                    continue

                if item['info'].get('title', '') == '':
                    continue

                if hide_watched and item['info']['playcount'] != 0:
                    continue

                cm = []

                try:
                    name = tools.display_string(item['info']['title'])

                    if not self.is_aired(
                            item['info']) and hide_unaired is True:
                        continue
                    elif not self.is_aired(item['info']):
                        name = tools.colorString(name, 'red')
                        name = tools.italic_string(name)
                        item['info']['title'] = name

                    item['info'] = tools.clean_air_dates(item['info'])

                    args = {'showInfo': {}, 'episodeInfo': {}}

                    if tools.getSetting('smartplay.playlistcreate'
                                        ) == 'true' and not smartPlay:
                        action = 'smartPlay'
                        playable = False
                    else:
                        playable = True
                        action = 'getSources'

                    args['showInfo'] = item['showInfo']
                    args['episodeInfo']['info'] = item['info']
                    args['episodeInfo']['art'] = item['art']
                    args['episodeInfo']['ids'] = item['ids']

                    if self.title_appends == 'true':
                        name = "%s: %sx%s %s" % (
                            tools.colorString(
                                args['showInfo']['info']['tvshowtitle']),
                            tools.display_string(
                                item['info']['season']).zfill(2),
                            tools.display_string(
                                item['info']['episode']).zfill(2),
                            tools.display_string(item['info']['title']))
                    if prepend_date:
                        release_day = tools.datetime_workaround(
                            item['info']['aired'])
                        release_day = release_day.strftime('%d %b')
                        name = '[%s] %s' % (release_day, name)

                    args = tools.quote(json.dumps(args, sort_keys=True))

                    cm.append((tools.lang(
                        32069
                    ), 'XBMC.Container.Update(%s?action=showSeasons&actionArgs=%s)'
                               % (sysaddon,
                                  tools.quote(json.dumps(str(
                                      item['showInfo']))))))

                    cm.append((tools.lang(
                        32066
                    ), 'PlayMedia(%s?action=getSources&source_select=true&actionArgs=%s)'
                               % (sysaddon, args)))

                    cm.append((tools.lang(
                        33022
                    ), 'PlayMedia(%s?action=getSources&seren_reload=true&actionArgs=%s)'
                               % (sysaddon, args)))

                    if tools.getSetting('trakt.auth') != '':
                        cm.append((
                            'Trakt Manager',
                            'RunPlugin(%s?action=traktManager&actionArgs=%s)' %
                            (sysaddon,
                             tools.quote(json.dumps(str(
                                 item['trakt_object']))))))

                    if tools.context_addon():
                        cm = []

                    if tools.getSetting(
                            'premiumize.enabled'
                    ) == 'true' and tools.getSetting('premiumize.pin') != '':
                        cm.append((tools.lang(
                            32068
                        ), 'XBMC.RunPlugin(%s?action=filePicker&actionArgs=%s)'
                                   % (sysaddon, args)))

                    item['info']['title'] = item['info'][
                        'originaltitle'] = name

                    item_list.append(
                        tools.addDirectoryItem(name,
                                               action,
                                               item['info'],
                                               item['art'],
                                               isFolder=False,
                                               isPlayable=playable,
                                               actionArgs=args,
                                               bulk_add=True,
                                               set_ids=item['ids'],
                                               cm=cm))

                except:
                    import traceback
                    traceback.print_exc()
                    continue

            if smartPlay is True:
                return item_list
            else:
                tools.addMenuItems(syshandle, item_list, len(item_list))

        except:
            import traceback
            traceback.print_exc()
Exemple #17
0
    def seasonIDToListItem(self, seasonObject, showArgs):

        try:
            arb = seasonObject['number']
            item = {'info': showArgs['info'], 'art': showArgs['art']}
            tvdbID = showArgs['ids']['tvdb']
            season = seasonObject['number']

            self.threads.append(
                threading.Thread(target=self.getSeasonInfo,
                                 args=(tvdbID, season)))
            self.threads.append(
                threading.Thread(target=self.getSeasonPoster,
                                 args=(tvdbID, season)))
            for i in self.threads:
                i.start()
            for i in self.threads:
                i.join()

            details = self.info

            if details == None:
                return None

            try:
                item['art']['poster'] = item['art']['thumb'] = self.art[
                    'poster']
            except:
                item['art']['poster'] = item['art']['thumb'] = ''

            try:
                item['info']['year'] = int(
                    details.get('firstAired', '0000')[:4])
            except:
                pass
            try:
                item['info']['aired'] = seasonObject['first_aired'][:10]
            except:
                pass
            try:
                item['info']['date'] = seasonObject['first_aired'][:10]
            except:
                pass
            try:
                item['info']['premiered'] = seasonObject['first_aired'][:10]
            except:
                pass
            try:
                item['info']['dateadded'] = seasonObject['first_aired'][:10]
            except:
                pass
            try:
                item['info']['plot'] = item['info']['overview'] = seasonObject[
                    'overview']
            except:
                pass

            try:
                item['info']['season'] = season
            except:
                pass

            try:
                item['info']['sortseason'] = season
            except:
                pass

            try:
                item['info']['season_title'] = seasonObject['title']
            except:
                pass
            try:
                item['info']['castandrole'] = showArgs['info']['castandrole']
            except:
                pass
            if item['info']['season_title'] == '':
                return None

            try:
                if seasonObject['first_aired'] is None:
                    pass
                else:
                    currentDate = datetime.datetime.today().date()
                    airdate = str(seasonObject['first_aired'][:10])
                    airdate = tools.datetime_workaround(airdate)
                    if airdate > currentDate:
                        item['info'][
                            'season_title'] = '[I][COLOR red]%s[/COLOR][/I]' % item[
                                'info']['season_title']
            except:
                return None
                pass

            item['info']['mediatype'] = 'season'
            item['ids'] = seasonObject['ids']
            item['trakt_object'] = {}
            item['trakt_object']['seasons'] = [seasonObject]
            item['showInfo'] = showArgs

        except:
            return None

        return item
Exemple #18
0
    def __init__(self, xml_file, location, actionArgs=None):

        try:
            super(BaseWindow, self).__init__(xml_file, location)
        except:
            tools.xmlWindow().__init__()

        tools.closeBusyDialog()
        self.canceled = False

        self.setProperty('texture.white',
                         os.path.join(tools.IMAGES_PATH, 'white.png'))
        self.setProperty('seren.logo', tools.SEREN_LOGO_PATH)
        self.setProperty('seren.fanart', tools.SEREN_FANART_PATH)
        self.setProperty('settings.color', tools.get_user_text_color())
        self.setProperty('test_pattern',
                         os.path.join(tools.IMAGES_PATH, 'test_pattern.png'))
        self.setProperty('skin.dir',
                         SkinManager().confirm_skin_path(xml_file)[1])

        if actionArgs is None:
            return

        self.item_information = tools.get_item_information(actionArgs)

        for id, value in self.item_information['ids'].items():
            self.setProperty('item.ids.%s_id' % id, str(value))

        for i in self.item_information['art'].keys():
            self.setProperty('item.art.%s' % i,
                             str(self.item_information['art'][i]))

        self.item_information['info'] = tools.clean_air_dates(
            self.item_information['info'])

        year, month, day = self.item_information['info'].get(
            'aired', '0000-00-00').split('-')

        self.setProperty('item.info.aired.year', year)
        self.setProperty('item.info.aired.month', month)
        self.setProperty('item.info.aired.day', day)

        try:
            if 'aired' in self.item_information['info']:
                aired_date = self.item_information['info']['aired']
                aired_date = tools.datetime_workaround(aired_date)
                aired_date = aired_date.strftime(tools.get_region('dateshort'))
                self.item_information['info']['aired'] = aired_date

            if 'premiered' in self.item_information['info']:
                premiered = self.item_information['info']['premiered']
                premiered = tools.datetime_workaround(premiered)
                premiered = premiered.strftime(tools.get_region('dateshort'))
                self.item_information['info']['premiered'] = premiered
        except:
            pass

        for i in self.item_information['info'].keys():
            value = self.item_information['info'][i]
            if i == 'aired' or i == 'premiered':
                try:
                    value = value[:10]
                except:
                    value = 'TBA'
            if i == 'duration':
                try:
                    hours = int(value) % 60
                    self.setProperty('item.info.%s.minutes' % i,
                                     str(int(value) - (hours * 60)))
                    self.setProperty('item.info.%s.hours' % i, str(hours))
                except:
                    pass
            try:
                self.setProperty('item.info.%s' % i, str(value))
            except UnicodeEncodeError:
                self.setProperty('item.info.%s' % i, value)
Exemple #19
0
    def  mixedEpisodeBuilder(self, trakt_list, sort=None, hide_watched=False, smartPlay=False, hide_unaired=True,
                            prepend_date=False):
        try:
            if len(trakt_list) == 0:
                tools.log('We received no titles to build a list', 'error')
                return

            self.itemList = trakt_database.get_episode_list(trakt_list)

            self.itemList = [x for x in self.itemList if x is not None and 'info' in x]
            self.itemList = [i for i in self.itemList if 'info' in i and i['info'].get('premiered', None) is not None]
            self.itemList = [i for i in self.itemList if 'info' in i and i['info'].get('premiered', '') is not '']
            if sort is None:
                self.itemList = sorted(self.itemList,
                                       key=lambda i: tools.datetime_workaround(i['info']['premiered'],
                                                                               tools.trakt_gmt_format, False),
                                       reverse=True)
            elif sort is not False:
                sort_list = []
                for trakt_id in sort['id_list']:
                    try:
                        if not sort['type']:
                            item = [i for i in self.itemList if i['ids']['trakt'] == trakt_id][0]
                        else:
                            item = [i for i in self.itemList if i[sort['type']]['ids']['trakt'] == trakt_id][0]
                        sort_list.append(item)
                    except IndexError:
                        continue
                    except:
                        import traceback
                        traceback.print_exc()
                self.itemList = sort_list

            item_list = []

            for item in self.itemList:
                if item is None:
                    continue

                if item['info'].get('title', '') == '':
                    continue

                if hide_watched and item['info']['playcount'] != 0:
                    continue

                try:
                    name = tools.display_string(item['info']['title'])

                    if not self.is_aired(item['info']) and hide_unaired is True:
                        continue
                    elif not self.is_aired(item['info']):
                        name = tools.colorString(name, 'red')
                        name = tools.italic_string(name)
                        item['info']['title'] = name

                    item['info'] = tools.clean_air_dates(item['info'])

                    args = {'trakt_id': item['showInfo']['ids']['trakt'],
                            'season': item['info']['season'],
                            'episode': item['info']['episode'],
                            'item_type': 'episode'}

                    args = tools.quote(json.dumps(args, sort_keys=True))

                    if self.title_appends == 'true':
                        name = "%s: %sx%s %s" % (tools.colorString(item['showInfo']['info']['tvshowtitle']),
                                                 tools.display_string(item['info']['season']).zfill(2),
                                                 tools.display_string(item['info']['episode']).zfill(2),
                                                 tools.display_string(item['info']['title']))
                    if prepend_date:
                        release_day = tools.datetime_workaround(item['info']['aired'])
                        if release_day:
                            release_day = release_day.strftime('%d %b')
                            name = '[%s] %s' % (release_day, name)

                    item['info']['title'] = item['info']['originaltitle'] = name

                    if 'trakt' in item['ids']:
                        try:
                            bookmark = bookmark_sync.get_bookmark(item['ids']['trakt'])
                            item['info']['resumetime'] = bookmark['timeInSeconds'] if bookmark is not None else 0
                            item['info']['totaltime'] = item['info']['duration']
                        except:
                            pass

                    item_list.append(tools.addDirectoryItem(name,
                                                            'getSources',
                                                            item['info'],
                                                            item['art'],
                                                            item['cast'],
                                                            isFolder=False,
                                                            isPlayable=True,
                                                            actionArgs=args,
                                                            bulk_add=True,
                                                            set_ids=item['ids']))

                except:
                    import traceback
                    traceback.print_exc()
                    continue

            if smartPlay is True:
                return item_list
            else:
                tools.addMenuItems(syshandle, item_list, len(item_list))

        except:
            import traceback
            traceback.print_exc()
Exemple #20
0
    def showSeasonToListItem(self, seasonObject, showArgs):

        try:
            self.art = copy.deepcopy(showArgs['art'])
            item = {'info': copy.deepcopy(showArgs['info'])}

            url = 'tv/%s/season/%s?&append_to_response=credits,videos,images&language=en-US' % (
                str(showArgs['ids']['tmdb']), str(seasonObject['number']))

            self.get_TMDB_Fanart_Threaded(url,
                                          (showArgs['ids']['tvdb'], 'season'))

            details = self.request_response

            if details is None:
                return None

            try:
                currentDate = datetime.today().date()
                airdate = str(details['air_date'])
                airdate = tools.datetime_workaround(airdate)

                if airdate > currentDate:
                    return
            except:
                pass

            try:
                if self.season_poster == 'true':
                    self.art['poster'] = self.posterPath + str(
                        details.get('poster_path', ''))
                    self.art['thumb'] = self.posterPath + str(
                        details.get('poster_path', ''))
            except:
                pass

            try:
                count = 0
                for i in details['images']['posters'][:self.
                                                      tvshows_poster_limit]:
                    self.art.update({
                        'poster{}'.format(count if count > 0 else ''):
                        self.backgroundPath + i['file_path']
                    })
                    count = count + 1
            except:
                pass

            if self.tvshows_prefer_fanart:
                try:
                    if self.season_poster == 'true':
                        self.art['poster'] = self.fanartart.get(
                            'poster', self.posterPath +
                            str(details.get('poster_path', '')))
                        self.art['thumb'] = self.fanartart.get(
                            'thumb', self.posterPath +
                            str(details.get('poster_path', '')))
                except:
                    pass

                try:
                    count = 0
                    for i in details['images'][
                            'posters'][:self.tvshows_poster_limit]:
                        dict_name = 'poster{}'.format(
                            count if count > 0 else '')
                        self.art.update({
                            dict_name:
                            self.fanartart.get(
                                dict_name,
                                self.backgroundPath + i['file_path'])
                        })
                        count = count + 1
                except:
                    pass

            try:
                item['info']['plot'] = item['info']['plotoutline'] = item['info']['overview'] = \
                    details.get('overview', '')

                if item['info']['plot'] == '':
                    item['info']['plot'] = item['info']['plotoutline'] = item['info']['overview'] =  \
                        seasonObject['overview']
            except:
                pass
            try:
                item['info']['aired'] = item['info'][
                    'premiered'] = details.get('air_date', '')
                if item['info']['premiered'] == '':
                    item['info']['aired'] = item['info'][
                        'premiered'] = seasonObject['first_aired']
            except:
                pass
            try:
                item['info']['year'] = int(details.get('air_date', '0000')[:4])
            except:
                pass
            try:
                item['info']['season'] = item['info']['sortseason'] = int(
                    details.get('season_number', ''))
            except:
                pass
            try:
                item['info']['season_title'] = seasonObject.get('title', '')
                if item['info']['season_title'] == '':
                    item['info']['season_title'] = details.get('name', '')
                if item['info']['season_title'] == '':
                    item['info']['season_title'] = 'Season {}'.format(
                        details['season_number'])
            except:
                pass
            try:
                item['info']['trailer'] = tools.youtube_url % \
                                          [i for i in details['videos']['results'] if i['site'] == 'YouTube'][0]['key']
            except:
                pass
            try:
                item['info']['episode_count'] = len(details['episodes'])
            except:
                pass
            try:
                item['info']['aired_episodes'] = seasonObject['aired_episodes']
            except:
                item['info']['aired_episodes'] = 0
                pass

            if item['info']['season_title'] == '':
                return None

            director = None

            for person in details['credits']['crew']:
                if person.get('job') == 'Director':
                    director = person.get('name')

            if not director is None:
                item['info']['director'] = director

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

            item['info']['mediatype'] = 'season'
            item['ids'] = seasonObject['ids']
            for id, value in showArgs['ids'].items():
                item['ids']['tvshow.{}'.format(id)] = value
            item['trakt_object'] = {}
            item['trakt_object']['seasons'] = [seasonObject]
            item['art'] = self.art
            item['info']['mediatype'] = 'season'
            item['showInfo'] = showArgs

            item['art']['thumb'] = item['art'].get('poster', '')

        except:
            import traceback
            traceback.print_exc()
            return None

        return item
Exemple #21
0
    def directToEpisodeBuilder(self, trakt_list, sort=None):

        self.threadList = []
        traktWatched = trakt.json_response('sync/watched/shows')

        try:
            if len(trakt_list) == 0: return

            for item in trakt_list:
                # if tools.getSetting('general.metalocation') == '1':
                if 1 == 1:
                    self.threadList.append(Thread(target=self.tvdbEpisodeWorker, args=(item['episode'], item['show'])))
                else:
                    self.threadList.append(Thread(target=self.tmdbEpisodeWorker, args=(item[0], item[1])))

            self.runThreads()
            self.itemList = [i for i in self.itemList if i is not None]

            if sort is not None:
                sorted_list = []
                for sort_id in sort['id_list']:
                    for menu_item in self.itemList:
                        if menu_item[sort['type']]['ids']['trakt'] == sort_id:
                            sorted_list.append(menu_item)
                self.itemList = sorted_list
            else:
                self.itemList = sorted(self.itemList, key=lambda i: tools.datetime_workaround(i['info']['premiered']),
                                       reverse=True)

            for item in self.itemList:
                if item is None:
                    continue
                try:
                    currentDate = datetime.datetime.today().date()
                    airdate = item['info']['premiered']
                    if airdate == '':
                        continue
                    airdate = tools.datetime_workaround(airdate)
                    if airdate > currentDate:
                        continue
                except:
                    import traceback
                    traceback.print_exc()
                    pass

                if item['info'].get('title', '') == '':
                    continue
                cm = []
                action = ''

                if tools.getSetting('trakt.auth') != '':
                    try:
                        item['info']['playcount'] = 0
                        for show in traktWatched:
                            if str(show['show']['ids']['trakt']) == str(item['showInfo']['ids']['trakt']):
                                for season in show['seasons']:
                                    if str(season['number']) == str(item['info']['season']):
                                        for episode in season['episodes']:
                                            if str(episode['number']) == str(item['info']['episode']):
                                                if episode['plays'] > 0:
                                                    item['info']['playcount'] = 1
                    except:
                        pass

                try:
                    args = {'showInfo': {}, 'episodeInfo': {}}

                    if tools.getSetting('smartplay.playlistcreate') == 'true':
                        action = 'smartPlay'
                        playable = False
                    else:
                        playable = True
                        action = 'getSources'

                    args['showInfo'] = item['showInfo']
                    args['episodeInfo']['info'] = item['info']
                    args['episodeInfo']['art'] = item['art']
                    args['episodeInfo']['ids'] = item['ids']
                    name = item['info']['title']

                    if self.title_appends == 'true':
                        name = "%s: %sx%s %s" % (tools.colorString(args['showInfo']['info']['tvshowtitle']),
                                                 str(item['info']['season']).zfill(2),
                                                 str(item['info']['episode']).zfill(2),
                                                 item['info']['title'].encode('utf-8'))

                    args = tools.quote(json.dumps(args, sort_keys=True))

                    item['info']['title'] = item['info']['originaltitle'] = name

                    cm.append((tools.lang(32069).encode('utf-8'),
                               'XBMC.Container.Update(%s?action=showSeasons&actionArgs=%s)' %
                               (sysaddon, tools.quote(json.dumps(item['showInfo'])))))

                    cm.append((tools.lang(32066).encode('utf-8'),
                               'PlayMedia(%s?action=getSources&source_select=true&actionArgs=%s)' % (sysaddon, args)))

                    cm.append((tools.lang(33022).encode('utf-8'),
                               'PlayMedia(%s?action=getSources&seren_reload=true&actionArgs=%s)' % (sysaddon, args)))

                    if tools.getSetting('trakt.auth') != '':
                        cm.append(('Trakt Manager', 'RunPlugin(%s?action=traktManager&actionArgs=%s)'
                                   % (sysaddon, tools.quote(json.dumps(item['trakt_object'])))))

                    if tools.context_addon():
                        cm = []

                    if tools.getSetting('premiumize.enabled') == 'true' and tools.getSetting('premiumize.pin') != '':
                        cm.append((tools.lang(32068).encode('utf-8'),
                                   'XBMC.RunPlugin(%s?action=filePicker&actionArgs=%s)' % (sysaddon, args)))

                except:
                    import traceback
                    traceback.print_exc()
                    continue

                tools.addDirectoryItem(name, action, item['info'], item['art'], cm=cm,
                                       isFolder=False, isPlayable=playable, actionArgs=args, set_ids=item['ids'])
        except:
            import traceback
            traceback.print_exc()
Exemple #22
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
Exemple #23
0
    def showSeasonToListItem(self, seasonObject, showArgs):

        try:
            item = {'info': showArgs['info'], 'art': showArgs['art']}

            url = 'tv/%s/season/%s?&append_to_response=credits,videos' % (str(showArgs['ids']['tmdb']), str(seasonObject['number']))

            details = self.get_request(url)

            if details == None:
                return None
            try:
                currentDate = datetime.today().date()
                airdate = str(details['air_date'])
                airdate = tools.datetime_workaround(airdate)
            except:
                pass
            try:
                if airdate > currentDate:
                    return
            except:
                pass
            try:item['art']['poster'] = self.posterPath + str(details.get('poster_path', ''))
            except:item['art']['poster'] = ''
            try:item['art']['thumb'] = self.posterPath + details.get('poster_path', ' ')
            except:item['art']['thumb'] = ''
            try:
                if details.get('overview', '') is not '':
                    item['info']['plot'] = item['info']['plotoutline'] = details.get('overview', '')
            except:pass
            try:item['info']['aired'] = details.get('air_date', '')
            except:
                import traceback
                traceback.print_exc()
                pass
            try:item['info']['premiered'] = details.get('air_date', '')
            except:
                import traceback
                traceback.print_exc()
                pass
            try:item['info']['year'] = int(details.get('air_date','0000')[:4])
            except:pass
            try:item['info']['sortseason'] = str(details.get('season_number', ''))
            except:pass
            try:item['info']['season'] = str(details.get('season_number', ''))
            except:pass
            try:item['info']['season_title'] = str(details.get('name', ''))
            except:pass
            try:item['info']['trailer'] = tools.youtube_url % [i for i in details['videos']['results'] if i['site'] == 'YouTube'][0]['key']
            except:pass
            director = None
            for person in details['credits']['crew']:
                if person.get('job') == 'Director':
                    director = person.get('name')

            if not director == None:
                item['info']['director'] = director

            try:
                item['info']['cast'] = [i['name'] for i in details['credits']['cast']]
            except:
                pass

            item['info']['mediatype'] = 'season'
            item['ids'] = seasonObject['ids']
            item['trakt_object'] = {}
            item['trakt_object']['seasons'] = [seasonObject]

        except:
            import traceback
            traceback.print_exc()
            return None

        return item
Exemple #24
0
def _parse_local_date_format(datestring):
    return tools.datetime_workaround(datestring,
                                     tools.trakt_gmt_format.strip('.000Z'),
                                     date_only=False)