Example #1
0
    def lists(self):
        if traktCredentials == False and imdbCredentials == False:
            return control.dialog.ok('Exodus', control.lang(30081).encode('utf-8'), control.lang(30082).encode('utf-8'), control.lang(30083).encode('utf-8'))

        if traktCredentials == True:
            self.addDirectoryItem(30084, 'movies&url=traktcollection', 'trakt.png', 'DefaultMovies.png', queue=True)
            self.addDirectoryItem(30085, 'tvshows&url=traktcollection', 'trakt.png', 'DefaultTVShows.png')
            self.addDirectoryItem(30086, 'movies&url=traktwatchlist', 'trakt.png', 'DefaultMovies.png', queue=True)
            self.addDirectoryItem(30087, 'tvshows&url=traktwatchlist', 'trakt.png', 'DefaultTVShows.png')

        if imdbCredentials == True:
            self.addDirectoryItem(30088, 'movies&url=imdbwatchlist', 'imdb.png', 'DefaultMovies.png', queue=True)
            self.addDirectoryItem(30089, 'tvshows&url=imdbwatchlist', 'imdb.png', 'DefaultTVShows.png')

        if traktCredentials == True:
            self.addDirectoryItem(30090, 'movies&url=traktfeatured', 'trakt.png', 'DefaultMovies.png', queue=True)
            self.addDirectoryItem(30091, 'tvshows&url=traktfeatured', 'trakt.png', 'DefaultTVShows.png')

        if traktIndicators == True:
            self.addDirectoryItem(30092, 'movies&url=trakthistory', 'trakt.png', 'DefaultMovies.png', queue=True)
            self.addDirectoryItem(30093, 'calendar&url=trakthistory', 'trakt.png', 'DefaultTVShows.png', queue=True)
            self.addDirectoryItem(30094, 'calendar&url=progress', 'trakt.png', 'DefaultRecentlyAddedEpisodes.png', queue=True)
            self.addDirectoryItem(30095, 'calendar&url=mycalendar', 'trakt.png', 'DefaultRecentlyAddedEpisodes.png', queue=True)

        if traktCredentials == True or imdbCredentials == True:
            self.addDirectoryItem(30096, 'movieUserlists', 'userlists.png', 'DefaultMovies.png')
            self.addDirectoryItem(30097, 'tvUserlists', 'userlists.png', 'DefaultTVShows.png')
            self.addDirectoryItem(30098, 'episodeUserlists', 'userlists.png', 'DefaultTVShows.png')

        self.endDirectory()
Example #2
0
def resetsettings():
    from resources.lib.modules import control;

    for key in ['cookie_experation', 'user_age', 'user_birthday', 'user_id', 'user_type']:

        try:
            setting(str('fn.' + key), '');

        except Exception as inst:
            logger.error(inst);
            
            pass;


    try:

        setting('fn.ut', control.lang(32600).encode('utf-8'));
        setting('fn.subscriber_status', control.lang(32601).encode('utf-8'));
        setting('fn.user_role', control.lang(32602).encode('utf-8'));
        setting('fn.user_agent', control.lang(32603).encode('utf-8'));

    except Exception as inst:
        logger.error(inst);

        pass;
Example #3
0
def nhlDirectory():
    dt = procTimezone(5)
    datex = int(dt.strftime('%Y%m%d'))

    url = 'http://live.nhl.com/GameData/SeasonSchedule-20152016.json'
    result = client.request(url)

    items = json.loads(result)
    items = sorted(items, key=lambda k: k['est'])

    addDirectoryItem(control.lang(30751).encode('utf-8'), 'Scoreboard', 'nhlScoreboard', '0', '0')
    addDirectoryItem(control.lang(30752).encode('utf-8'), 'Archived', 'nhlArchives', '0', '0')
    addDirectoryItem(control.lang(30753).encode('utf-8'), '0', '0', '0', '0')
    addDirectoryItem(control.lang(30754).encode('utf-8'), '0', '0', '0', '0')

    for item in items:
        try:
            est = datetime.datetime.strptime(item['est'], '%Y%m%d %H:%M:%S')
            date = int(est.strftime('%Y%m%d'))
            if not date == datex: raise Exception()

            est = procTimezone(5, est)
            name = '%s at %s  [COLOR gold](%s)[/COLOR]  [COLOR red](%s)[/COLOR]' % (item['a'], item['h'], est.strftime('%H:%M'), est.strftime('%Y-%m-%d'))
            url = str(item['id'])

            addDirectoryItem(name, url, 'nhlStreams', '0', '0')
        except:
            pass

    endDirectory()
    def range(self, url):
        control.idle()

        yes = control.yesnoDialog(control.lang(32555).encode('utf-8'), '', '')
        if not yes: return

        if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'):
            control.infoDialog(control.lang(32552).encode('utf-8'), time=10000000)
            self.infoDialog = True

        from resources.lib.indexers import tvshows
        items = tvshows.tvshows().get(url, idx=False)
        if items == None: items = []

        for i in items:
            try:
                if xbmc.abortRequested == True: return sys.exit()
                self.add(i['title'], i['year'], i['imdb'], i['tvdb'], range=True)
            except:
                pass

        if self.infoDialog == True:
            control.infoDialog(control.lang(32554).encode('utf-8'), time=1)

        if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo'):
            control.execute('UpdateLibrary(video)')
    def add(self, tvshowtitle, year, imdb, tvdb, range=False):
        if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'):
            control.infoDialog(control.lang(32552).encode('utf-8'), time=10000000)
            self.infoDialog = True

        from resources.lib.indexers import episodes
        items = episodes.episodes().get(tvshowtitle, year, imdb, tvdb, idx=False)

        try: items = [{'title': i['title'], 'year': i['year'], 'imdb': i['imdb'], 'tvdb': i['tvdb'], 'season': i['season'], 'episode': i['episode'], 'tvshowtitle': i['tvshowtitle'], 'premiered': i['premiered']} for i in items]
        except: items = []

        try:
            if not self.dupe_setting == 'true': raise Exception()
            if items == []: raise Exception()

            id = [items[0]['imdb'], items[0]['tvdb']]

            lib = control.jsonrpc('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties" : ["imdbnumber", "title", "year"]}, "id": 1}')
            lib = unicode(lib, 'utf-8', errors='ignore')
            lib = json.loads(lib)['result']['tvshows']
            lib = [i['title'].encode('utf-8') for i in lib if str(i['imdbnumber']) in id or (i['title'].encode('utf-8') == items[0]['tvshowtitle'] and str(i['year']) == items[0]['year'])][0]

            lib = control.jsonrpc('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "tvshow", "operator": "is", "value": "%s"}]}, "properties": ["season", "episode"]}, "id": 1}' % lib)
            lib = unicode(lib, 'utf-8', errors='ignore')
            lib = json.loads(lib)['result']['episodes']
            lib = ['S%02dE%02d' % (int(i['season']), int(i['episode'])) for i in lib]

            items = [i for i in items if not 'S%02dE%02d' % (int(i['season']), int(i['episode'])) in lib]
        except:
            pass

        files_added = 0

        for i in items:
            try:
                if xbmc.abortRequested == True: return sys.exit()

                if self.check_setting == 'true':
                    if i['episode'] == '1':
                        self.block = True
                        src = lib_tools.check_sources(i['title'], i['year'], i['imdb'], i['tvdb'], i['season'], i['episode'], i['tvshowtitle'], i['premiered'])
                        if src: self.block = False
                    if self.block == True: raise Exception()

                premiered = i.get('premiered', '0')
                if (premiered != '0' and int(re.sub('[^0-9]', '', str(premiered))) > int(self.date)) or (premiered == '0' and not self.include_unknown):
                    continue

                self.strmFile(i)
                files_added += 1
            except:
                pass

        if range == True: return

        if self.infoDialog == True:
            control.infoDialog(control.lang(32554).encode('utf-8'), time=1)

        if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo') and files_added > 0:
            control.execute('UpdateLibrary(video)')
Example #6
0
	def calendars(self, idx=True):
		m = control.lang(32060).encode('utf-8').split('|')
		try: months = [(m[0], 'January'), (m[1], 'February'), (m[2], 'March'), (m[3], 'April'), (m[4], 'May'), (m[5], 'June'), (m[6], 'July'), (m[7], 'August'), (m[8], 'September'), (m[9], 'October'), (m[10], 'November'), (m[11], 'December')]
		except: months = []

		d = control.lang(32061).encode('utf-8').split('|')
		try: days = [(d[0], 'Monday'), (d[1], 'Tuesday'), (d[2], 'Wednesday'), (d[3], 'Thursday'), (d[4], 'Friday'), (d[5], 'Saturday'), (d[6], 'Sunday')]
		except: days = []

		for i in range(0, 30):
			try:
				name = (self.datetime - datetime.timedelta(days = i))
				name = (control.lang(32062) % (name.strftime('%A'), name.strftime('%d %B'))).encode('utf-8')
				for m in months: name = name.replace(m[1], m[0])
				for d in days: name = name.replace(d[1], d[0])
				try: name = name.encode('utf-8')
				except: pass

				url = self.calendar_link % (self.datetime - datetime.timedelta(days = i)).strftime('%Y-%m-%d')

				self.list.append({'name': name, 'url': url, 'image': 'calendar.png', 'action': 'calendar'})
			except:
				pass
		if idx == True: self.addDirectory(self.list)
		return self.list
Example #7
0
    def range(self, url):
        control.idle()

        yes = control.yesnoDialog(control.lang(30425).encode("utf-8"), "", "")
        if not yes:
            return

        if not control.condVisibility("Window.IsVisible(infodialog)") and not control.condVisibility("Player.HasVideo"):
            control.infoDialog(control.lang(30421).encode("utf-8"), time=10000000)
            self.infoDialog = True

        from resources.lib.indexers import movies

        items = movies.movies().get(url, idx=False)
        if items == None:
            items = []

        for i in items:
            try:
                if xbmc.abortRequested == True:
                    return sys.exit()
                self.add(i["name"], i["title"], i["year"], i["imdb"], range=True)
            except:
                pass

        if self.infoDialog == True:
            control.infoDialog(control.lang(30423).encode("utf-8"), time=1)

        if self.library_setting == "true" and not control.condVisibility("Library.IsScanningVideo"):
            control.execute("UpdateLibrary(video)")
Example #8
0
def clear(table=None):
    try:
        control.idle()

        if table == None: table = ['rel_list', 'rel_lib']
        elif not type(table) == list: table = [table]

        yes = control.yesnoDialog(control.lang(30401).encode('utf-8'), '', '')
        if not yes: return

        dbcon = database.connect(control.cacheFile)
        dbcur = dbcon.cursor()

        for t in table:
            try:
                dbcur.execute("DROP TABLE IF EXISTS %s" % t)
                dbcur.execute("VACUUM")
                dbcon.commit()
            except:
                pass

        nanscrapers.clear_cache()

        control.infoDialog(control.lang(30402).encode('utf-8'))
    except:
        pass
Example #9
0
    def views(self):
        try:
            control.idle()

            items = [ (control.lang(32001).encode('utf-8'), 'movies'), (control.lang(32002).encode('utf-8'), 'tvshows'), (control.lang(32054).encode('utf-8'), 'seasons'), (control.lang(32038).encode('utf-8'), 'episodes') ]

            select = control.selectDialog([i[0] for i in items], control.lang(32049).encode('utf-8'))

            if select == -1: return

            content = items[select][1]

            title = control.lang(32059).encode('utf-8')
            url = '%s?action=addView&content=%s' % (sys.argv[0], content)

            poster, banner, fanart = control.addonPoster(), control.addonBanner(), control.addonFanart()

            item = control.item(label=title)
            item.setInfo(type='Video', infoLabels = {'title': title})
            item.setArt({'icon': poster, 'thumb': poster, 'poster': poster, 'banner': banner})
            item.setProperty('Fanart_Image', fanart)

            control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=False)
            control.content(int(sys.argv[1]), content)
            control.directory(int(sys.argv[1]), cacheToDisc=True)

            from resources.lib.modules import cache
            views.setView(content, {})
        except:
            return
Example #10
0
 def clearCache(self):
     control.idle()
     yes = control.yesnoDialog(control.lang(32056).encode('utf-8'), '', '')
     if not yes: return
     from resources.lib.modules import cache
     cache.cache_clear()
     control.infoDialog(control.lang(32057).encode('utf-8'), sound=True, icon='INFO')
Example #11
0
    def get(self, name, year='0'):
        try:
            offset = '0'

            if not control.setting('bookmarks') == 'true': raise Exception()

            idFile = hashlib.md5()
            for i in name: idFile.update(str(i))
            for i in year: idFile.update(str(i))
            idFile = str(idFile.hexdigest())

            dbcon = database.connect(control.bookmarksFile)
            dbcur = dbcon.cursor()
            dbcur.execute("SELECT * FROM bookmark WHERE idFile = '%s'" % idFile)
            match = dbcur.fetchone()
            self.offset = str(match[1])
            dbcon.commit()

            if self.offset == '0': raise Exception()

            minutes, seconds = divmod(float(self.offset), 60) ; hours, minutes = divmod(minutes, 60)
            label = '%02d:%02d:%02d' % (hours, minutes, seconds)
            label = (control.lang(32502) % label).encode('utf-8')

            try: yes = control.dialog.contextmenu([label, control.lang(32501).encode('utf-8'), ])
            except: yes = control.yesnoDialog(label, '', '', str(name), control.lang(32503).encode('utf-8'), control.lang(32501).encode('utf-8'))

            if yes: self.offset = '0'

            return self.offset
        except:
            return offset
Example #12
0
    def search(self, query=None):
        try:
            if control.infoLabel('Container.PluginName') == '':
                return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '')

            if not control.infoLabel('ListItem.Title') == '':
                self.query = control.window.getProperty('%s.movie.search' % control.addonInfo('id'))

            elif query == None:
                t = control.lang(30201).encode('utf-8')
                k = control.keyboard('', t) ; k.doModal()
                self.query = k.getText() if k.isConfirmed() else None

            else:
                self.query = query

            if (self.query == None or self.query == ''): return

            control.window.setProperty('%s.movie.search' % control.addonInfo('id'), self.query)

            url = self.search_link % urllib.quote_plus(self.query)
            self.list = cache.get(self.trakt_list, 0, url)

            self.worker()
            self.movieDirectory(self.list)
            return self.list
        except:
            return
Example #13
0
    def addDirectory(self, items, queue=False):
        if items == None or len(items) == 0: return

        sysaddon = sys.argv[0]
        isPlayable = False if control.setting('autoplay') == 'false' and control.setting('hosts.mode') == '1' else True
        addonFanart, addonThumb, artPath = control.addonFanart(), control.addonThumb(), control.artPath()

        for i in items:
            try:
                try: name = control.lang(i['name']).encode('utf-8')
                except: name = i['name']

                if i['image'].startswith('http://'): thumb = i['image']
                elif not artPath == None: thumb = os.path.join(artPath, i['image'])
                else: thumb = addonThumb

                url = '%s?action=%s' % (sysaddon, i['action'])
                try: url += '&url=%s' % urllib.quote_plus(i['url'])
                except: pass

                cm = []

                if queue == True and isPlayable == True:
                    cm.append((control.lang(30202).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon))

                item = control.item(label=name, iconImage=thumb, thumbnailImage=thumb)
                item.addContextMenuItems(cm, replaceItems=False)
                if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart)
                control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True)
            except:
                pass

        control.directory(int(sys.argv[1]), cacheToDisc=True)
Example #14
0
def rdAuthorize():
    try:
        CLIENT_ID = 'X245A4XAIBGVM'
        USER_AGENT = 'Kodi Exodus/3.0'

        if not '' in credentials()['realdebrid'].values():
            if control.yesnoDialog(control.lang(30411).encode('utf-8'), control.lang(30413).encode('utf-8'), '', 'RealDebrid', control.lang(30415).encode('utf-8'), control.lang(30414).encode('utf-8')):
                control.setSetting(id='realdebrid.id', value='')
                control.setSetting(id='realdebrid.secret', value='')
                control.setSetting(id='realdebrid.token', value='')
                control.setSetting(id='realdebrid.refresh', value='')
                control.setSetting(id='realdebrid.auth', value='')
            raise Exception()

        headers = {'User-Agent': USER_AGENT}
        url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % (CLIENT_ID)
        result = client.request(url, headers=headers)
        result = json.loads(result)
        verification_url = (control.lang(30416) + '[COLOR skyblue]%s[/COLOR]' % result['verification_url']).encode('utf-8')
        user_code = (control.lang(30417) + '[COLOR skyblue]%s[/COLOR]' % result['user_code']).encode('utf-8')
        device_code = result['device_code']
        interval = result['interval']

        progressDialog = control.progressDialog
        progressDialog.create('RealDebrid', verification_url, user_code)

        for i in range(0, 3600):
            try:
                if progressDialog.iscanceled(): break
                time.sleep(1)
                if not float(i) % interval == 0: raise Exception()
                url = 'https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s' % (CLIENT_ID, device_code)
                result = client.request(url, headers=headers, error=True)
                result = json.loads(result)
                if 'client_secret' in result: break
            except:
                pass

        try: progressDialog.close()
        except: pass

        id, secret = result['client_id'], result['client_secret'] 

        url = 'https://api.real-debrid.com/oauth/v2/token'
        post = urllib.urlencode({'client_id': id, 'client_secret': secret, 'code': device_code, 'grant_type': 'http://oauth.net/grant_type/device/1.0'})

        result = client.request(url, post=post, headers=headers)
        result = json.loads(result)

        token, refresh = result['access_token'], result['refresh_token']

        control.setSetting(id='realdebrid.id', value=id)
        control.setSetting(id='realdebrid.secret', value=secret)
        control.setSetting(id='realdebrid.token', value=token)
        control.setSetting(id='realdebrid.refresh', value=refresh)
        control.setSetting(id='realdebrid.auth', value='*************')
        raise Exception()
    except:
        control.openSettings('3.13')
Example #15
0
 def addDirectoryItem(self, name, query, thumb, icon, queue=False, isAction=True, isFolder=True):
     try: name = control.lang(name).encode('utf-8')
     except: pass
     url = '%s?action=%s' % (sysaddon, query) if isAction == True else query
     thumb = os.path.join(artPath, thumb) if not artPath == None else icon
     cm = []
     if queue == True and isPlayable == True: cm.append((control.lang(30155).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon))
     item = control.item(label=name, iconImage=thumb, thumbnailImage=thumb)
     item.addContextMenuItems(cm, replaceItems=False)
     if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart)
     control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=isFolder)
Example #16
0
def addDirectoryItem(name, url, action, image, image2, fanart, content, data, tvshow='0', totalItems=0, isFolder=True):
    if not str(image).lower().startswith('http'): image = control.addonInfo('icon')

    if not str(image2).lower().startswith('http'): image2 = control.addonInfo('icon')

    if not str(fanart).lower().startswith('http'): fanart = control.addonInfo('fanart')

    if content in ['movies', 'episodes']: playable = 'true'
    else: playable = 'false'

    sysaddon = sys.argv[0]

    if url.startswith('$base64'):
        import base64 ; url = base64.b64decode(re.compile('\$base64\[(.+?)\]$').findall(url)[0])
    u = '%s?name=%s&url=%s&tvdb=&imdb=&source=GVideo&provider=Mpie&content=%s&action=playItem' % (sysaddon, urllib.quote_plus(name), urllib.quote_plus(url), str(content))

    cm = []

    if content == 'movies':
        cm.append((control.lang(30708).encode('utf-8'), 'XBMC.Action(Info)'))
    elif content in ['tvshows', 'seasons']:
        cm.append((control.lang(30709).encode('utf-8'), 'XBMC.Action(Info)'))
    elif content == 'episodes':
        cm.append((control.lang(30710).encode('utf-8'), 'XBMC.Action(Info)'))


    if content == 'movies' and not isFolder == True:
        downloadFile = name
        try: downloadFile = '%s (%s)' % (data['title'], data['year'])
        except: pass
        cm.append((control.lang(30722).encode('utf-8'), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)' % (sysaddon, urllib.quote_plus(downloadFile), urllib.quote_plus(url), urllib.quote_plus(image))))

    elif content == 'episodes' and not isFolder == True:
        downloadFile = name
        try: downloadFile = '%s S%02dE%02d' % (data['tvshowtitle'], int(data['season']), int(data['episode']))
        except: pass
        cm.append((control.lang(30722).encode('utf-8'), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)' % (sysaddon, urllib.quote_plus(downloadFile), urllib.quote_plus(url), urllib.quote_plus(image))))


    if content == 'movies':
        cm.append((control.lang(30711).encode('utf-8'), 'RunPlugin(%s?action=addView&content=movies)' % sysaddon))
    elif content == 'tvshows':
        cm.append((control.lang(30712).encode('utf-8'), 'RunPlugin(%s?action=addView&content=tvshows)' % sysaddon))
    elif content == 'seasons':
        cm.append((control.lang(30713).encode('utf-8'), 'RunPlugin(%s?action=addView&content=seasons)' % sysaddon))
    elif content == 'episodes':
        cm.append((control.lang(30714).encode('utf-8'), 'RunPlugin(%s?action=addView&content=episodes)' % sysaddon))


    item = control.item(name, iconImage='DefaultFolder.png', thumbnailImage=image)
    try: item.setArt({'poster': image2, 'tvshow.poster': image2, 'season.poster': image2, 'banner': image, 'tvshow.banner': image, 'season.banner': image})
    except: pass
    item.addContextMenuItems(cm, replaceItems=False)
    item.setProperty('Fanart_Image', fanart)
    if playable == 'true': item.setProperty('IsPlayable', 'true')
    item.setInfo(type='Video', infoLabels=data)

    control.addItem(handle=int(sys.argv[1]),url=u,listitem=item,totalItems=totalItems,isFolder=isFolder)
Example #17
0
def promptForLogin(prompt=None):
    import xbmcgui;
    from resources.lib.modules import control;

    __settings__ = xbmcaddon.Addon(control.addonInfo('id'))

    if prompt:
        if xbmcgui.Dialog().yesno(control.lang(32755).encode('utf-8'), control.lang(32756).encode('utf-8'), control.lang(32757).encode('utf-8')):
            __settings__.openSettings();

    else:
        __settings__.openSettings();
Example #18
0
    def addDirectory(self, items, queue=False):
        if items == None or len(items) == 0: control.idle() ; sys.exit()

        sysaddon = sys.argv[0]

        syshandle = int(sys.argv[1])

        addonFanart, addonThumb, artPath = control.addonFanart(), control.addonThumb(), control.artPath()

        queueMenu = control.lang(32065).encode('utf-8')

        playRandom = control.lang(32535).encode('utf-8')

        addToLibrary = control.lang(32551).encode('utf-8')

        for i in items:
            try:
                name = i['name']

                if i['image'].startswith('http'): thumb = i['image']
                elif not artPath == None: thumb = os.path.join(artPath, i['image'])
                else: thumb = addonThumb

                url = '%s?action=%s' % (sysaddon, i['action'])
                try: url += '&url=%s' % urllib.quote_plus(i['url'])
                except: pass

                cm = []
                
                cm.append(('Settings', 'RunPlugin(%s?action=openSettings&query=0.0)' % sysaddon))
                
                cm.append((playRandom, 'RunPlugin(%s?action=random&rtype=movie&url=%s)' % (sysaddon, urllib.quote_plus(i['url']))))

                if queue == True:
                    cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon))

                try: cm.append((addToLibrary, 'RunPlugin(%s?action=moviesToLibrary&url=%s)' % (sysaddon, urllib.quote_plus(i['context']))))
                except: pass

                item = control.item(label=name)

                item.setArt({'icon': thumb, 'thumb': thumb})
                if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart)

                item.addContextMenuItems(cm)

                control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True)
            except:
                pass

        control.content(syshandle, 'addons')
        control.directory(syshandle, cacheToDisc=True)
Example #19
0
 def addDirectoryItem(self, name, query, thumb, icon, context=None, queue=False, isAction=True, isFolder=True):
     try: name = control.lang(name).encode('utf-8')
     except: pass
     url = '%s?action=%s' % (sysaddon, query) if isAction == True else query
     thumb = os.path.join(artPath, thumb) if not artPath == None else icon
     cm = []
     if queue == True: cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon))
     if not context == None: cm.append((control.lang(context[0]).encode('utf-8'), 'RunPlugin(%s?action=%s)' % (sysaddon, context[1])))
     item = control.item(label=name)
     item.addContextMenuItems(cm)
     item.setArt({'icon': thumb, 'thumb': thumb})
     if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart)
     control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder)
Example #20
0
    def getURISource(self, url):
        u = None

        sourceDict = []
        for package, name, is_pkg in pkgutil.walk_packages(__path__): sourceDict.append((name, is_pkg))
        sourceDict = [i[0] for i in sourceDict if i[1] == False]
        sourceDict = [(i, __import__(i, globals(), locals(), [], -1).source()) for i in sourceDict]

        domain = re.sub('^www\.|^www\d+\.', '', urlparse.urlparse(url.strip().lower()).netloc)

        domains = [(i[0], i[1].domains) for i in sourceDict]
        domains = [i[0] for i in domains if any(x in domain for x in i[1])]

        if not domains: return False

        call = [i[1] for i in sourceDict if i[0] == domains[0]][0]

        progressDialog = control.progressDialog
        progressDialog.create(control.addonInfo('name'), control.lang(30726).encode('utf-8'))
        progressDialog.update(0)

        progressDialog.update(0, control.lang(30726).encode('utf-8'), control.lang(30731).encode('utf-8'))

        self.sources = call.sources(url, self.hostDict, self.hostprDict)

        progressDialog.update(50, control.lang(30726).encode('utf-8'), control.lang(30731).encode('utf-8'))

        items = self.sourcesFilter()

        filter = [i for i in items if i['source'].lower() in self.hostcapDict and i['debrid'] == '']
        items = [i for i in items if not i in filter]

        filter = [i for i in items if i['source'].lower() in self.hostblockDict and i['debrid'] == '']
        items = [i for i in items if not i in filter]

        items = [i for i in items if ('autoplay' in i and i['autoplay'] == True) or not 'autoplay' in i]

        for i in range(len(items)):
            try:
                if progressDialog.iscanceled(): break
                if xbmc.abortRequested == True: return sys.exit()
                url = self.sourcesResolve(items[i])
                if u == None: u = url
                if not url == None: break
            except:
                pass

        try: progressDialog.close()
        except: pass

        return u
Example #21
0
def getSearch():
    addDirectoryItem('%s...' % control.lang(30702).encode('utf-8'), '0', 'searchDirectory', '0', '0', '0', '0', '0', {})
    addDirectoryItem(control.lang(30703).encode('utf-8'), '0', 'clearSearch', '0', '0', '0', '0', '0', {})

    try:
        def search(): return
        result = cache.get(search, 600000000, table='rel_srch')
        for q in result:
                try: addDirectoryItem('%s...' % q, q, 'searchDirectory2', '0', '0', '0', '0', '0', {})
                except: pass
    except:
        pass

    control.directory(int(sys.argv[1]), cacheToDisc=True)
Example #22
0
def getCategory():
    getDirectory('0', phLink, '0', '0', '0', '0', close=False)
    addCategoryItem('Radio Crazy', 'radioDirectory', 'http://mecca.watchkodi.com/images/radios.png')
    addCategoryItem('Cartoon Crazy','CartoonDirectory','http://mecca.watchkodi.com/images/cartoon.png')
    addCategoryItem('NHL', 'nhlDirectory', 'http://mecca.watchkodi.com/images/hockey.jpg')
    addCategoryItem('News Updates', 'dmode&url=%s' % phNews, artPath + 'blazetameravAni.gif')
    addCategoryItem(control.lang(30701).encode('utf-8'), 'openSettings', artPath + 'settings.png')
    addCategoryItem(control.lang(30721).encode('utf-8'), 'downloader', artPath + 'downloader.png')
    addCategoryItem(control.lang(30702).encode('utf-8'), 'search', artPath + 'search.png')

    if phTest in control.listDir(control.dataPath)[1]:
        addCategoryItem('Testings', 'localDirectory', artPath + 'home.png')

    endCategory()
Example #23
0
def authTrakt():
    try:
        if getTraktCredentialsInfo() == True:
            if control.yesnoDialog(control.lang(30479).encode('utf-8'), control.lang(30481).encode('utf-8'), '', 'Trakt', control.lang(30483).encode('utf-8'), control.lang(30482).encode('utf-8')):
                control.setSetting(id='trakt.user', value='')
                control.setSetting(id='trakt.token', value='')
                control.setSetting(id='trakt.refresh', value='')
            raise Exception()

        result = getTrakt('/oauth/device/code', {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa'})
        result = json.loads(result)
        verification_url = (control.lang(30416) + '[COLOR skyblue]%s[/COLOR]' % result['verification_url']).encode('utf-8')
        user_code = (control.lang(30417) + '[COLOR skyblue]%s[/COLOR]' % result['user_code']).encode('utf-8')
        expires_in = int(result['expires_in'])
        device_code = result['device_code']
        interval = result['interval']

        progressDialog = control.progressDialog
        progressDialog.create('Trakt', verification_url, user_code)

        for i in range(0, expires_in):
            try:
                if progressDialog.iscanceled(): break
                time.sleep(1)
                if not float(i) % interval == 0: raise Exception()
                r = getTrakt('/oauth/device/token', {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'client_secret': '90a1840447a1e39d350023263902fe7010338d19789e6260f18df56a8b07a68a', 'code': device_code})
                r = json.loads(r)
                if 'access_token' in r: break
            except:
                pass

        try: progressDialog.close()
        except: pass

        token, refresh = r['access_token'], r['refresh_token']

        headers = {'Content-Type': 'application/json', 'trakt-api-key': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'trakt-api-version': '2', 'Authorization': 'Bearer %s' % token}

        result = client.request('http://api-v2launch.trakt.tv/users/me', headers=headers)
        result = json.loads(result)

        user = result['username']

        control.setSetting(id='trakt.user', value=user)
        control.setSetting(id='trakt.token', value=token)
        control.setSetting(id='trakt.refresh', value=refresh)
        raise Exception()
    except:
        control.openSettings('3.1')
Example #24
0
def authTrakt():
    try:
        if getTraktCredentialsInfo() == True:
            if control.yesnoDialog(control.lang(32511).encode('utf-8'), control.lang(32512).encode('utf-8'), '', 'Trakt'):
                control.setSetting(id='trakt.user', value='')
                control.setSetting(id='trakt.token', value='')
                control.setSetting(id='trakt.refresh', value='')
            raise Exception()

        result = getTraktAsJson('/oauth/device/code', {'client_id': V2_API_KEY})
        verification_url = (control.lang(32513) % result['verification_url']).encode('utf-8')
        user_code = (control.lang(32514) % result['user_code']).encode('utf-8')
        expires_in = int(result['expires_in'])
        device_code = result['device_code']
        interval = result['interval']

        progressDialog = control.progressDialog
        progressDialog.create('Trakt', verification_url, user_code)

        for i in range(0, expires_in):
            try:
                if progressDialog.iscanceled(): break
                time.sleep(1)
                if not float(i) % interval == 0: raise Exception()
                r = getTraktAsJson('/oauth/device/token', {'client_id': V2_API_KEY, 'client_secret': CLIENT_SECRET, 'code': device_code})
                if 'access_token' in r: break
            except:
                pass

        try: progressDialog.close()
        except: pass

        token, refresh = r['access_token'], r['refresh_token']

        headers = {'Content-Type': 'application/json', 'trakt-api-key': V2_API_KEY, 'trakt-api-version': 2, 'Authorization': 'Bearer %s' % token}


        result = client.request(urlparse.urljoin(BASE_URL, '/users/me'), headers=headers)
        result = utils.json_loads_as_str(result)

        user = result['username']

        control.setSetting(id='trakt.user', value=user)
        control.setSetting(id='trakt.token', value=token)
        control.setSetting(id='trakt.refresh', value=refresh)
        raise Exception()
    except:
        control.openSettings('3.1')
Example #25
0
 def showPlaybackInfo(self):
     try:
         if not control.setting('player.info') == 'true': raise Exception()
         elapsedTime = '%s %s %s' % (control.lang(30464).encode('utf-8'), int((time.time() - self.loadingTime)), control.lang(30465).encode('utf-8'))
         control.infoDialog(elapsedTime, heading=self.name)
     except:
         pass
Example #26
0
def clear(table=None):
    try:
        control.idle()

        if table == None: table = ['rel_list', 'rel_lib']
        elif not type(table) == list: table = [table]

        yes = control.yesnoDialog(control.lang(30401).encode('utf-8'), '', '')
        if not yes: return

        dbcon = database.connect(control.cacheFile)
        dbcur = dbcon.cursor()

        for t in table:
            try:
                dbcur.execute("DROP TABLE IF EXISTS %s" % t)
                dbcur.execute("VACUUM")
                dbcon.commit()
            except:
                pass
    except:
        pass

    import xbmcgui
    xbmcgui.Dialog().notification('[COLOR ffff0000]StreamHub[/COLOR]','Process Complete')
Example #27
0
def addView(content):
    try:
        skin = control.skin
        skinPath = control.skinPath
        xml = os.path.join(skinPath,'addon.xml')
        file = control.openFile(xml)
        read = file.read().replace('\n','')
        file.close()
        try: src = re.compile('defaultresolution="(.+?)"').findall(read)[0]
        except: src = re.compile('<res.+?folder="(.+?)"').findall(read)[0]
        src = os.path.join(skinPath, src)
        src = os.path.join(src, 'MyVideoNav.xml')
        file = control.openFile(src)
        read = file.read().replace('\n','')
        file.close()
        views = re.compile('<views>(.+?)</views>').findall(read)[0]
        views = [int(x) for x in views.split(',')]
        for view in views:
            label = control.infoLabel('Control.GetLabel(%s)' % (view))
            if not (label == '' or label == None): break
        record = (skin, content, str(view))
        control.makeFile(control.dataPath)
        dbcon = database.connect(control.viewsFile)
        dbcur = dbcon.cursor()
        dbcur.execute("CREATE TABLE IF NOT EXISTS views (""skin TEXT, ""view_type TEXT, ""view_id TEXT, ""UNIQUE(skin, view_type)"");")
        dbcur.execute("DELETE FROM views WHERE skin = '%s' AND view_type = '%s'" % (record[0], record[1]))
        dbcur.execute("INSERT INTO views Values (?, ?, ?)", record)
        dbcon.commit()
        viewName = control.infoLabel('Container.Viewmode')

        control.infoDialog(control.lang(30491).encode('utf-8'), heading=viewName)
    except:
        return
Example #28
0
def playItem(url, dialog=None):
    try:
        url = resolveUrl(url)

        if url == None:
            return control.infoDialog(control.lang(30705).encode('utf-8'))

        meta = {}
        for i in ['title', 'originaltitle', 'tvshowtitle', 'year', 'season', 'episode', 'genre', 'rating', 'votes', 'director', 'writer', 'plot', 'tagline']:
            try: meta[i] = control.infoLabel('listitem.%s' % i)
            except: pass
        meta['title'] = cleantitle(meta['title'])
        meta = dict((k,v) for k, v in meta.iteritems() if not v == '')
        if not 'title' in meta: meta['title'] = cleantitle(control.infoLabel('listitem.label'))
        icon = control.infoLabel('listitem.icon')
        title = meta['title']

        try:
            if not '.f4m'in url: raise Exception()
            ext = url.split('?')[0].split('&')[0].split('|')[0].rsplit('.')[-1].replace('/', '').lower()
            if not ext == 'f4m': raise Exception()
            from resources.lib.modules.f4mproxy.F4mProxy import f4mProxyHelper
            return f4mProxyHelper().playF4mLink(url, title, None, None, '', icon)
        except:
            pass

        item = control.item(path=url, iconImage=icon, thumbnailImage=icon)
        try: item.setArt({'icon': icon})
        except: pass
        item.setInfo(type='Video', infoLabels = meta)
        control.player.play(url, item)
    except:
        pass
Example #29
0
    def addDirectory(self, items):
        if items == None or len(items) == 0: return

        sysaddon = sys.argv[0]
        addonFanart, addonThumb, artPath = control.addonFanart(), control.addonThumb(), control.artPath()

        for i in items:
            try:
                try: name = control.lang(i['name']).encode('utf-8')
                except: name = i['name']

                if i['image'].startswith('http://'): thumb = i['image']
                elif not artPath == None: thumb = os.path.join(artPath, i['image'])
                else: thumb = addonThumb

                url = '%s?action=%s' % (sysaddon, i['action'])
                try: url += '&url=%s' % urllib.quote_plus(i['url'])
                except: pass

                cm = []

                item = control.item(label=name, iconImage=thumb, thumbnailImage=thumb)
                item.addContextMenuItems(cm, replaceItems=False)
                if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart)
                control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True)
            except:
                pass

        control.directory(int(sys.argv[1]), cacheToDisc=True)
Example #30
0
def getCategory():
    getDirectory('0', phLink, '0', '0', '0', '0', close=False)
    addCategoryItem(control.lang(30701).encode('utf-8'), 'openSettings', 'settings.png')

    if phTest in control.listDir(control.dataPath)[1]: addCategoryItem('Testings', 'localDirectory', 'home.png')

    endCategory()
Example #31
0
    def channelDirectory(self, items):
        if items == None or len(items) == 0:
            control.idle()
            sys.exit()

        sysaddon = sys.argv[0]

        syshandle = int(sys.argv[1])

        addonPoster, addonBanner = control.addonPoster(), control.addonBanner()

        addonFanart, settingFanart = control.addonFanart(), control.setting(
            'fanart')

        try:
            isOld = False
            control.item().getArt('type')
        except:
            isOld = True

        isPlayable = 'true' if not 'plugin' in control.infoLabel(
            'Container.PluginName') else 'false'

        playbackMenu = control.lang(32063).encode('utf-8') if control.setting(
            'hosts.mode') == '2' else control.lang(32064).encode('utf-8')

        queueMenu = control.lang(32065).encode('utf-8')

        refreshMenu = control.lang(32072).encode('utf-8')

        for i in items:
            try:
                label = '[B]%s[/B] : %s (%s)' % (i['channel'].upper(),
                                                 i['title'], i['year'])
                sysname = urllib.quote_plus('%s (%s)' %
                                            (i['title'], i['year']))
                systitle = urllib.quote_plus(i['title'])
                imdb, tmdb, year = i['imdb'], i['tmdb'], i['year']

                meta = dict((k, v) for k, v in i.iteritems() if not v == '0')
                meta.update({
                    'code': imdb,
                    'imdbnumber': imdb,
                    'imdb_id': imdb
                })
                meta.update({'tmdb_id': tmdb})
                meta.update({'mediatype': 'movie'})
                meta.update({
                    'trailer':
                    '%s?action=trailer&name=%s' % (sysaddon, sysname)
                })
                #meta.update({'trailer': 'plugin://script.extendedinfo/?info=playtrailer&&id=%s' % imdb})
                meta.update({'playcount': 0, 'overlay': 6})
                try:
                    meta.update(
                        {'genre': cleangenre.lang(meta['genre'], self.lang)})
                except:
                    pass

                sysmeta = urllib.quote_plus(json.dumps(meta))

                url = '%s?action=play&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % (
                    sysaddon, systitle, year, imdb, sysmeta, self.systime)
                sysurl = urllib.quote_plus(url)

                cm = []

                cm.append(
                    (queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon))

                cm.append(
                    (refreshMenu, 'RunPlugin(%s?action=refresh)' % sysaddon))

                cm.append((playbackMenu,
                           'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' %
                           (sysaddon, sysurl, sysmeta)))

                if isOld == True:
                    cm.append(
                        (control.lang2(19033).encode('utf-8'), 'Action(Info)'))

                item = control.item(label=label)

                art = {}

                if 'poster2' in i and not i['poster2'] == '0':
                    art.update({
                        'icon': i['poster2'],
                        'thumb': i['poster2'],
                        'poster': i['poster2']
                    })
                elif 'poster' in i and not i['poster'] == '0':
                    art.update({
                        'icon': i['poster'],
                        'thumb': i['poster'],
                        'poster': i['poster']
                    })
                else:
                    art.update({
                        'icon': addonPoster,
                        'thumb': addonPoster,
                        'poster': addonPoster
                    })

                art.update({'banner': addonBanner})

                if settingFanart == 'true' and 'fanart' in i and not i[
                        'fanart'] == '0':
                    item.setProperty('Fanart_Image', i['fanart'])
                elif not addonFanart == None:
                    item.setProperty('Fanart_Image', addonFanart)

                item.setArt(art)
                item.addContextMenuItems(cm)
                item.setProperty('IsPlayable', isPlayable)
                item.setInfo(type='Video', infoLabels=meta)

                video_streaminfo = {'codec': 'h264'}
                item.addStreamInfo('video', video_streaminfo)

                control.addItem(handle=syshandle,
                                url=url,
                                listitem=item,
                                isFolder=False)
            except:
                pass

        control.content(syshandle, 'files')
        control.directory(syshandle, cacheToDisc=True)
Example #32
0
    def process(self, url, direct=True):
        try:
            dialog = None
            dialog = control.progressDialog
            dialog.create(control.addonInfo('name'),
                          control.lang(30726).encode('utf-8'))
            dialog.update(0)
        except:
            pass

        try:
            if not '</regex>' in url: raise Exception()
            from resources.lib.modules import regex
            u = regex.resolve(url)
            if not u == None: url = u
        except:
            pass

        try:
            if not url.startswith('rtmp'): raise Exception()
            if len(re.compile('\s*timeout=(\d*)').findall(url)) == 0:
                url += ' timeout=10'
            try:
                dialog.close()
            except:
                pass
            return url
        except:
            pass

        try:
            if not any(i in url for i in ['.m3u8', '.f4m', '.ts']):
                raise Exception()
            ext = url.split('?')[0].split('&')[0].split('|')[0].rsplit(
                '.')[-1].replace('/', '').lower()
            if not ext in ['m3u8', 'f4m', 'ts']: raise Exception()
            try:
                dialog.close()
            except:
                pass
            return url
        except:
            pass

        try:
            preset = re.findall('<preset>(.+?)</preset>', url)[0]

            title, year, imdb = re.findall(
                '<title>(.+?)</title>', url)[0], re.findall(
                    '<year>(.+?)</year>',
                    url)[0], re.findall('<imdb>(.+?)</imdb>', url)[0]

            try:
                tvdb, tvshowtitle, premiered, season, episode = re.findall(
                    '<tvdb>(.+?)</tvdb>', url)[0], re.findall(
                        '<tvshowtitle>(.+?)</tvshowtitle>',
                        url)[0], re.findall('<premiered>(.+?)</premiered>',
                                            url)[0], re.findall(
                                                '<season>(.+?)</season>',
                                                url)[0], re.findall(
                                                    '<episode>(.+?)</episode>',
                                                    url)[0]
            except:
                tvdb = tvshowtitle = premiered = season = episode = None

            direct = False

            presetDict = [
                'primewire_mv_tv', 'watchfree_mv_tv', 'movie25_mv',
                'watchseries_tv', 'afdah_mv', 'dayt_mv_tv', 'dizibox_tv',
                'dizigold_tv', 'miradetodo_mv', 'onlinedizi_tv',
                'pelispedia_mv_tv', 'pubfilm_mv_tv', 'putlocker_mv_tv',
                'rainierland_mv', 'sezonlukdizi_tv', 'tunemovie_mv',
                'xmovies_mv'
            ]

            if preset == 'searchsd':
                presetDict = [
                    'primewire_mv_tv', 'watchfree_mv_tv', 'movie25_mv',
                    'watchseries_tv'
                ]

            from resources.lib.sources import sources

            try:
                dialog.update(0,
                              control.lang(30726).encode('utf-8'),
                              control.lang(30731).encode('utf-8'))
            except:
                pass

            u = sources().getSources(title,
                                     year,
                                     imdb,
                                     tvdb,
                                     season,
                                     episode,
                                     tvshowtitle,
                                     premiered,
                                     presetDict=presetDict,
                                     progress=False,
                                     timeout=20)

            try:
                dialog.update(50,
                              control.lang(30726).encode('utf-8'),
                              control.lang(30731).encode('utf-8'))
            except:
                pass

            u = sources().sourcesDirect(u, progress=False)

            if not u == None:
                try:
                    dialog.close()
                except:
                    pass
                return u
        except:
            pass

        try:
            from resources.lib.sources import sources

            u = sources().getURISource(url)

            if not u == False: direct = False
            if u == None or u == False or u == []: raise Exception()

            try:
                dialog.update(50,
                              control.lang(30726).encode('utf-8'),
                              control.lang(30731).encode('utf-8'))
            except:
                pass

            u = sources().sourcesDirect(u, progress=False)

            if not u == None:
                try:
                    dialog.close()
                except:
                    pass
                return u
        except:
            pass

        try:
            if not '.google.com' in url: raise Exception()
            from resources.lib.modules import directstream
            u = directstream.google(url)[0]['url']
            try:
                dialog.close()
            except:
                pass
            return u
        except:
            pass

        try:
            import urlresolver

            try:
                hmf = urlresolver.HostedMediaFile(url=url,
                                                  include_disabled=True,
                                                  include_universal=False)
            except:
                hmf = urlresolver.HostedMediaFile(url=url)

            if hmf.valid_url() == False: raise Exception()

            direct = False
            u = hmf.resolve()
            if 'plugin://plugin.video.youtube' in u: raise Exception()

            if not u == False:
                try:
                    dialog.close()
                except:
                    pass
                return u
        except:
            pass

        try:
            try:
                headers = dict(urlparse.parse_qsl(url.rsplit('|', 1)[1]))
            except:
                headers = dict('')
            if not url.startswith('http'): raise Exception()
            result = client.request(url.split('|')[0],
                                    headers=headers,
                                    output='headers',
                                    timeout='20')
            if 'Content-Type' in result and not 'html' in result[
                    'Content-Type']:
                raise Exception()

            import liveresolver
            if liveresolver.isValid(url) == True: direct = False
            u = liveresolver.resolve(url)

            if not u == None:
                try:
                    dialog.close()
                except:
                    pass
                return u
        except:
            pass

        if direct == True: return url

        try:
            dialog.close()
        except:
            pass
Example #33
0
def get_globo_americas():

    is_globosat_available = control.is_globosat_available()

    headers = {
        "Accept-Encoding": "gzip",
        "User-Agent": "Globo Play/0 (iPhone)",
        "x-tenant-id": "globo-play-us",
        'x-platform-id': 'web',
        'x-device-id': 'desktop',
        'x-client-version': '0.4.3'
    }

    now = datetime.datetime.utcnow() + datetime.timedelta(
        hours=control.get_current_brasilia_utc_offset())
    date = now.strftime('%Y-%m-%d')
    variables = urllib.quote_plus('{{"date":"{}"}}'.format(date))
    query = 'query%20getEpgBroadcastList%28%24date%3A%20Date%21%29%20%7B%0A%20%20broadcasts%20%7B%0A%20%20%20%20...broadcastFragment%0A%20%20%7D%0A%7D%0Afragment%20broadcastFragment%20on%20Broadcast%20%7B%0A%20%20mediaId%0A%20%20media%20%7B%0A%20%20%20%20serviceId%0A%20%20%20%20headline%0A%20%20%20%20thumb%28size%3A%20720%29%0A%20%20%20%20availableFor%0A%20%20%20%20title%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20headline%0A%20%20%20%20%20%20titleId%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20imageOnAir%28scale%3A%20X1080%29%0A%20%20transmissionId%0A%20%20geofencing%0A%20%20geoblocked%0A%20%20channel%20%7B%0A%20%20%20%20id%0A%20%20%20%20color%0A%20%20%20%20name%0A%20%20%20%20logo%28format%3A%20PNG%29%0A%20%20%7D%0A%20%20epgByDate%28date%3A%20%24date%29%20%7B%0A%20%20%20%20entries%20%7B%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20metadata%0A%20%20%20%20%20%20description%0A%20%20%20%20%20%20startTime%0A%20%20%20%20%20%20endTime%0A%20%20%20%20%20%20durationInMinutes%0A%20%20%20%20%20%20liveBroadcast%0A%20%20%20%20%20%20tags%0A%20%20%20%20%20%20contentRating%0A%20%20%20%20%20%20contentRatingCriteria%0A%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20alternativeTime%0A%20%20%20%20%20%20title%7B%0A%20%20%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20%20%20originProgramId%0A%20%20%20%20%20%20%20%20releaseYear%0A%20%20%20%20%20%20%20%20countries%0A%20%20%20%20%20%20%20%20directorsNames%0A%20%20%20%20%20%20%20%20castNames%0A%20%20%20%20%20%20%20%20genresNames%0A%20%20%20%20%20%20%20%20authorsNames%0A%20%20%20%20%20%20%20%20screenwritersNames%0A%20%20%20%20%20%20%20%20artDirectorsNames%0A%20%20%20%20%20%20%20%20cover%20%7B%0A%20%20%20%20%20%20%20%20%20%20landscape%28scale%3A%20X1080%29%0A%20%20%20%20%20%20%20%20%20%20portrait%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20poster%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20logo%20%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D'
    url = 'https://jarvis.globo.com/graphql?query={query}&variables={variables}'.format(
        query=query, variables=variables)
    control.log('GLOBOPLAY US - GET %s' % url)
    response = cache.get(requests.get,
                         24,
                         url,
                         headers=headers,
                         table='globoplay').json()
    control.log(response)
    broadcasts = response['data']['broadcasts']

    utc_now = int(control.to_timestamp(datetime.datetime.utcnow()))

    # thumb_usa = 'https://live-thumbs.video.globo.com/glbeua/snapshot/' + str(int(time.time()))

    result = []
    for broadcast in broadcasts:
        media_id = str(broadcast.get('mediaId', 0))

        if is_globosat_available and media_id != str(
                GLOBO_US_LIVE_SUBSCRIBER_MEDIA_ID):
            continue

        epg = next((epg for epg in broadcast['epgByDate']['entries']
                    if int(epg['startTime']) <= utc_now < int(epg['endTime'])),
                   {})

        control.log('EPG: %s' % epg)

        channel = broadcast.get('channel', {}) or {}

        logo = channel.get('logo')
        channel_name = channel.get('name', '').replace(
            'TV Globo',
            'Globo') + ' USA'  # broadcast.get('media', {}).get('headline', '')
        fanart = broadcast.get('imageOnAir')
        channel_id = channel.get('id', 0)
        service_id = broadcast.get('media', {}).get('serviceId', 0)
        # channel_slug = '%s-americas' % channel.get('name', '').lower().replace(' ', '')

        duration = epg.get('durationInMinutes', 0) * 60

        title_obj = epg.get('title', {}) or {}

        title = epg.get('name', '')
        description = title_obj.get('description') or epg.get(
            'description', '')
        fanart = title_obj.get('cover', {}).get('landscape', fanart) or fanart
        poster = title_obj.get('poster', {}).get('web')

        label = '[B]' + channel_name + '[/B]' + ('[I] - ' + title +
                                                 '[/I]' if title else '')

        program_datetime = datetime.datetime.utcfromtimestamp(
            epg.get('startTime', 0)) + util.get_utc_delta()
        next_start = datetime.datetime.utcfromtimestamp(epg.get(
            'endTime', 0)) + util.get_utc_delta()

        plotoutline = datetime.datetime.strftime(
            program_datetime, '%H:%M') + ' - ' + datetime.datetime.strftime(
                next_start, '%H:%M')

        description = '%s | %s' % (plotoutline, description)

        tags = [plotoutline]

        if epg.get('liveBroadcast', False):
            tags.append(control.lang(32004))

        tags.extend(epg.get('tags', []) or [])

        result.append({
            'handler':
            PLAYER_HANDLER,
            'method':
            'play_stream',
            'IsPlayable':
            True,
            'id':
            media_id,
            'channel_id':
            channel_id,
            'service_id':
            service_id,
            'live':
            epg.get('liveBroadcast', False) or False,
            'livefeed':
            True,
            'label':
            label,
            'title':
            label,
            # 'title': title,
            'tvshowtitle':
            title,
            'plot':
            description,
            # 'plotoutline': plotoutline,
            # "tagline": plotoutline,
            'tag':
            tags,
            'duration':
            duration,
            "dateadded":
            datetime.datetime.strftime(program_datetime, '%Y-%m-%d %H:%M:%S'),
            'sorttitle':
            title,
            'studio':
            'Globoplay Americas',
            'year':
            title_obj.get('releaseYear'),
            'country':
            title_obj.get('countries', []),
            'genre':
            title_obj.get('genresNames', []),
            'cast':
            title_obj.get('castNames', []),
            'director':
            title_obj.get('directorsNames', []),
            'writer':
            title_obj.get('screenwritersNames', []),
            'credits':
            title_obj.get('artDirectorsNames', []),
            'mpaa':
            epg.get('contentRating'),
            "art": {
                'icon': logo,
                'clearlogo': logo,
                'thumb': fanart,
                'fanart': fanart,
                'tvshow.poster': poster
            }
        })

    return result
Example #34
0
	def addSearch(self, url):
			try:
				skip = 0
				if '|SPLITER|' in url:
					keep = url
					url,matcher = url.split('|SPLITER|')
					skip = 1
					section = 1
				elif '|SECTION|' in url:
					matcher = url.replace('|SECTION|','')
					section = 1
				else: 
					section = 0
			except: section = 0

			link = 'https://t2k-repository.ml/IT/IT/tRmKGjTbr/xmls/clowns.xml'

			if skip == 0:
				if section == 1:
					keyboard = control.keyboard('', control.lang(30702).encode('utf-8'))
					keyboard.doModal()
					if not (keyboard.isConfirmed()): return
					url = keyboard.getText()
					keep = url + '|SPLITER|' + matcher
				else:
					if (url is None or url == ''):
						keyboard = control.keyboard('', control.lang(30702).encode('utf-8'))
						keyboard.doModal()
						if not (keyboard.isConfirmed()): return
						url = keyboard.getText()

			if (url is None or url == ''): return

			if section == 1:
				input = keep
			else: 
				input = url
			def search(): return [input]
			query = cache.get(search, 600000000, table='rel_srch')

			def search(): return [x for y,x in enumerate((query + [input])) if x not in (query + [input])[:y]]
			cache.get(search, 0, table='rel_srch')

			links = client.request(link)
			links = re.findall('<link>(.+?)</link>', links)
			if section == 0: links = [i for i in links if str(i).startswith('http')]
			else: links = [i for i in links if str(i).startswith('http') and matcher.lower() in str(i).lower()]

			self.list = [] ; threads = []
			for link in links: threads.append(workers.Thread(self.it_list, link))
			[i.start() for i in threads] ; [i.join() for i in threads]

			self.list = [i for i in self.list if url.lower() in i['name'].lower()]

			for i in self.list:
				try:
					name = ''
					if not i['vip'] in ['No-Name TV']: name += '[B]%s[/B] | ' % i['vip'].upper()
					name += i['name']
					i.update({'name' : name})
				except:
					pass

			for i in self.list: i.update({'content': 'videos'})
			self.addDirectory(self.list)
Example #35
0
 def accountCheck(self):
     if traktCredentials == False and imdbCredentials == False:
         control.idle()
         control.infoDialog(control.lang(32042), sound=True, icon='WARNING')
Example #36
0
 def clearCacheAll(self):
     yes = control.yesnoDialog(control.lang(32056))
     if not yes: return
     from resources.lib.modules import cache
     cache.cache_clear_all()
     control.infoDialog(control.lang(32057), sound=True, icon='INFO')
Example #37
0
 def infoCheck(self, version):
     try:
         control.infoDialog('www.tvaddons.ag', control.lang(32074).encode('utf-8'), time=5000, sound=False)
         return '1'
     except:
         return '1'
Example #38
0
    def playlive(self, id, meta):

        control.log("Oi Play - play_stream: id=%s | meta=%s" % (id, meta))

        if id is None: return

        try:
            url = self.geturl(id)
        except Exception as ex:
            control.okDialog(control.lang(31200), str(ex))
            return

        encrypted = False  # 'drm' in data and 'licenseUrl' in data['drm']

        if encrypted:
            print('DRM Video!')

        if encrypted and not control.is_inputstream_available():
            control.okDialog(control.lang(31200), control.lang(34103).encode('utf-8'))
            return

        # url = data['individualization']['url']

        # url = url.replace('https://', 'http://')  # hack

        # info = data['token']['cmsChannelItem']

        # title = info['title']

        control.log("live media url: %s" % url)

        try:
            meta = json.loads(meta)
        except:
            meta = {
                "playcount": 0,
                "overlay": 6,
                # "title": title,
                # "thumb": info['positiveLogoUrl'],
                # "mediatype": "video",
                # "aired": None,
                # "genre": info["categoryName"],
                # "plot": title,
                # "plotoutline": title
            }

        poster = meta['poster'] if 'poster' in meta else None
        thumb = meta['thumb'] if 'thumb' in meta else None

        self.offset = float(meta['milliseconds_watched']) / 1000.0 if 'milliseconds_watched' in meta else 0

        self.isLive = True  # info['isLive']

        parsed_url = urlparse(url)
        if ".m3u8" in parsed_url.path:
            self.url, mime_type, stopEvent, cookies = hlshelper.pick_bandwidth(url)
        else:
            self.url = url
            mime_type, stopEvent, cookies = 'video/mp4', None, None

        if self.url is None:
            if stopEvent:
                control.log("Setting stop event for proxy player")
                stopEvent.set()
            control.infoDialog(control.lang(34100).encode('utf-8'), icon='ERROR')
            return

        control.log("Resolved URL: %s" % repr(self.url))
        control.log("Parsed URL: %s" % repr(parsed_url))

        item = control.item(path=self.url)
        item.setArt({'icon': thumb, 'thumb': thumb, 'poster': poster})
        item.setProperty('IsPlayable', 'true')
        item.setInfo(type='Video', infoLabels=control.filter_info_labels(meta))

        item.setContentLookup(False)

        # if ".mpd" in parsed_url.path:
        #     mime_type = 'application/dash+xml'
        #     item.setProperty('inputstream.adaptive.manifest_type', 'mpd')
        #     if self.isLive:
        #         item.setProperty('inputstream.adaptive.manifest_update_parameter', 'full')
        #
        # else:
        item.setProperty('inputstream.adaptive.manifest_type', 'hls')

        if encrypted:
            control.log("DRM: com.widevine.alpha")
            # licence_url = data['drm']['licenseUrl'] + '&token=' + data['drm']['jwtToken']
            # item.setProperty('inputstream.adaptive.license_type', 'com.widevine.alpha')
            # item.setProperty('inputstream.adaptive.license_key', licence_url + "||R{SSM}|")

        # if mime_type:
        #     item.setMimeType(mime_type)
        #     control.log("MIME TYPE: %s" % repr(mime_type))

        if not cookies and control.is_inputstream_available():
            item.setProperty('inputstreamaddon', 'inputstream.adaptive')
            item.setProperty('inputstream', 'inputstream.adaptive')  # Kodi 19

        control.resolve(int(sys.argv[1]), True, item)

        control.log("Done playing. Quitting...")
Example #39
0
    def add(self, tvshowtitle, year, imdb, tvdb, range=False):
        if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo')\
                and self.silentDialog is False:
            control.infoDialog(control.lang(32552).encode('utf-8'),
                               time=10000000)
            self.infoDialog = True

        from resources.lib.indexers import episodes
        items = episodes.episodes().get(tvshowtitle,
                                        year,
                                        imdb,
                                        tvdb,
                                        idx=False)

        try:
            items = [{
                'title': i['title'],
                'year': i['year'],
                'imdb': i['imdb'],
                'tvdb': i['tvdb'],
                'season': i['season'],
                'episode': i['episode'],
                'tvshowtitle': i['tvshowtitle'],
                'premiered': i['premiered']
            } for i in items]
        except:
            items = []

        try:
            if not self.dupe_setting == 'true': raise Exception()
            if items == []: raise Exception()

            id = [items[0]['imdb'], items[0]['tvdb']]

            lib = control.jsonrpc(
                '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties" : ["imdbnumber", "title", "year"]}, "id": 1}'
            )
            lib = unicode(lib, 'utf-8', errors='ignore')
            lib = json.loads(lib)['result']['tvshows']
            lib = [
                i['title'].encode('utf-8') for i in lib
                if str(i['imdbnumber']) in id or (
                    i['title'].encode('utf-8') == items[0]['tvshowtitle']
                    and str(i['year']) == items[0]['year'])
            ][0]

            lib = control.jsonrpc(
                '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "tvshow", "operator": "is", "value": "%s"}]}, "properties": ["season", "episode"]}, "id": 1}'
                % lib)
            lib = unicode(lib, 'utf-8', errors='ignore')
            lib = json.loads(lib)['result']['episodes']
            lib = [
                'S%02dE%02d' % (int(i['season']), int(i['episode']))
                for i in lib
            ]

            items = [
                i for i in items if not 'S%02dE%02d' %
                (int(i['season']), int(i['episode'])) in lib
            ]
        except:
            pass

        files_added = 0

        for i in items:
            try:
                if xbmc.abortRequested == True: return sys.exit()

                if self.check_setting == 'true':
                    if i['episode'] == '1':
                        self.block = True
                        src = lib_tools.check_sources(i['title'], i['year'],
                                                      i['imdb'], i['tvdb'],
                                                      i['season'],
                                                      i['episode'],
                                                      i['tvshowtitle'],
                                                      i['premiered'])
                        if src: self.block = False
                    if self.block == True: raise Exception()

                premiered = i.get('premiered', '0')
                if (premiered != '0'
                        and int(re.sub('[^0-9]', '', str(premiered))) > int(
                            self.date)) or (premiered == '0'
                                            and not self.include_unknown):
                    continue

                self.strmFile(i)
                files_added += 1
            except:
                pass

        if range == True: return

        if self.infoDialog is True:
            control.infoDialog(control.lang(32554).encode('utf-8'), time=1)

        if self.library_setting == 'true' and not control.condVisibility(
                'Library.IsScanningVideo') and files_added > 0:
            control.execute('UpdateLibrary(video)')
Example #40
0
    def update(self, query=None, info='true'):
        if not query == None: control.idle()

        try:

            items = []
            season, episode = [], []
            show = [
                os.path.join(self.library_folder, i)
                for i in control.listDir(self.library_folder)[0]
            ]
            for s in show:
                try:
                    season += [
                        os.path.join(s, i) for i in control.listDir(s)[0]
                    ]
                except:
                    pass
            for s in season:
                try:
                    episode.append([
                        os.path.join(s, i) for i in control.listDir(s)[1]
                        if i.endswith('.strm')
                    ][-1])
                except:
                    pass

            for file in episode:
                try:
                    file = control.openFile(file)
                    read = file.read()
                    read = read.encode('utf-8')
                    file.close()

                    if not read.startswith(sys.argv[0]): raise Exception()

                    params = dict(urlparse.parse_qsl(read.replace('?', '')))

                    try:
                        tvshowtitle = params['tvshowtitle']
                    except:
                        tvshowtitle = None
                    try:
                        tvshowtitle = params['show']
                    except:
                        pass
                    if tvshowtitle == None or tvshowtitle == '':
                        raise Exception()

                    year, imdb, tvdb = params['year'], params['imdb'], params[
                        'tvdb']

                    imdb = 'tt' + re.sub('[^0-9]', '', str(imdb))

                    try:
                        tmdb = params['tmdb']
                    except:
                        tmdb = '0'

                    items.append({
                        'tvshowtitle': tvshowtitle,
                        'year': year,
                        'imdb': imdb,
                        'tmdb': tmdb,
                        'tvdb': tvdb
                    })
                except:
                    pass

            items = [i for x, i in enumerate(items) if i not in items[x + 1:]]
            if len(items) == 0: raise Exception()
        except:
            return

        try:
            lib = control.jsonrpc(
                '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties" : ["imdbnumber", "title", "year"]}, "id": 1}'
            )
            lib = unicode(lib, 'utf-8', errors='ignore')
            lib = json.loads(lib)['result']['tvshows']
        except:
            return

        if info == 'true' and not control.condVisibility(
                'Window.IsVisible(infodialog)') and not control.condVisibility(
                    'Player.HasVideo'):
            control.infoDialog(control.lang(32553).encode('utf-8'),
                               time=10000000)
            self.infoDialog = True

        try:
            control.makeFile(control.dataPath)
            dbcon = database.connect(control.libcacheFile)
            dbcur = dbcon.cursor()
            dbcur.execute("CREATE TABLE IF NOT EXISTS tvshows ("
                          "id TEXT, "
                          "items TEXT, "
                          "UNIQUE(id)"
                          ");")
        except:
            return

        try:
            from resources.lib.indexers import episodes
        except:
            return

        files_added = 0

        # __init__ doesn't get called from services so self.date never gets updated and new episodes are not added to the library
        self.datetime = (datetime.datetime.utcnow() -
                         datetime.timedelta(hours=5))
        if control.setting('library.importdelay') != 'true':
            self.date = self.datetime.strftime('%Y%m%d')
        else:
            self.date = (self.datetime -
                         datetime.timedelta(hours=24)).strftime('%Y%m%d')

        for item in items:
            it = None

            if xbmc.abortRequested == True: return sys.exit()

            try:
                dbcur.execute("SELECT * FROM tvshows WHERE id = '%s'" %
                              item['tvdb'])
                fetch = dbcur.fetchone()
                it = eval(fetch[1].encode('utf-8'))
            except:
                pass

            try:
                if not it == None: raise Exception()

                it = episodes.episodes().get(item['tvshowtitle'],
                                             item['year'],
                                             item['imdb'],
                                             item['tvdb'],
                                             idx=False)

                status = it[0]['status'].lower()

                it = [{
                    'title': i['title'],
                    'year': i['year'],
                    'imdb': i['imdb'],
                    'tvdb': i['tvdb'],
                    'season': i['season'],
                    'episode': i['episode'],
                    'tvshowtitle': i['tvshowtitle'],
                    'premiered': i['premiered']
                } for i in it]

                if status == 'continuing': raise Exception()
                dbcur.execute("INSERT INTO tvshows Values (?, ?)",
                              (item['tvdb'], repr(it)))
                dbcon.commit()
            except:
                pass

            try:
                id = [item['imdb'], item['tvdb']]
                if not item['tmdb'] == '0': id += [item['tmdb']]

                ep = [
                    x['title'].encode('utf-8') for x in lib
                    if str(x['imdbnumber']) in id or (
                        x['title'].encode('utf-8') == item['tvshowtitle']
                        and str(x['year']) == item['year'])
                ][0]
                ep = control.jsonrpc(
                    '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "tvshow", "operator": "is", "value": "%s"}]}, "properties": ["season", "episode"]}, "id": 1}'
                    % ep)
                ep = unicode(ep, 'utf-8', errors='ignore')
                ep = json.loads(ep).get('result', {}).get('episodes', {})
                ep = [{
                    'season': int(i['season']),
                    'episode': int(i['episode'])
                } for i in ep]
                ep = sorted(ep, key=lambda x: (x['season'], x['episode']))[-1]

                num = [
                    x for x, y in enumerate(it)
                    if str(y['season']) == str(ep['season'])
                    and str(y['episode']) == str(ep['episode'])
                ][-1]
                it = [y for x, y in enumerate(it) if x > num]
                if len(it) == 0: continue
            except:
                continue

            for i in it:
                try:
                    if xbmc.abortRequested == True: return sys.exit()

                    premiered = i.get('premiered', '0')
                    if (premiered != '0'
                            and int(re.sub('[^0-9]', '', str(premiered))) >
                            int(self.date)) or (premiered == '0'
                                                and not self.include_unknown):
                        continue

                    libtvshows().strmFile(i)
                    files_added += 1
                except:
                    pass

        if self.infoDialog == True:
            control.infoDialog(control.lang(32554).encode('utf-8'), time=1)

        if self.library_setting == 'true' and not control.condVisibility(
                'Library.IsScanningVideo') and files_added > 0:
            control.execute('UpdateLibrary(video)')
Example #41
0
    def addDirectory(self, items, mode=True):
        if items == None or len(items) == 0: return

        sysaddon = sys.argv[0]
        addonPoster = addonBanner = control.addonInfo('icon')
        addonFanart = control.addonInfo('fanart')

        try:
            devmode = True if 'testings.xml' in control.listDir(
                control.dataPath)[1] else False
        except:
            devmode = False

        if mode == True: mode = [i['content'] for i in items if 'content' in i]
        else: mode = []
        if 'movies' in mode: mode = 'movies'
        elif 'tvshows' in mode: mode = 'tvshows'
        elif 'seasons' in mode: mode = 'seasons'
        elif 'episodes' in mode: mode = 'episodes'
        else: mode = None

        for i in items:
            try:
                try:
                    name = control.lang(int(i['name'])).encode('utf-8')
                except:
                    name = i['name']

                url = '%s?action=%s' % (sysaddon, i['action'])
                try:
                    url += '&url=%s' % urllib.quote_plus(i['url'])
                except:
                    pass

                if i['action'] == 'plugin' and 'url' in i: url = i['url']
                if i['action'] == 'developer' and not devmode == True:
                    raise Exception()

                poster = i['poster'] if 'poster' in i else '0'
                banner = i['banner'] if 'banner' in i else '0'
                fanart = i['fanart'] if 'fanart' in i else '0'
                if poster == '0': poster = addonPoster
                if banner == '0' and poster == '0': banner = addonBanner
                elif banner == '0': banner = poster

                content = i['content'] if 'content' in i else '0'
                replaceItems = False if content == '0' else True

                folder = i['folder'] if 'folder' in i else True

                meta = dict((k, v) for k, v in i.iteritems() if not v == '0')
                try:
                    meta.update({'duration': str(int(meta['duration']) * 60)})
                except:
                    pass

                cm = []

                if content in ['movies', 'tvshows']:
                    meta.update({
                        'trailer':
                        '%s?action=trailer&name=%s' %
                        (sysaddon, urllib.quote_plus(name))
                    })
                    cm.append((control.lang(30707).encode('utf-8'),
                               'RunPlugin(%s?action=trailer&name=%s)' %
                               (sysaddon, urllib.quote_plus(name))))

                if content == 'movies':
                    cm.append((control.lang(30708).encode('utf-8'),
                               'XBMC.Action(Info)'))
                elif content in ['tvshows', 'seasons']:
                    cm.append((control.lang(30709).encode('utf-8'),
                               'XBMC.Action(Info)'))
                elif content == 'episodes':
                    cm.append((control.lang(30710).encode('utf-8'),
                               'XBMC.Action(Info)'))

                if content == 'movies':
                    try:
                        dfile = '%s (%s)' % (data['title'], data['year'])
                    except:
                        dfile = name
                    try:
                        cm.append((control.lang(30722).encode(
                            'utf-8'
                        ), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)'
                                   % (sysaddon, urllib.quote_plus(dfile),
                                      urllib.quote_plus(i['url']),
                                      urllib.quote_plus(poster))))
                    except:
                        pass
                elif content == 'episodes':
                    try:
                        dfile = '%s S%02dE%02d' % (data['tvshowtitle'],
                                                   int(data['season']),
                                                   int(data['episode']))
                    except:
                        dfile = name
                    try:
                        cm.append((control.lang(30722).encode(
                            'utf-8'
                        ), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)'
                                   % (sysaddon, urllib.quote_plus(dfile),
                                      urllib.quote_plus(i['url']),
                                      urllib.quote_plus(poster))))
                    except:
                        pass

                if mode == 'movies':
                    cm.append((control.lang(30711).encode('utf-8'),
                               'RunPlugin(%s?action=addView&content=movies)' %
                               sysaddon))
                elif mode == 'tvshows':
                    cm.append((control.lang(30712).encode('utf-8'),
                               'RunPlugin(%s?action=addView&content=tvshows)' %
                               sysaddon))
                elif mode == 'seasons':
                    cm.append((control.lang(30713).encode('utf-8'),
                               'RunPlugin(%s?action=addView&content=seasons)' %
                               sysaddon))
                elif mode == 'episodes':
                    cm.append(
                        (control.lang(30714).encode('utf-8'),
                         'RunPlugin(%s?action=addView&content=episodes)' %
                         sysaddon))

                if devmode == True:
                    try:
                        cm.append(('Open in browser',
                                   'RunPlugin(%s?action=browser&url=%s)' %
                                   (sysaddon, urllib.quote_plus(i['url']))))
                    except:
                        pass

                if replaceItems == True:
                    cm.append((control.lang(30725).encode('utf-8'),
                               'RunPlugin(%s?action=openSettings)' % sysaddon))

                item = control.item(label=name,
                                    iconImage=poster,
                                    thumbnailImage=poster)

                try:
                    item.setArt({
                        'poster': poster,
                        'tvshow.poster': poster,
                        'season.poster': poster,
                        'banner': banner,
                        'tvshow.banner': banner,
                        'season.banner': banner
                    })
                except:
                    pass

                if not fanart == '0':
                    item.setProperty('Fanart_Image', fanart)
                elif not addonFanart == None:
                    item.setProperty('Fanart_Image', addonFanart)

                item.setInfo(type='Video', infoLabels=meta)
                item.addContextMenuItems(cm, replaceItems=replaceItems)
                control.addItem(handle=int(sys.argv[1]),
                                url=url,
                                listitem=item,
                                isFolder=folder)
            except:
                pass

        if not mode == None: control.content(int(sys.argv[1]), mode)
        control.directory(int(sys.argv[1]), cacheToDisc=True)
        if not mode == None: views.setView(mode)
Example #42
0
 def uploadLog(self):
     yes = control.yesnoDialog(control.lang(32056))
     if not yes: return
     from resources.lib.modules import log_utils
     log_utils.upload_log()
Example #43
0
    def get(self, name, season, episode, imdb, year='0'):
        offset = '0'

        if control.setting('bookmarks') == 'true':
            if control.setting('bookmarks.trakt') == 'true':
                try:
                    from resources.lib.modules import trakt

                    if not episode is None:

                        # Looking for a Episode progress

                        traktInfo = trakt.getTraktAsJson(
                            'https://api.trakt.tv/sync/playback/episodes?extended=full'
                        )
                        for i in traktInfo:
                            if imdb == i['show']['ids']['imdb']:
                                # Checking Episode Number
                                if int(season
                                       ) == i['episode']['season'] and int(
                                           episode) == i['episode']['number']:
                                    # Calculating Offset to seconds
                                    offset = (float(i['progress'] / 100) *
                                              int(i['episode']['runtime']) *
                                              60)
                    else:

                        # Looking for a Movie Progress
                        traktInfo = trakt.getTraktAsJson(
                            'https://api.trakt.tv/sync/playback/episodes?extended=full'
                        )
                        for i in traktInfo:
                            if imdb == i['movie']['ids']['imdb']:
                                # Calculating Offset to seconds
                                offset = (float(i['progress'] / 100) *
                                          int(i['movie']['runtime']) * 60)

                    if control.setting('bookmarks.auto') == 'false':
                        try:
                            yes = control.dialog.contextmenu([
                                "Resume",
                                control.lang(32501).encode('utf-8'),
                            ])
                        except:
                            yes = control.yesnoDialog(
                                "Resume", '', '', str(name),
                                control.lang(32503).encode('utf-8'),
                                control.lang(32501).encode('utf-8'))
                        if yes: offset = '0'

                    return offset

                except:
                    return '0'
            else:
                try:
                    offset = '0'

                    if not control.setting('bookmarks') == 'true':
                        raise Exception()

                    idFile = hashlib.md5()
                    for i in name:
                        idFile.update(str(i))
                    for i in year:
                        idFile.update(str(i))
                    idFile = str(idFile.hexdigest())

                    dbcon = database.connect(control.bookmarksFile)
                    dbcur = dbcon.cursor()
                    dbcur.execute(
                        "SELECT * FROM bookmark WHERE idFile = '%s'" % idFile)
                    match = dbcur.fetchone()
                    self.offset = str(match[1])
                    dbcon.commit()
                    if self.offset == '0': raise Exception()

                    minutes, seconds = divmod(float(self.offset), 60)
                    hours, minutes = divmod(minutes, 60)
                    label = '%02d:%02d:%02d' % (hours, minutes, seconds)
                    label = (control.lang(32502) % label).encode('utf-8')

                    if control.setting('bookmarks.auto') == 'false':

                        try:
                            yes = control.dialog.contextmenu([
                                label,
                                control.lang(32501).encode('utf-8'),
                            ])
                        except:
                            yes = control.yesnoDialog(
                                label, '', '', str(name),
                                control.lang(32503).encode('utf-8'),
                                control.lang(32501).encode('utf-8'))
                        if yes: self.offset = '0'

                    return self.offset
                except:
                    return offset
        else:
            return offset
Example #44
0
 def infoCheck(self, version):
     try:
         control.infoDialog('', control.lang(32074), time=5000, sound=False)
         return '1'
     except:
         return '1'
Example #45
0
from resources.lib.modules import control
from resources.lib.modules import trakt


sysaddon = sys.argv[0] ; syshandle = int(sys.argv[1]) ; control.moderator()

artPath = control.artPath() ; addonFanart = control.addonFanart()

imdbCredentials = False if control.setting('imdb.user') == '' else True

traktCredentials = trakt.getTraktCredentialsInfo()

traktIndicators = trakt.getTraktIndicatorsInfo()

queueMenu = control.lang(32065).encode('utf-8')


class navigator:
    def root(self):
        self.addDirectoryItem(32001, 'movieNavigator', 'movies.png', 'DefaultMovies.png')
        self.addDirectoryItem(32002, 'tvNavigator', 'tvshows.png', 'DefaultTVShows.png')

        if not control.setting('lists.widget') == '0':
            self.addDirectoryItem(32003, 'mymovieNavigator', 'mymovies.png', 'DefaultVideoPlaylists.png')
            self.addDirectoryItem(32004, 'mytvNavigator', 'mytvshows.png', 'DefaultVideoPlaylists.png')

        if not control.setting('movie.widget') == '0':
            self.addDirectoryItem(32005, 'movieWidget', 'latest-movies.png', 'DefaultRecentlyAddedMovies.png')

        if (traktIndicators == True and not control.setting('tv.widget.alt') == '0') or (traktIndicators == False and not control.setting('tv.widget') == '0'):
Example #46
0
	def get(self, name, imdb, season, episode):
		try:
			import gzip, codecs
			from io import BytesIO
			import re, base64
			import xmlrpc.client as xmlrpc_client
		except:
			log_utils.error()
			return
		try:
			langDict = {'Afrikaans': 'afr', 'Albanian': 'alb', 'Arabic': 'ara', 'Armenian': 'arm', 'Basque': 'baq', 'Bengali': 'ben',
			'Bosnian': 'bos', 'Breton': 'bre', 'Bulgarian': 'bul', 'Burmese': 'bur', 'Catalan': 'cat', 'Chinese': 'chi', 'Croatian': 'hrv',
			'Czech': 'cze', 'Danish': 'dan', 'Dutch': 'dut', 'English': 'eng', 'Esperanto': 'epo', 'Estonian': 'est', 'Finnish': 'fin',
			'French': 'fre', 'Galician': 'glg', 'Georgian': 'geo', 'German': 'ger', 'Greek': 'ell', 'Hebrew': 'heb', 'Hindi': 'hin',
			'Hungarian': 'hun', 'Icelandic': 'ice', 'Indonesian': 'ind', 'Italian': 'ita', 'Japanese': 'jpn', 'Kazakh': 'kaz', 'Khmer': 'khm',
			'Korean': 'kor', 'Latvian': 'lav', 'Lithuanian': 'lit', 'Luxembourgish': 'ltz', 'Macedonian': 'mac', 'Malay': 'may',
			'Malayalam': 'mal', 'Manipuri': 'mni', 'Mongolian': 'mon', 'Montenegrin': 'mne', 'Norwegian': 'nor', 'Occitan': 'oci',
			'Persian': 'per', 'Polish': 'pol', 'Portuguese': 'por,pob', 'Portuguese(Brazil)': 'pob,por', 'Romanian': 'rum', 'Russian': 'rus',
			'Serbian': 'scc', 'Sinhalese': 'sin', 'Slovak': 'slo', 'Slovenian': 'slv', 'Spanish': 'spa', 'Swahili': 'swa', 'Swedish': 'swe',
			'Syriac': 'syr', 'Tagalog': 'tgl', 'Tamil': 'tam', 'Telugu': 'tel', 'Thai': 'tha', 'Turkish': 'tur', 'Ukrainian': 'ukr', 'Urdu': 'urd'}
			codePageDict = {'ara': 'cp1256', 'ar': 'cp1256', 'ell': 'cp1253', 'el': 'cp1253', 'heb': 'cp1255',
									'he': 'cp1255', 'tur': 'cp1254', 'tr': 'cp1254', 'rus': 'cp1251', 'ru': 'cp1251'}
			quality = ['bluray', 'hdrip', 'brrip', 'bdrip', 'dvdrip', 'webrip', 'hdtv']
			langs = []
			try:
				try: langs = langDict[control.setting('subtitles.lang.1')].split(',')
				except: langs.append(langDict[control.setting('subtitles.lang.1')])
			except: pass
			try:
				try: langs = langs + langDict[control.setting('subtitles.lang.2')].split(',')
				except: langs.append(langDict[control.setting('subtitles.lang.2')])
			except: pass
			try: subLang = xbmc.Player().getSubtitles()
			except: subLang = ''

			if subLang == langs[0]: raise Exception()
			server = xmlrpc_client.Server('https://api.opensubtitles.org/xml-rpc', verbose=0)
			# token = server.LogIn('', '', 'en', 'XBMC_Subtitles_v1')
			token = server.LogIn('', '', 'en', 'XBMC_Subtitles_Unofficial_v5.2.14') # service.subtitles.opensubtitles_by_opensubtitles
			if 'token' not in token:
				return log_utils.log('OpenSubtitles Login failed: token=%s' % token, level=log_utils.LOGWARNING)
			else: token = token['token']

			sublanguageid = ','.join(langs)
			imdbid = re.sub(r'[^0-9]', '', imdb)
			if not (season is None or episode is None):
				result = server.SearchSubtitles(token, [{'sublanguageid': sublanguageid, 'imdbid': imdbid, 'season': season, 'episode': episode}])['data']
				fmt = ['hdtv']
			else:
				result = server.SearchSubtitles(token, [{'sublanguageid': sublanguageid, 'imdbid': imdbid}])['data']
				try: vidPath = xbmc.Player().getPlayingFile()
				except: vidPath = ''
				fmt = re.split(r'\.|\(|\)|\[|\]|\s|\-', vidPath)
				fmt = [i.lower() for i in fmt]
				fmt = [i for i in fmt if i in quality]
			filter = []
			result = [i for i in result if i['SubSumCD'] == '1']
			for lang in langs:
				filter += [i for i in result if i['SubLanguageID'] == lang and any(x in i['MovieReleaseName'].lower() for x in fmt)]
				filter += [i for i in result if i['SubLanguageID'] == lang and any(x in i['MovieReleaseName'].lower() for x in quality)]
				filter += [i for i in result if i['SubLanguageID'] == lang]

			try: lang = xbmc.convertLanguage(filter[0]['SubLanguageID'], xbmc.ISO_639_1)
			except: lang = filter[0]['SubLanguageID']
			filename = filter[0]['SubFileName']
			log_utils.log('downloaded subtitle=%s' % filename, level=log_utils.LOGDEBUG)

			content = [filter[0]['IDSubtitleFile'],]
			content = server.DownloadSubtitles(token, content)
			content = base64.b64decode(content['data'][0]['data'])
			content = gzip.GzipFile(fileobj=BytesIO(content)).read()
			subtitle = control.transPath('special://temp/')
			subtitle = control.joinPath(subtitle, 'TemporarySubs.%s.srt' % lang)
			log_utils.log('subtitle file = %s' % subtitle, level=log_utils.LOGDEBUG)

			codepage = codePageDict.get(lang, '')
			if codepage and control.setting('subtitles.utf') == 'true':
				try:
					content_encoded = codecs.decode(content, codepage) # check for kodi 19?
					content = codecs.encode(content_encoded, 'utf-8') # check for kodi 19?
				except: pass

			file = control.openFile(subtitle, 'w')
			file.write(content)
			file.close()
			xbmc.sleep(1000)
			xbmc.Player().setSubtitles(subtitle)
			if control.setting('subtitles.notification') == 'true':
				if Player().isPlayback():
					control.sleep(500)
					control.notification(title=filename, message=control.lang(32191) % lang.upper())
		except:
			log_utils.error()
Example #47
0
def authTrakt():
    try:
        if getTraktCredentialsInfo() == True:
            if control.yesnoDialog(
                    control.lang(32511).encode('utf-8'),
                    control.lang(32512).encode('utf-8'), '', 'Trakt'):
                control.setSetting(id='trakt.user', value='')
                control.setSetting(id='trakt.token', value='')
                control.setSetting(id='trakt.refresh', value='')
            raise Exception()

        result = getTraktAsJson('/oauth/device/code',
                                {'client_id': V2_API_KEY})
        verification_url = (control.lang(32513) %
                            result['verification_url']).encode('utf-8')
        user_code = (control.lang(32514) % result['user_code']).encode('utf-8')
        expires_in = int(result['expires_in'])
        device_code = result['device_code']
        interval = result['interval']

        progressDialog = control.progressDialog
        progressDialog.create('Trakt', verification_url, user_code)

        for i in range(0, expires_in):
            try:
                if progressDialog.iscanceled(): break
                time.sleep(1)
                if not float(i) % interval == 0: raise Exception()
                r = getTraktAsJson(
                    '/oauth/device/token', {
                        'client_id': V2_API_KEY,
                        'client_secret': CLIENT_SECRET,
                        'code': device_code
                    })
                if 'access_token' in r: break
            except:
                pass

        try:
            progressDialog.close()
        except:
            pass

        token, refresh = r['access_token'], r['refresh_token']

        headers = {
            'Content-Type': 'application/json',
            'trakt-api-key': V2_API_KEY,
            'trakt-api-version': 2,
            'Authorization': 'Bearer %s' % token
        }

        result = client.request(urlparse.urljoin(BASE_URL, '/users/me'),
                                headers=headers)
        result = utils.json_loads_as_str(result)

        user = result['username']

        control.setSetting(id='trakt.user', value=user)
        control.setSetting(id='trakt.token', value=token)
        control.setSetting(id='trakt.refresh', value=refresh)
        raise Exception()
    except:
        control.openSettings('3.1')
Example #48
0
from resources.lib.modules import control
from resources.lib.modules import trakt
from resources.lib.modules import cache
from resources.lib.modules import api_keys

artPath = control.artPath()
addonFanart = control.addonFanart()

imdbCredentials = False if control.setting('imdb.user') == '' else True

traktCredentials = trakt.getTraktCredentialsInfo()

traktIndicators = trakt.getTraktIndicatorsInfo()

queueMenu = control.lang(32065)


class navigator:
    def root(self):
        api_keys.chk()
        self.addDirectoryItem(32001, 'movieNavigator', 'movies.png',
                              'DefaultMovies.png')
        self.addDirectoryItem(32002, 'tvNavigator', 'tvshows.png',
                              'DefaultTVShows.png')

        if not control.setting('lists.widget') == '0':
            self.addDirectoryItem(32003, 'mymovieNavigator', 'mymovies.png',
                                  'DefaultVideoPlaylists.png')
            self.addDirectoryItem(32004, 'mytvNavigator', 'mytvshows.png',
                                  'DefaultVideoPlaylists.png')
def rdAuthorize():
    try:
        CLIENT_ID = 'X245A4XAIBGVM'
        USER_AGENT = 'Kodi Maximus/3.0'

        if not '' in credentials()['realdebrid'].values():
            if control.yesnoDialog(
                    control.lang(32531).encode('utf-8'),
                    control.lang(32532).encode('utf-8'), '', 'RealDebrid'):
                control.setSetting(id='realdebrid.id', value='')
                control.setSetting(id='realdebrid.secret', value='')
                control.setSetting(id='realdebrid.token', value='')
                control.setSetting(id='realdebrid.refresh', value='')
                control.setSetting(id='realdebrid.auth', value='')
            raise Exception()

        headers = {'User-Agent': USER_AGENT}
        url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % (
            CLIENT_ID)
        result = client.request(url, headers=headers)
        result = json.loads(result)
        verification_url = (control.lang(32533) %
                            result['verification_url']).encode('utf-8')
        user_code = (control.lang(32534) % result['user_code']).encode('utf-8')
        device_code = result['device_code']
        interval = result['interval']

        progressDialog = control.progressDialog
        progressDialog.create('RealDebrid', verification_url, user_code)

        for i in range(0, 3600):
            try:
                if progressDialog.iscanceled(): break
                time.sleep(1)
                if not float(i) % interval == 0: raise Exception()
                url = 'https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s' % (
                    CLIENT_ID, device_code)
                result = client.request(url, headers=headers, error=True)
                result = json.loads(result)
                if 'client_secret' in result: break
            except:
                pass

        try:
            progressDialog.close()
        except:
            pass

        id, secret = result['client_id'], result['client_secret']

        url = 'https://api.real-debrid.com/oauth/v2/token'
        post = urllib.urlencode({
            'client_id':
            id,
            'client_secret':
            secret,
            'code':
            device_code,
            'grant_type':
            'http://oauth.net/grant_type/device/1.0'
        })

        result = client.request(url, post=post, headers=headers)
        result = json.loads(result)

        token, refresh = result['access_token'], result['refresh_token']

        control.setSetting(id='realdebrid.id', value=id)
        control.setSetting(id='realdebrid.secret', value=secret)
        control.setSetting(id='realdebrid.token', value=token)
        control.setSetting(id='realdebrid.refresh', value=refresh)
        control.setSetting(id='realdebrid.auth', value='*************')
        raise Exception()
    except:
        control.openSettings('3.16')
Example #50
0
    def add_uncached_torrent(self, magnet_url, pack=False):
        def _return_failed(message=control.lang(33586)):
            try:
                control.progressDialog.close()
            except:
                pass
            self.delete_torrent(torrent_id)
            control.hide()
            control.sleep(500)
            control.okDialog(title=control.lang(40018), message=message)
            return False

        control.busy()
        try:
            active_count = self.torrents_activeCount()
            if active_count['nb'] >= active_count['limit']:
                return _return_failed()
        except:
            pass
        interval = 5
        stalled = ['magnet_error', 'error', 'virus', 'dead']
        extensions = supported_video_extensions()
        torrent_id = self.add_magnet(magnet_url)
        if not torrent_id: return _return_failed()
        torrent_info = self.torrent_info(torrent_id)
        if 'error_code' in torrent_info: return _return_failed()
        status = torrent_info['status']
        line = '%s\n%s\n%s'
        if status == 'magnet_conversion':
            line1 = control.lang(40013)
            line2 = torrent_info['filename']
            line3 = control.lang(40012) % str(torrent_info['seeders'])
            timeout = 100
            control.progressDialog.create(control.lang(40018),
                                          line % (line1, line2, line3))
            while status == 'magnet_conversion' and timeout > 0:
                control.progressDialog.update(timeout,
                                              line % (line1, line2, line3))
                if control.monitor.abortRequested(): return sysexit()
                try:
                    if control.progressDialog.iscanceled():
                        return _return_failed(control.lang(40014))
                except:
                    pass
                timeout -= interval
                control.sleep(1000 * interval)
                torrent_info = self.torrent_info(torrent_id)
                status = torrent_info['status']
                if any(x in status for x in stalled): return _return_failed()
                line3 = control.lang(40012) % str(torrent_info['seeders'])
            try:
                control.progressDialog.close()
            except:
                pass
        if status == 'downloaded':
            control.busy()
            return True
        if status == 'magnet_conversion': return _return_failed()
        if any(x in status for x in stalled): return _return_failed(status)
        if status == 'waiting_files_selection':
            video_files = []
            all_files = torrent_info['files']
            for item in all_files:
                if any(item['path'].lower().endswith(x) for x in extensions):
                    video_files.append(item)
            if pack:
                try:
                    if len(video_files) == 0: return _return_failed()
                    video_files = sorted(video_files, key=lambda x: x['path'])
                    torrent_keys = [str(i['id']) for i in video_files]
                    if not torrent_keys:
                        return _return_failed(control.lang(40014))
                    torrent_keys = ','.join(torrent_keys)
                    self.add_torrent_select(torrent_id, torrent_keys)
                    control.okDialog(title='default',
                                     message=control.lang(40017) %
                                     control.lang(40058))
                    control.hide()
                    return True  # returning true here causes "success" to be returned and resolve runs on  non valid link
                except:
                    return _return_failed()
            else:
                try:
                    video = max(video_files, key=lambda x: x['bytes'])
                    file_id = video['id']
                except ValueError:
                    return _return_failed()
                self.add_torrent_select(torrent_id, str(file_id))
            control.sleep(2000)
            torrent_info = self.torrent_info(torrent_id)
            status = torrent_info['status']
            if status == 'downloaded':
                control.hide()
                control.notification(message=control.lang(32057), icon=rd_icon)
                return True
            file_size = round(float(video['bytes']) / (1000**3), 2)
            line1 = '%s...' % (control.lang(40017) % control.lang(40058))
            line2 = torrent_info['filename']
            line3 = status
            control.progressDialog.create(control.lang(40018),
                                          line % (line1, line2, line3))
            while not status == 'downloaded':
                control.sleep(1000 * interval)
                torrent_info = self.torrent_info(torrent_id)
                status = torrent_info['status']
                if status == 'downloading':
                    line3 = control.lang(40011) % (
                        file_size,
                        round(float(torrent_info['speed']) / (1000**2), 2),
                        torrent_info['seeders'], torrent_info['progress'])
                else:
                    line3 = status
                control.progressDialog.update(
                    int(float(torrent_info['progress'])),
                    line % (line1, line2, line3))
                if control.monitor.abortRequested(): return sysexit()
                try:
                    if control.progressDialog.iscanceled():
                        if control.yesnoDialog(
                                'Delete RD download also?',
                                'No will continue the download',
                                'but close dialog'):
                            return _return_failed(control.lang(40014))
                        else:
                            control.progressDialog.close()
                            control.hide()
                            return False
                except:
                    pass
                if any(x in status for x in stalled): return _return_failed()
            try:
                control.progressDialog.close()
            except:
                pass
            control.hide()
            return True
        control.hide()
        return False
def pick_bandwidth(url):

    bandwidth_setting_temp = control.setting('bandwidth')

    # In settings.xml - bandwidth
    # Auto = '0'
    # Adaptive = '1'
    # Manual = '2'
    # Max = '3'
    # Medium = '4'
    # Low = '5'
    if bandwidth_setting_temp == "1":
        bandwidth_setting = "Adaptive"
    elif bandwidth_setting_temp == "2":
        bandwidth_setting = "Manual"
    elif bandwidth_setting_temp == "3":
        bandwidth_setting = "Max"
    elif bandwidth_setting_temp == "4":
        bandwidth_setting = "Medium"
    elif bandwidth_setting_temp == "5":
        bandwidth_setting = "Low"
    else:
        bandwidth_setting = "Auto"

    if bandwidth_setting == 'Auto':
        cookie_jar = cookielib.MozillaCookieJar(control.cookieFile, None, None)
        cookie_jar.clear()
        cookie_jar.save(control.cookieFile, None, None)
        return url, None, None

    if bandwidth_setting == 'Adaptive':

        proxy = control.proxy_url
        maxbandwidth = get_max_bandwidth()
        url_resolver = hlsProxy()

        player_type_temp = control.setting('proxy_type')

        if player_type_temp == "0":
            player_type = "Downloader"
        else:
            player_type = "Redirect"

        player = HLSDownloader if player_type == 'Downloader' else HLSWriter

        if player_type == 'Redirect':
            player.DOWNLOAD_IN_BACKGROUND = False
        elif player_type != 'Downloader':
            player.DOWNLOAD_IN_BACKGROUND = True

        url, mime_type = url_resolver.resolve(url,
                                              proxy=proxy,
                                              maxbitrate=maxbandwidth,
                                              player=player)

        return url, mime_type, url_resolver.stopEvent

    playlist, cookies = m3u8.load(url)

    if playlist is None:
        return None, None, None

    bandwidth_options = []
    for index, playlist_item in enumerate(playlist.playlists):
        bandwidth_options.append({
            'index':
            index,
            'bandwidth':
            str(playlist.playlists[index].stream_info.bandwidth)
        })
    bandwidth_options = sorted(bandwidth_options,
                               key=lambda k: int(k['bandwidth']))

    if bandwidth_setting == 'Manual':
        options = []
        options = options + [b['bandwidth'] for b in bandwidth_options]
        dialog = xbmcgui.Dialog()
        bandwidth = dialog.select(control.lang(34010).encode('utf-8'), options)
    else:
        if bandwidth_setting == 'Max':
            bandwidth = len(bandwidth_options) - 1
        elif bandwidth_setting == 'Medium':
            bandwidth = len(bandwidth_options) - 2
        elif bandwidth_setting == 'Low':
            bandwidth = 1

    cookies_str = urllib.urlencode(cookies.get_dict()).replace('&', '; ') + ';'
    url = '%s|Cookie=%s' % (playlist.playlists[
        bandwidth_options[bandwidth]['index']].absolute_uri, cookies_str)
    xbmc.log("FINAL URL: %s" % url, level=xbmc.LOGNOTICE)

    cookie_jar = cookielib.MozillaCookieJar(control.cookieFile, None, None)
    cookie_jar.clear()
    for cookie in cookies:
        cookie_jar.set_cookie(cookie)
    cookie_jar.save(control.cookieFile, None, None)

    return url, None, None
Example #52
0
 def my_downloads_to_listItem(self, page):
     try:
         from datetime import datetime
         import time
         sysaddon, syshandle = argv[0], int(argv[1])
         my_downloads, pages = self.downloads(page)
     except:
         my_downloads = None
     if not my_downloads: return
     extensions = supported_video_extensions()
     my_downloads = [
         i for i in my_downloads
         if i['download'].lower().endswith(tuple(extensions))
     ]
     downloadMenu, deleteMenu = control.lang(40048), control.lang(40050)
     for count, item in enumerate(my_downloads, 1):
         if page > 1: count += (page - 1) * 50
         try:
             cm = []
             try:
                 datetime_object = datetime.strptime(
                     item['generated'], FormatDateTime).date()
             except TypeError:
                 datetime_object = datetime(
                     *(time.strptime(item['generated'], FormatDateTime)[0:6]
                       )).date()
             name = control.strip_non_ascii_and_unprintable(
                 item['filename'])
             size = float(int(item['filesize'])) / 1073741824
             label = '%02d | %.2f GB | %s  | [I]%s [/I]' % (
                 count, size, datetime_object, name)
             url_link = item['download']
             url = '%s?action=play_URL&url=%s' % (sysaddon, url_link)
             cm.append((
                 downloadMenu,
                 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=realdebrid)'
                 % (sysaddon, quote_plus(name), quote_plus(rd_icon),
                    url_link)))
             cm.append(
                 (deleteMenu % 'File',
                  'RunPlugin(%s?action=rd_DeleteDownload&id=%s&name=%s)' %
                  (sysaddon, item['id'], name)))
             item = control.item(label=label)
             item.addContextMenuItems(cm)
             item.setArt({
                 'icon': rd_icon,
                 'poster': rd_icon,
                 'thumb': rd_icon,
                 'fanart': addonFanart,
                 'banner': rd_icon
             })
             item.setInfo(type='video', infoLabels='')
             control.addItem(handle=syshandle,
                             url=url,
                             listitem=item,
                             isFolder=False)
         except:
             log_utils.error()
     if page < pages:
         page += 1
         next = True
     else:
         next = False
     if next:
         try:
             nextMenu = control.lang(32053)
             url = '%s?action=rd_MyDownloads&query=%s' % (sysaddon, page)
             page = '  [I](%s)[/I]' % page
             nextMenu = '[COLOR skyblue]' + nextMenu + page + '[/COLOR]'
             item = control.item(label=nextMenu)
             icon = control.addonNext()
             item.setArt({
                 'icon': rd_icon,
                 'poster': rd_icon,
                 'thumb': rd_icon,
                 'fanart': addonFanart,
                 'banner': rd_icon
             })
             control.addItem(handle=syshandle,
                             url=url,
                             listitem=item,
                             isFolder=True)
         except:
             log_utils.error()
     control.content(syshandle, 'files')
     control.directory(syshandle, cacheToDisc=True)
Example #53
0
	def addDirectory(self, items, queue=False):
		if items is None or len(items) == 0:
			return

		sysaddon = sys.argv[0]
		addonPoster = addonBanner = control.addonInfo('icon')
		addonFanart = control.addonInfo('fanart')

		playlist = control.playlist
		if not queue is False: playlist.clear()

		try: devmode = True if 'testings.xml' in control.listDir(control.dataPath)[1] else False
		except: devmode = False

		mode = [i['content'] for i in items if 'content' in i]
		if 'movies' in mode: mode = 'movies'
		elif 'tvshows' in mode: mode = 'tvshows'
		elif 'seasons' in mode: mode = 'seasons'
		elif 'episodes' in mode: mode = 'episodes'
		elif 'videos' in mode: mode = 'videos'
		else: mode = 'addons'

		for i in items:
			try: 
				try: name = control.lang(int(i['name'])).encode('utf-8')
				except: name = i['name']

				if name == '':
					name = i['name']

				url = '%s?action=%s' % (sysaddon, i['action'])
				try: url += '&url=%s' % quote_plus(i['url'])
				except: pass
				try: url += '&content=%s' % quote_plus(i['content'])
				except: pass

				if i['action'] == 'plugin' and 'url' in i: url = i['url']

				try: devurl = dict(parse_qsl(urlparse(url).query))['action']
				except: devurl = None
				if devurl == 'developer' and not devmode is True: raise Exception()

				poster = i['poster'] if 'poster' in i else '0'
				banner = i['banner'] if 'banner' in i else '0'
				fanart = i['fanart'] if 'fanart' in i else '0'
				if poster == '0': poster = addonPoster
				if banner == '0' and poster == '0': banner = addonBanner
				elif banner == '0': banner = poster

				content = i['content'] if 'content' in i else '0'

				folder = i['folder'] if 'folder' in i else True

				# meta = dict((k, v) for k, v in i.iteritems() if v != '0')
				meta = dict((k, v) for k, v in i.iteritems() if v != '0' and v != '')
				cm = []

				if content in ['movies', 'tvshows']:
					meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, quote_plus(name))})
					cm.append((control.lang(30707).encode('utf-8'), 'RunPlugin(%s?action=trailer&name=%s)' % (sysaddon, quote_plus(name))))

				if content in ['movies', 'tvshows', 'seasons', 'episodes']:
					cm.append((control.lang(30708).encode('utf-8'), 'XBMC.Action(Info)'))

				if (folder is False and not '|regex=' in str(i.get('url'))) or (folder is True and content in ['tvshows', 'seasons']):
					cm.append((control.lang(30723).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon))

				if content == 'movies':
					try: dfile = '%s (%s)' % (i['title'], i['year'])
					except: dfile = name
					try: cm.append((control.lang(30722).encode('utf-8'), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)' % (sysaddon, quote_plus(dfile), quote_plus(i['url']), quote_plus(poster))))
					except: pass
				elif content == 'episodes':
					try: dfile = '%s S%02dE%02d' % (i['tvshowtitle'], int(i['season']), int(i['episode']))
					except: dfile = name
					try: cm.append((control.lang(30722).encode('utf-8'), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)' % (sysaddon, quote_plus(dfile), quote_plus(i['url']), quote_plus(poster))))
					except: pass
				elif content == 'songs':
					try: cm.append((control.lang(30722).encode('utf-8'), 'RunPlugin(%s?action=addDownload&name=%s&url=%s&image=%s)' % (sysaddon, quote_plus(name), quote_plus(i['url']), quote_plus(poster))))
					except: pass

				if mode == 'movies':
					cm.append((control.lang(30711).encode('utf-8'), 'RunPlugin(%s?action=addView&content=movies)' % sysaddon))
				elif mode == 'tvshows':
					cm.append((control.lang(30712).encode('utf-8'), 'RunPlugin(%s?action=addView&content=tvshows)' % sysaddon))
				elif mode == 'seasons':
					cm.append((control.lang(30713).encode('utf-8'), 'RunPlugin(%s?action=addView&content=seasons)' % sysaddon))
				elif mode == 'episodes':
					cm.append((control.lang(30714).encode('utf-8'), 'RunPlugin(%s?action=addView&content=episodes)' % sysaddon))

				if devmode is True:
					try: cm.append(('Open in browser', 'RunPlugin(%s?action=browser&url=%s)' % (sysaddon, quote_plus(i['url']))))
					except: pass

				item = control.item(label=name, iconImage=poster, thumbnailImage=poster)

				if fanart == '0':
					fanart = addonFanart

				try: item.setArt({'poster': poster, 'fanart': fanart, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner})
				except: pass

				if queue is False:
					item.setInfo(type='Video', infoLabels = meta)
					item.addContextMenuItems(cm)
					control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=folder)
				else:
					item.setInfo(type='Video', infoLabels = meta)
					playlist.add(url=url, listitem=item)
			except:
				pass

		if not queue is False:
			return control.player.play(playlist)

		try:
			i = items[0]
			if i['next'] == '':
				raise Exception()

				# nextMenu = control.lang(32053).encode('utf-8')
				# page = '  [I](%s)[/I]' % str(url.split('&page=', 1)[1])
				# nextMenu = '[COLOR skyblue]' + nextMenu + page + '[/COLOR]'

			url = '%s?action=%s&url=%s' % (sysaddon, i['nextaction'], quote_plus(i['next']))
			item = control.item(label=control.lang(30500).encode('utf-8'))
			item.setArt({'addonPoster': addonPoster, 'thumb': addonPoster, 'poster': addonPoster, 'fanart': addonFanart, 'tvshow.poster': addonPoster, 'season.poster': addonPoster, 'banner': addonPoster, 'tvshow.banner': addonPoster, 'season.banner': addonPoster})
			control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True)
		except:
			pass

		if not mode is None: control.content(int(sys.argv[1]), mode)
		control.directory(int(sys.argv[1]), cacheToDisc=True)
		if mode in ['movies', 'tvshows', 'seasons', 'episodes']:
			views.setView(mode, {'skin.estuary': 55})
Example #54
0
 def browse_user_torrents(self, folder_id):
     try:
         sysaddon, syshandle = argv[0], int(argv[1])
         torrent_files = self.torrent_info(folder_id)
     except:
         return
     extensions = supported_video_extensions()
     try:
         file_info = [
             i for i in torrent_files['files']
             if i['path'].lower().endswith(tuple(extensions))
         ]
         file_urls = torrent_files['links']
         for c, i in enumerate(file_info):
             try:
                 i.update({'url_link': file_urls[c]})
             except:
                 pass
         pack_info = sorted(file_info, key=lambda k: k['path'])
     except:
         if self.server_notifications:
             control.notification(
                 message='Real-Debrid Error:  browse_user_torrents failed',
                 icon=rd_icon)
         log_utils.log('Real-Debrid Error:  browse_user_torrents failed',
                       __name__, log_utils.LOGWARNING)
         return
     file_str, downloadMenu, renameMenu, deleteMenu, clearFinishedMenu = \
       control.lang(40047).upper(), control.lang(40048), control.lang(40049), control.lang(40050), control.lang(40051)
     for count, item in enumerate(pack_info, 1):
         try:
             cm = []
             try:
                 url_link = item['url_link']
             except:
                 continue
             if url_link.startswith('/'): url_link = 'http' + url_link
             name = item['path']
             if name.startswith('/'): name = name.split('/')[-1]
             size = float(int(item['bytes'])) / 1073741824
             label = '%02d | [B]%s[/B] | %.2f GB | [I]%s [/I]' % (
                 count, file_str, size, name)
             url = '%s?action=play_URL&url=%s&caller=realdebrid&type=unrestrict' % (
                 sysaddon, url_link)
             cm.append((
                 downloadMenu,
                 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=realdebrid&type=unrestrict)'
                 % (sysaddon, quote_plus(name), quote_plus(rd_icon),
                    url_link)))
             cm.append((
                 deleteMenu % 'Torrent',
                 'RunPlugin(%s?action=rd_DeleteUserTorrent&id=%s&name=%s)' %
                 (sysaddon, item['id'], quote_plus(name))))
             item = control.item(label=label)
             item.addContextMenuItems(cm)
             item.setArt({
                 'icon': rd_icon,
                 'poster': rd_icon,
                 'thumb': rd_icon,
                 'fanart': addonFanart,
                 'banner': rd_icon
             })
             item.setInfo(type='video', infoLabels='')
             control.addItem(handle=syshandle,
                             url=url,
                             listitem=item,
                             isFolder=False)
         except:
             log_utils.error()
     control.content(syshandle, 'files')
     control.directory(syshandle, cacheToDisc=True)
Example #55
0
def get_mais_canais():

    query = 'query%20getBroadcastList%20%7B%0A%20%20%20%20%20%20broadcasts%20%7B%0A%20%20%20%20%20%20%20%20...broadcastFragment%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20fragment%20broadcastFragment%20on%20Broadcast%20%7B%0A%20%20%20%20%20%20mediaId%0A%20%20%20%20%20%20transmissionId%0A%20%20%20%20%20%20logo%0A%20%20%20%20%20%20imageOnAir%28scale%3A%20X1080%29%0A%20%20%20%20%20%20withoutDVRMediaId%0A%20%20%20%20%20%20promotionalMediaId%0A%20%20%20%20%20%20salesPageCallToAction%0A%20%20%20%20%20%20promotionalText%0A%20%20%20%20%20%20geofencing%0A%20%20%20%20%20%20geoblocked%0A%20%20%20%20%20%20ignoreAdvertisements%0A%20%20%20%20%20%20channel%20%7B%0A%20%20%20%20%20%20%20%20id%0A%20%20%20%20%20%20%20%20color%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20logo%28format%3A%20PNG%29%0A%20%20%20%20%20%20%20%20requireUserTeam%0A%20%20%20%20%20%20%20%20payTvServiceId%0A%20%20%20%20%20%20%20%20payTvUsersMessage%0A%20%20%20%20%20%20%20%20payTvExternalLink%0A%20%20%20%20%20%20%20%20payTvExternalLinkLabel%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20epgCurrentSlots%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20metadata%0A%20%20%20%20%20%20%20%20description%0A%20%20%20%20%20%20%20%20tags%0A%20%20%20%20%20%20%20%20startTime%0A%20%20%20%20%20%20%20%20endTime%0A%20%20%20%20%20%20%20%20durationInMinutes%0A%20%20%20%20%20%20%20%20liveBroadcast%0A%20%20%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20%20%20contentRating%0A%20%20%20%20%20%20%20%20title%7B%0A%20%20%20%20%20%20%20%20%20%20poster%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20cover%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20landscape%0A%20%20%20%20%20%20%20%20%20%20%20%20portrait%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20releaseYear%0A%20%20%20%20%20%20%20%20%20%20type%0A%20%20%20%20%20%20%20%20%20%20format%0A%20%20%20%20%20%20%20%20%20%20countries%0A%20%20%20%20%20%20%20%20%20%20directors%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20cast%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20genres%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20media%20%7B%0A%20%20%20%20%20%20%20%20serviceId%0A%20%20%20%20%20%20%20%20headline%0A%20%20%20%20%20%20%20%20thumb%28size%3A%20720%29%0A%20%20%20%20%20%20%20%20availableFor%0A%20%20%20%20%20%20%20%20title%20%7B%0A%20%20%20%20%20%20%20%20%20%20slug%0A%20%20%20%20%20%20%20%20%20%20headline%0A%20%20%20%20%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20subscriptionService%20%7B%0A%20%20%20%20%20%20%20%20%20%20faq%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20url%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20salesPage%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20identifier%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D'
    variables = '{}'

    response = request_query(query, variables, force_refresh=True) or {}

    for broadcast in response.get('data', {}).get('broadcasts', []) or []:
        channel = broadcast.get('channel', {}) or {}

        if channel.get('id') == '196':
            continue

        media_id = str(broadcast.get('mediaId', 0))

        epg = next((epg for epg in broadcast.get('epgCurrentSlots', [])), {})

        control.log('EPG: %s' % epg)

        logo = channel.get('logo')
        channel_name = broadcast.get('media', {}).get('headline', '').replace(
            'Agora no ', '').replace('Agora na ',
                                     '').strip()  #channel.get('name', '')
        fanart = broadcast.get('imageOnAir')
        channel_id = channel.get('id', 0)
        service_id = broadcast.get('media', {}).get('serviceId', 0)
        # channel_slug = '%s-americas' % channel.get('name', '').lower().replace(' ', '')

        duration = epg.get('durationInMinutes', 0) * 60

        title_obj = epg.get('title', {}) or {}

        title = epg.get('name', '')
        description = title_obj.get('description') or epg.get(
            'description', '')
        fanart = title_obj.get('cover', {}).get('landscape', fanart) or fanart
        poster = title_obj.get('poster', {}).get('web')
        thumb = THUMBS.get(str(broadcast.get('transmissionId')))
        thumb = (SNAPSHOT_URL.format(transmission=thumb) + '?=' +
                 str(int(time.time()))) if thumb else fanart

        label = '[B]' + channel_name + '[/B]' + ('[I] - ' + title +
                                                 '[/I]' if title else '')

        program_datetime = datetime.datetime.utcfromtimestamp(
            epg.get('startTime', 0)) + util.get_utc_delta()
        next_start = datetime.datetime.utcfromtimestamp(epg.get(
            'endTime', 0)) + util.get_utc_delta()

        plotoutline = datetime.datetime.strftime(
            program_datetime, '%H:%M') + ' - ' + datetime.datetime.strftime(
                next_start, '%H:%M')

        description = '%s | %s' % (plotoutline, description)

        tags = [plotoutline]

        if epg.get('liveBroadcast', False):
            tags.append(control.lang(32004))

        tags.extend(epg.get('tags', []) or [])

        yield {
            'handler':
            PLAYER_HANDLER,
            'method':
            'play_stream',
            'IsPlayable':
            True,
            'id':
            media_id,
            'channel_id':
            channel_id,
            'service_id':
            service_id,
            'live':
            epg.get('liveBroadcast', False) or False,
            'livefeed':
            True,
            'label':
            label,
            'title':
            label,
            # 'title': title,
            'tvshowtitle':
            title,
            'plot':
            description,
            # 'plotoutline': plotoutline,
            # "tagline": plotoutline,
            'tag':
            tags,
            'duration':
            duration,
            "dateadded":
            datetime.datetime.strftime(program_datetime, '%Y-%m-%d %H:%M:%S'),
            'sorttitle':
            title,
            'studio':
            'Globoplay',
            'year':
            title_obj.get('releaseYear'),
            'country':
            title_obj.get('countries', []),
            'genre':
            title_obj.get('genresNames', []),
            'cast':
            title_obj.get('castNames', []),
            'director':
            title_obj.get('directorsNames', []),
            'writer':
            title_obj.get('screenwritersNames', []),
            'credits':
            title_obj.get('artDirectorsNames', []),
            'mpaa':
            epg.get('contentRating'),
            "art": {
                'icon': logo,
                'clearlogo': logo,
                'thumb': thumb,
                'fanart': fanart,
                'tvshow.poster': poster
            }
        }
Example #56
0
    def movieDirectory(self, items):
        if items is None or len(items) == 0:
            control.idle()
            sys.exit()

        sysaddon = sys.argv[0]
        syshandle = int(sys.argv[1])

        addonPoster, addonBanner = control.addonPoster(), control.addonBanner()
        addonFanart, settingFanart = control.addonFanart(), control.setting(
            'fanart')

        traktCredentials = trakt.getTraktCredentialsInfo()

        show_trailers = True if control.setting(
            'showtrailers') == 'true' else False

        try:
            isOld = False
            control.item().getArt('type')
        except Exception:
            isOld = True

        isPlayable = 'true' if 'plugin' not in control.infoLabel(
            'Container.PluginName') else 'false'

        indicators = playcount.getMovieIndicators()
        playbackMenu = control.lang(32063).encode('utf-8') if control.setting(
            'hosts.mode') == '2' else control.lang(32064).encode('utf-8')
        watchedMenu = control.lang(32068).encode(
            'utf-8') if trakt.getTraktIndicatorsInfo(
            ) is True else control.lang(32066).encode('utf-8')
        unwatchedMenu = control.lang(32069).encode(
            'utf-8') if trakt.getTraktIndicatorsInfo(
            ) is True else control.lang(32067).encode('utf-8')
        queueMenu = control.lang(32065).encode('utf-8')
        traktManagerMenu = control.lang(32070).encode('utf-8')
        nextMenu = control.lang(32053).encode('utf-8')
        addToLibrary = control.lang(32551).encode('utf-8')

        for i in items:
            try:
                label = '%s (%s)' % (i['title'], i['year'])
                imdb, tmdb, title, year = i['imdb'], i['tmdb'], i[
                    'originaltitle'], i['year']
                sysname = urllib.quote_plus('%s (%s)' % (title, year))
                systitle = urllib.quote_plus(title)

                meta = dict((k, v) for k, v in i.iteritems() if not v == '0')
                meta.update({
                    'code': imdb,
                    'imdbnumber': imdb,
                    'imdb_id': imdb
                })
                meta.update({'tmdb_id': tmdb})
                meta.update({'mediatype': 'movie'})
                meta.update({
                    'trailer':
                    '%s?action=trailer&name=%s' %
                    (sysaddon, urllib.quote_plus(label))
                })
                # meta.update({'trailer': 'plugin://script.extendedinfo/?info=playtrailer&&id=%s' % imdb})
                if 'duration' not in i:
                    meta.update({'duration': '120'})
                elif i['duration'] == '0':
                    meta.update({'duration': '120'})
                try:
                    meta.update({'duration': str(int(meta['duration']) * 60)})
                except Exception:
                    pass
                try:
                    meta.update(
                        {'genre': cleangenre.lang(meta['genre'], 'en')})
                except Exception:
                    pass

                poster = [
                    i[x] for x in ['poster3', 'poster', 'poster2']
                    if i.get(x, '0') != '0'
                ]
                poster = poster[0] if poster else addonPoster
                meta.update({'poster': poster})

                sysmeta = urllib.quote_plus(json.dumps(meta))

                url = '%s?action=play&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % (
                    sysaddon, systitle, year, imdb, sysmeta, self.systime)
                sysurl = urllib.quote_plus(url)

                cm = []

                if show_trailers is True:
                    cm.append(('Watch Trailer',
                               'RunPlugin(%s?action=trailer&name=%s)' %
                               (sysaddon, urllib.quote_plus(label))))

                cm.append(
                    (queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon))

                try:
                    overlay = int(playcount.getMovieOverlay(indicators, imdb))
                    if overlay == 7:
                        cm.append((
                            unwatchedMenu,
                            'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=6)'
                            % (sysaddon, imdb)))
                        meta.update({'playcount': 1, 'overlay': 7})
                    else:
                        cm.append((
                            watchedMenu,
                            'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=7)'
                            % (sysaddon, imdb)))
                        meta.update({'playcount': 0, 'overlay': 6})
                except Exception:
                    pass

                if traktCredentials is True:
                    cm.append((
                        traktManagerMenu,
                        'RunPlugin(%s?action=traktManager&name=%s&imdb=%s&content=movie)'
                        % (sysaddon, sysname, imdb)))

                cm.append((playbackMenu,
                           'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' %
                           (sysaddon, sysurl, sysmeta)))

                if isOld is True:
                    cm.append(
                        (control.lang2(19033).encode('utf-8'), 'Action(Info)'))

                cm.append((
                    addToLibrary,
                    'RunPlugin(%s?action=movieToLibrary&name=%s&title=%s&year=%s&imdb=%s&tmdb=%s)'
                    % (sysaddon, sysname, systitle, year, imdb, tmdb)))

                item = control.item(label=label)

                art = {}
                art.update({'icon': poster, 'thumb': poster, 'poster': poster})

                if 'banner' in i and not i['banner'] == '0':
                    art.update({'banner': i['banner']})
                else:
                    art.update({'banner': addonBanner})

                if 'clearlogo' in i and not i['clearlogo'] == '0':
                    art.update({'clearlogo': i['clearlogo']})

                if 'clearart' in i and not i['clearart'] == '0':
                    art.update({'clearart': i['clearart']})

                if settingFanart == 'true' and 'fanart2' in i and not i[
                        'fanart2'] == '0':
                    item.setProperty('Fanart_Image', i['fanart2'])
                elif settingFanart == 'true' and 'fanart' in i and not i[
                        'fanart'] == '0':
                    item.setProperty('Fanart_Image', i['fanart'])
                elif addonFanart is not None:
                    item.setProperty('Fanart_Image', addonFanart)

                item.setArt(art)
                item.addContextMenuItems(cm)
                item.setProperty('IsPlayable', isPlayable)
                item.setInfo(type='Video', infoLabels=meta)

                video_streaminfo = {'codec': 'h264'}
                item.addStreamInfo('video', video_streaminfo)

                control.addItem(handle=syshandle,
                                url=url,
                                listitem=item,
                                isFolder=False)
            except Exception:
                pass

        try:
            url = items[0]['next']
            if url == '':
                raise Exception()

            icon = control.addonNext()
            url = '%s?action=moviePage&url=%s' % (sysaddon,
                                                  urllib.quote_plus(url))

            item = control.item(label=nextMenu)

            item.setArt({
                'icon': icon,
                'thumb': icon,
                'poster': icon,
                'banner': icon
            })
            if addonFanart is not None:
                item.setProperty('Fanart_Image', addonFanart)

            control.addItem(handle=syshandle,
                            url=url,
                            listitem=item,
                            isFolder=True)
        except Exception:
            pass

        # control.content(syshandle, 'movies')
        # control.directory(syshandle, cacheToDisc=True)
        # views.setView('movies', {'skin.estuary': 55, 'skin.confluence': 500})
        self.endDirectory(contentType='movies',
                          sortMethod=control.xDirSort.Label,
                          category='Boxset List')
Example #57
0
                    pass
            else:
                try:
                    r += '&' + p + '=' + quote_plus(rlist[rand][p])
                except:
                    pass

        try:
            r += '&meta=' + quote_plus(json.dumps(rlist[rand]))
        except:
            r += '&meta=' + quote_plus("{}")

        if rtype == "movie":
            try:
                control.infoDialog(rlist[rand]['title'],
                                   control.lang(32536).encode('utf-8'),
                                   time=30000)
            except:
                pass

        elif rtype == "episode":
            try:
                control.infoDialog(rlist[rand]['tvshowtitle'] + " - Season " +
                                   rlist[rand]['season'] + " - " +
                                   rlist[rand]['title'],
                                   control.lang(32536).encode('utf-8'),
                                   time=30000)
            except:
                pass
        control.execute('RunPlugin(%s)' % r)
    except:
def _select_resource(video_id, resources, metadata, title_override=None):
    resource = None
    encrypted = False
    player = 'android'
    drm_scheme = None

    enable_4k = control.is_4k_enabled
    enable_hdr = control.setting('enable_hdr') == 'true'
    prefer_dash = control.setting('prefer_dash') == 'true'
    prefer_smoothstreaming = control.setting(
        'prefer_smoothstreaming') == 'true'
    prefer_playready = control.setting('prefer_playready') == 'true'

    if prefer_smoothstreaming:
        for node in resources:
            if 'players' in node and 'encrypted' in node and node[
                    'encrypted'] and any(
                        'smoothstreaming' in s
                        for s in node['players']) and any(
                            'playready' in s
                            for s in node['content_protection']):
                encrypted = True
                resource = node
                player = 'android_native'
                drm_scheme = 'com.microsoft.playready'
                server_url = resource['content_protection']['playready'][
                    'server']
                break

    if prefer_playready and not resource:
        try_player = 'androidtv_hdr' if enable_hdr else 'androidtv_sdr' if enable_4k else 'androidtv'
        for node in resources:
            if 'players' in node and 'encrypted' in node and node[
                    'encrypted'] and any(
                        try_player in s for s in node['players']) and any(
                            'playready' in s
                            for s in node['content_protection']):
                encrypted = True
                resource = node
                player = try_player
                drm_scheme = 'com.microsoft.playready'
                server_url = resource['content_protection']['playready'][
                    'server']
                break
        if not resource:
            for node in resources:
                if 'players' in node and 'encrypted' in node and node[
                        'encrypted'] and any(
                            'android_native' in s
                            for s in node['players']) and any(
                                'playready' in s
                                for s in node['content_protection']):
                    encrypted = True
                    resource = node
                    player = 'android_native'
                    drm_scheme = 'com.microsoft.playready'
                    server_url = resource['content_protection']['playready'][
                        'server']
                    break

    if not resource:
        for node in resources:
            if 'players' in node and 'encrypted' in node and node[
                    'encrypted'] and any(
                        'android_native' in s
                        for s in node['players']) and any(
                            'widevine' in s
                            for s in node['content_protection']):
                encrypted = True
                resource = node
                player = 'android_native'
                drm_scheme = 'com.widevine.alpha'
                server_url = resource['content_protection']['widevine'][
                    'server']
                break

    if not resource and enable_4k and prefer_dash:
        for node in resources:
            if 'players' in node and any('tv_4k_dash' in s
                                         for s in node['players']):
                resource = node
                player = 'tv_4k_dash'
                break

    if not resource and prefer_dash:
        for node in resources:
            if 'players' in node and any('tv_dash' in s
                                         for s in node['players']):
                resource = node
                player = 'tv_dash'
                break

    if not resource and enable_4k and (not prefer_dash or
                                       not control.is_inputstream_available()):
        for node in resources:
            if 'players' in node and any(
                    'tvos_4k' in s for s in node['players']
            ) and '2160' in node['_id'] and not node.get('encrypted', False):
                resource = node
                player = 'tvos_4k'
                break

    if not resource and enable_4k and enable_hdr:
        for node in resources:
            # if 'players' in node and 'height' in node and node['height'] == 2160 and any('androidtv_hdr' in s for s in node['players']):
            if 'players' in node and any('androidtv_hdr' in s
                                         for s in node['players']):
                resource = node
                player = 'androidtv_hdr'
                break

    if not resource and enable_4k:
        for node in resources:
            # if 'players' in node and 'height' in node and node['height'] == 2160 and any('androidtv_sdr' in s for s in node['players']):
            if 'players' in node and any('androidtv_sdr' in s
                                         for s in node['players']):
                resource = node
                player = 'androidtv_sdr'
                break

    #Prefer MP4 when available
    if not resource:
        for node in resources:
            if 'players' in node and 'height' in node and node[
                    'height'] == 720 and any('desktop' in s
                                             for s in node['players']):
                resource = node
                player = 'android'
                break

    if not resource:
        for node in resources:
            if 'players' in node and any('androidtv' in s
                                         for s in node['players']):
                resource = node
                player = 'androidtv'
                break

    if not resource:
        for node in resources:
            if 'players' in node and any('android' in s
                                         for s in node['players']):
                resource = node
                player = 'android'
                break

    if (resource or None) is None:
        control.infoDialog(message=control.lang(34102).encode('utf-8'),
                           sound=True,
                           icon='ERROR')
        return None

    control.log('Selected resource for video %s: %s' %
                (video_id, resource['_id']))

    subtitles = []
    for subtitle in resources:
        if 'type' in subtitle and subtitle['type'] == 'subtitle':
            control.log('Found Subtitle: %s' % subtitle['url'])
            subtitles.append({
                'language': subtitle['language'],
                'url': subtitle['url']
            })

    result = {
        "resource_id":
        resource['_id'],
        "id":
        video_id,
        "title":
        title_override or metadata["title"],
        "program":
        metadata["program"],
        "program_id":
        metadata["program_id"],
        "provider_id":
        metadata["provider_id"],
        "channel":
        metadata["channel"],
        "channel_id":
        metadata["channel_id"],
        "category":
        metadata["category"],
        "subscriber_only":
        metadata["subscriber_only"],
        "exhibited_at":
        metadata["exhibited_at"],
        "player":
        player,
        "version":
        PLAYER_VERSION,
        "url":
        resource["url"],
        "query_string_template":
        resource["query_string_template"],
        "thumbUri":
        resource["thumbUri"] if 'thumbUri' in resource else None,
        "encrypted":
        encrypted,
        "drm_scheme":
        drm_scheme,
        "protection_url":
        server_url.replace(DEVICE_ID_KEY, DEVICE_ID) if encrypted else None,
        'subtitles':
        subtitles
    }

    control.log(result)

    return result
Example #59
0
    def onAction(self, action):
        try:
            if action in self.selection_actions:
                focus_id = self.getFocusId()
                if focus_id == 2050:  # listItems
                    position = self.get_position(self.window_id)
                    chosen_listitem = self.item_list[position]
                    trakt = chosen_listitem.getProperty('dg.trakt')
                    if chosen_listitem.getProperty('dg.isSelected') == 'true':
                        chosen_listitem.setProperty('dg.isSelected', '')
                        if trakt in self.selected_items:
                            self.selected_items.remove(trakt)
                    else:
                        chosen_listitem.setProperty('dg.isSelected', 'true')
                        self.selected_items.append(trakt)
                elif focus_id == 2051:  # OK Button
                    self.close()
                elif focus_id == 2052:  # Cancel Button
                    self.selected_items = None
                    self.close()
                elif focus_id == 2053:  # Select All Button
                    for item in self.item_list:
                        item.setProperty('dg.isSelected', 'true')
                elif focus_id == 2045:  # Stop Trailer Playback Button
                    self.execute_code('PlayerControl(Stop)')
                    sleep(500)
                    self.setFocusId(self.window_id)

            elif action in self.context_actions:
                cm = []
                chosen_listitem = self.item_list[self.get_position(
                    self.window_id)]
                media_type = chosen_listitem.getProperty('dg.media_type')
                source_trailer = chosen_listitem.getProperty('dg.trailer')
                if not source_trailer:
                    from resources.lib.modules import trailer
                    if media_type == 'show':
                        source_trailer = trailer.Trailer().worker(
                            'show',
                            chosen_listitem.getProperty('dg.tvshowtitle'),
                            chosen_listitem.getProperty('dg.year'), None,
                            chosen_listitem.getProperty('dg.imdb'))
                    else:
                        source_trailer = trailer.Trailer().worker(
                            'movie', chosen_listitem.getProperty('dg.title'),
                            chosen_listitem.getProperty('dg.year'), None,
                            chosen_listitem.getProperty('dg.imdb'))
                if source_trailer:
                    cm += [('[B]Play Trailer[/B]', 'playTrailer')]
                if media_type == 'show':
                    cm += [('[B]Browse Series[/B]', 'browseSeries')]

                chosen_cm_item = dialog.contextmenu([i[0] for i in cm])
                if chosen_cm_item == -1: return
                cm_action = cm[chosen_cm_item][1]

                if cm_action == 'playTrailer':
                    self.execute_code('PlayMedia(%s, 1)' % source_trailer)
                    total_sleep = 0
                    while True:
                        sleep(500)
                        total_sleep += 500
                        self.hasVideo = condVisibility('Player.HasVideo')
                        if self.hasVideo or total_sleep >= 10000: break
                    if self.hasVideo:
                        self.setFocusId(2045)
                        while (condVisibility('Player.HasVideo')
                               and not monitor.abortRequested()):
                            self.setProgressBar()
                            sleep(1000)
                        self.hasVideo = False
                        self.progressBarReset()
                        self.setFocusId(self.window_id)
                    else:
                        self.setFocusId(self.window_id)

                if cm_action == 'browseSeries':
                    systvshowtitle = quote_plus(
                        chosen_listitem.getProperty('dg.tvshowtitle'))
                    year = chosen_listitem.getProperty('dg.year')
                    imdb = chosen_listitem.getProperty('dg.imdb')
                    tmdb = chosen_listitem.getProperty('dg.tmdb')
                    tvdb = chosen_listitem.getProperty('dg.tvdb')
                    from resources.lib.modules.control import lang
                    if not yesnoDialog(lang(32182), '', ''): return
                    self.chosen_hide, self.chosen_unhide = None, None
                    self.close()
                    sysart = quote_plus(chosen_listitem.getProperty('dg.art'))
                    self.execute_code(
                        'ActivateWindow(Videos,plugin://plugin.video.dg/?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tmdb=%s&tvdb=%s&art=%s,return)'
                        % (systvshowtitle, year, imdb, tmdb, tvdb, sysart))

            elif action in self.closing_actions:
                self.selected_items = None
                if self.hasVideo: self.execute_code('PlayerControl(Stop)')
                else: self.close()
        except:
            from resources.lib.modules import log_utils
            log_utils.error()
            self.close()
Example #60
0
def manager(name, imdb, tvdb, content):
    try:
        post = {
            "movies": [{
                "ids": {
                    "imdb": imdb
                }
            }]
        } if content == 'movie' else {
            "shows": [{
                "ids": {
                    "tvdb": tvdb
                }
            }]
        }
        items = [(control.lang(32516).encode('utf-8'), '/sync/collection')]
        items += [(control.lang(32517).encode('utf-8'),
                   '/sync/collection/remove')]
        items += [(control.lang(32518).encode('utf-8'), '/sync/watchlist')]
        items += [(control.lang(32519).encode('utf-8'),
                   '/sync/watchlist/remove')]
        items += [(control.lang(32520).encode('utf-8'),
                   '/users/me/lists/%s/items')]
        result = getTraktAsJson('/users/me/lists')
        lists = [(i['name'], i['ids']['slug']) for i in result]
        lists = [lists[i // 2] for i in range(len(lists) * 2)]
        for i in range(0, len(lists), 2):
            lists[i] = ((control.lang(32521) % lists[i][0]).encode('utf-8'),
                        '/users/me/lists/%s/items' % lists[i][1])
        for i in range(1, len(lists), 2):
            lists[i] = ((control.lang(32522) % lists[i][0]).encode('utf-8'),
                        '/users/me/lists/%s/items/remove' % lists[i][1])
        items += lists
        select = control.selectDialog([i[0] for i in items],
                                      control.lang(32070).encode('utf-8'))
        if select == -1:
            return
        elif select == 4:
            t = control.lang(32520).encode('utf-8')
            k = control.keyboard('', t)
            k.doModal()
            new = k.getText() if k.isConfirmed() else None
            if (new == None or new == ''):
                return
            result = __getTrakt('/users/me/lists',
                                post={
                                    "name": new,
                                    "privacy": "private"
                                })[0]
            try:
                slug = utils.json_loads_as_str(result)['ids']['slug']
            except:
                return control.infoDialog(control.lang(32070).encode('utf-8'),
                                          heading=str(name),
                                          sound=True,
                                          icon='ERROR')
            result = __getTrakt(items[select][1] % slug, post=post)[0]
        else:
            result = __getTrakt(items[select][1], post=post)[0]
        icon = control.infoLabel(
            'ListItem.Icon') if not result == None else 'ERROR'
        control.infoDialog(control.lang(32070).encode('utf-8'),
                           heading=str(name),
                           sound=True,
                           icon=icon)
    except:
        return