def __init__(self): self.list = [] self.languagesList = [('Hindi', 'hi'), ('Tamil', 'ta'), ('Telugu', 'te'), ('Marathi', 'mr'), ('Panjabi', 'pa'), ('Bengali', 'bn'), ('Gujarati', 'gu'), ('Malayalam', 'ml'), ('Kannada', 'kn')] self.imdb_link = 'http://www.imdb.com' self.tmdb_key = base64.urlsafe_b64decode( 'MTdmMjI3YmVjNTdkOTQ4OGJiYzgyNzYyZmMxNDQ0NmM=') self.datetime = (datetime.datetime.utcnow() - datetime.timedelta(hours=5)) self.systime = (self.datetime).strftime('%Y%m%d%H%M%S%f') self.imdb_user = control.setting('imdb_user').replace('ur', '') self.info_lang = control.setting('infoLang') or 'en' self.imdb_info_link = 'http://www.omdbapi.com/?i=%s&plot=full&r=json' self.trakt_info_link = 'http://api-v2launch.trakt.tv/movies/%s?extended=images' self.tm_art_link = 'http://api.themoviedb.org/3/movie/%s/images?api_key=%s' % ( '%s', self.tmdb_key) self.tm_info_link = 'http://api.themoviedb.org/3/movie/%s?api_key=%s&append_to_response=credits,images,trailers' % ( '%s', self.tmdb_key) self.tm_img_link = 'https://image.tmdb.org/t/p/w%s%s' self.search_link = 'http://www.imdb.com/search/title?sort=release_date,desc&title=%s' self.language_link = 'http://www.imdb.com/search/title?title_type=feature,tv_movie&num_votes=100,&production_status=released&languages=%s&count=40&start=1&sort=release_date,desc&start=1' self.featured_link = 'http://www.imdb.com/search/title?title_type=feature,tv_movie&languages=%s&num_votes=1000,&production_status=released&release_date=date[365],date[60]&sort=moviemeter,asc&count=40&start=1' self.popular_link = 'http://www.imdb.com/search/title?title_type=feature,tv_movie&languages=%s&num_votes=1000,&production_status=released&groups=top_1000&sort=moviemeter,asc&count=40&start=1' self.genre_link = 'http://www.imdb.com/search/title?title_type=feature,tv_movie&languages=%s&num_votes=100,&release_date=date[730],date[30]&genres=%s&sort=release_date,desc&count=40&start=1' self.year_link = 'http://www.imdb.com/search/title?title_type=feature,tv_movie&languages=%s&num_votes=100,&production_status=released&year=%s,%s&sort=release_date,desc&count=40&start=1'
def isRegistered(self): email = control.setting('email') if email == None or email == '': playCount = self.unRegPlay() if playCount <= 3: control.okDialog( control.lang(30519).encode('utf-8'), control.lang(30520).encode('utf-8')) else: control.okDialog( control.lang(30521).encode('utf-8'), control.lang(30522).encode('utf-8')) sys.exit() else: error = control.moderator() if error == 'Email not registred': playCount = self.unRegPlay() if playCount <= 3: control.okDialog( control.lang(30519).encode('utf-8'), control.lang(30520).encode('utf-8'), control.lang(30524).encode('utf-8')) else: control.okDialog( control.lang(30521).encode('utf-8'), control.lang(30522).encode('utf-8')) sys.exit()
def desiTV(self): listItems = [] provider = control.setting('tvshow.provider') if not provider == None: call = __import__('resources.lib.sources.%s' % provider, globals(), locals(), ['source'], -1).source() listItems = call.networks() else: from resources.lib.sources import desirulez listItems = desirulez.source().networks() listItems.sort() try: for item in listItems: self.addDirectoryItem( item['name'], '%s&provider=%s&url=%s' % (item['action'], item['provider'], item['url']), os.path.join(control.logoPath(), item['image']), 'DefaultMovies.png') except Exception as e: logger.error(e) self.endDirectory()
def __init__(self): self.list = [] self.datetime = (datetime.datetime.utcnow() - datetime.timedelta(hours=5)) self.systime = (self.datetime).strftime('%Y%m%d%H%M%S%f') self.info_lang = control.setting('infoLang') or 'en'
def alterSources(self, url, meta): try: if control.setting('host_select') == '2': url += '&select=1' else: url += '&select=2' control.execute('RunPlugin(%s)' % url) except: pass
def sourcesResolve(self, item): try: logger.debug('selected url : %s' % item['url'], __name__) logger.debug('selected item : %s' % item, __name__) u = url = item['url'] if url == None or url == False: raise Exception() direct = item['direct'] if not direct == True: logger.debug('Resolving [%s]' % url, __name__) try: allowDebrid = bool(control.setting('allow_debrid')) except: allowDebrid = False from resources.lib import resolvers u = resolvers.request(url, allowDebrid=allowDebrid) if 'plugin.video.f4mTester' in u: try: title = item['name'] title = urllib.quote_plus(title.encode('utf-8')) iconImage = item['poster'] except: pass u += '&name=%s&iconImage=%s' % (title, iconImage) logger.debug('Resolved [%s]' % u, __name__) if u == False: raise Exception() url = u try: ext = url.split('?')[0].split('&')[0].split('|')[0].rsplit( '.')[-1].replace('/', '').lower() except: ext = None if ext == 'rar': raise Exception() self.url = url return url except: self.url = None return
def getResolverList(self): try: import urlresolver resolverList = [] try: allowDebrid = bool(control.setting('allow_debrid')) except: allowDebrid = False try: resolverList = urlresolver.relevant_resolvers( order_matters=True, include_universal=allowDebrid) except: resolverList = urlresolver.plugnplay.man.implementors( urlresolver.UrlResolver) resolverList = [i for i in resolverList if not '*' in i.domains] except: resolverList = [] return resolverList
def __init__(self): self.list = [] self.tmdb_key = base64.urlsafe_b64decode( 'MTdmMjI3YmVjNTdkOTQ4OGJiYzgyNzYyZmMxNDQ0NmM=') self.tvdb_key = base64.urlsafe_b64decode('OUZDQkM2MjlEQzgyRjA4Qw==') self.datetime = (datetime.datetime.utcnow() - datetime.timedelta(hours=5)) self.info_lang = control.setting('infoLang') or 'en' self.tvdb_info_link = 'http://thetvdb.com/api/%s/series/%s/%s.xml' % ( self.tvdb_key, '%s', re.sub('bg', 'en', self.info_lang)) self.tvdb_search_link = 'http://thetvdb.com/api/GetSeries.php?seriesname=%s' self.tvdb_by_imdb = 'http://thetvdb.com/api/GetSeriesByRemoteID.php?imdbid=%s' self.imdb_by_query = 'http://www.omdbapi.com/?t=%s&y=%s' self.imdb_by_title = 'http://www.omdbapi.com/?t=%s' self.tvdb_image = 'http://thetvdb.com/banners/' self.burp_search_link = 'http://tv.burrp.com/search.html?q=%s'
def sourcesFilter(self): logger.debug('Calling sources.filter()', __name__) logger.debug('ORIGINAL SOURCE COUNT : %s' % len(self.srcs), __name__) for i in range(len(self.srcs)): self.srcs[i]['source'] = self.srcs[i]['source'].lower() self.srcs = sorted(self.srcs, key=lambda k: k['source']) originalSrcs = self.srcs quality = control.setting('playback_quality') if quality == '': quality = '0' #set content filter = [] try: filter += [i for i in self.srcs if i['content'] == 'live'] except: filter += [dict(i.items() + [('content', '')]) for i in self.srcs] self.srcs = filter filter = [] if debrid.status() == True: for d in self.debridDict: filter += [ dict(i.items() + [('debrid', d)]) for i in self.srcs if i['source'].lower() in self.debridDict[d] ] for host in self.hostDict: filter += [ i for i in self.srcs if i['source'] in host and not i['content'] == 'live' and 'debridonly' not in i and i['source'] not in self.hostprDict ] else: for host in self.hostDict: filter += [ i for i in self.srcs if i['source'] in host and not i['content'] == 'live' and 'debridonly' not in i ] filter += [ i for i in self.srcs if i['direct'] == True and not i['content'] == 'live' ] try: filter += [i for i in self.srcs if i['content'] == 'live'] except: pass self.srcs = filter logger.debug('FINAL SOURCE COUNT : %s' % len(self.srcs), __name__) random.shuffle(self.srcs) filter = [] if quality == '0': filter += [ i for i in self.srcs if i['quality'] == '1080p' and 'debrid' in i ] if quality == '0': filter += [ i for i in self.srcs if i['quality'] == '1080p' and not 'debrid' in i ] if quality == '0' or quality == '1': filter += [ i for i in self.srcs if i['quality'] == 'HD' and 'debrid' in i ] if quality == '0' or quality == '1': filter += [ i for i in self.srcs if i['quality'] == 'HD' and not 'debrid' in i ] filter += [ i for i in self.srcs if i['quality'] == 'SD' and not 'debrid' in i ] filter += [i for i in self.srcs if i['quality'] == 'SCR'] filter += [i for i in self.srcs if i['quality'] == 'CAM'] if len(filter) < 100: filter += [i for i in self.srcs if i['quality'] == ''] self.srcs = filter r = [ x for x in self.srcs + originalSrcs if x not in self.srcs or x not in originalSrcs ] logger.debug('Filtered Sources : %s' % r, __name__) for i in range(len(self.srcs)): s = self.srcs[i]['source'].lower() try: p = self.srcs[i]['provider'] except: p = self.srcs[i]['scraper'] p = re.sub('v\d*$', '', p) q = self.srcs[i]['quality'] try: f = (' | '.join([ '[I]%s [/I]' % info.strip() for info in self.srcs[i]['info'].split('|') ])) except: f = '' try: d = self.srcs[i]['debrid'] except: d = self.srcs[i]['debrid'] = '' if not d == '': label = '%02d | [I]%s[/I] | [B]%s[/B] | ' % (int(i + 1), d, p) else: label = '%02d | [B]%s[/B] | ' % (int(i + 1), p) if q in ['1080p', 'HD']: label += '%s | %s | [B][I]%s [/I][/B]' % (s.rsplit('.', 1)[0], f, q) #elif q == 'SD': label += '%s | %s' % (s.rsplit('.', 1)[0], f) else: label += '%s | %s | [I]%s [/I]' % (s.rsplit('.', 1)[0], f, q) label = label.replace('| 0 |', '|').replace(' | [I]0 [/I]', '') label = label.replace('[I]HEVC [/I]', 'HEVC') label = re.sub('\[I\]\s+\[/I\]', ' ', label) label = re.sub('\|\s+\|', '|', label) label = re.sub('\|(?:\s+|)$', '', label) pts = None try: pts = self.srcs[i]['parts'] except: pass if not pts == None and int(pts) > 1: label += ' [%s]' % pts self.srcs[i]['label'] = label.upper() return self.srcs
def get_setting(cals, key): return control.setting(key)
def playItem(self, content, title, source): try: self.isRegistered() control.resolve(syshandle, True, control.item(path='')) control.execute('Dialog.Close(okdialog)') next = [] prev = [] total = [] meta = control.window.getProperty(self.metaProperty) #meta = self.metaProperty meta = json.loads(meta) year = meta['year'] if 'year' in meta else None imdb = meta['imdb'] if 'imdb' in meta else None tvdb = meta['tvdb'] if 'tvdb' in meta else None for i in range(1, 10000): try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = dict(urlparse.parse_qsl(u.replace('?', ''))) if 'meta' in u: meta = u['meta'] u = json.loads(u['source'])[0] next.append(u) except: break for i in range(-10000, 0)[::-1]: try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = dict(urlparse.parse_qsl(u.replace('?', ''))) if 'meta' in u: meta = u['meta'] u = json.loads(u['source'])[0] prev.append(u) except: break items = json.loads(source) items = [i for i in items + next + prev][:40] self.progressDialog = control.progressDialog self.progressDialog.create(control.addonInfo('name'), '') self.progressDialog.update(0) block = None for i in range(len(items)): try: self.progressDialog.update( int((100 / float(len(items))) * i), str(items[i]['label']), str(' ')) if items[i]['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]) w.start() m = '' for x in range(3600): if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() k = control.condVisibility( 'Window.IsActive(virtualkeyboard)') if k: m += '1' m = m[-1] if (w.is_alive() == False or x > 30) and not k: break time.sleep(1.0) for x in range(3600): if m == '': break if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() if w.is_alive() == False: break time.sleep(1.0) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() try: self.progressDialog.close() except: pass control.sleep(200) if control.setting('playback_info') == 'true': control.infoDialog(items[i]['label']) player().run(content, title, self.url, year, imdb, tvdb, meta) return self.url except Exception as e: logger.error(e, __name__) pass try: self.progressDialog.close() except: pass raise Exception() except Exception as e: logger.error(e.message) control.infoDialog(control.lang(30501).encode('utf-8')) pass
def play(self, name, title, year, imdb, tvdb, season, episode, tvshowtitle, date, meta, url, select=None): try: if not control.infoLabel('Container.FolderPath').startswith( 'plugin://'): control.playlist.clear() control.resolve(syshandle, True, control.item(path='')) control.execute('Dialog.Close(okdialog)') if imdb == '0': imdb = '0000000' imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) content = 'movie' if tvshowtitle == None else 'episode' self.srcs = self.getSources(name, title, year, imdb, tvdb, season, episode, tvshowtitle, date, meta) items = self.sourcesFilter() if len(items) > 0: try: select = control.setting( 'host_select') if select == None else select except: pass if select == '1' and 'plugin' in control.infoLabel( 'Container.PluginName'): logger.debug('INSIDE select=1', __name__) control.window.clearProperty(self.itemProperty) control.window.setProperty(self.itemProperty, json.dumps(items)) control.window.clearProperty(self.metaProperty) control.window.setProperty(self.metaProperty, meta) control.sleep(200) return control.execute( 'Container.Update(%s?action=addItem&title=%s&content=%s)' % (sysaddon, urllib.quote_plus( title.encode('utf-8')), content)) elif select == '0' or select == '1': url = self.sourcesDialog(items) else: url = self.sourcesDirect(items) if url == None: raise Exception() if url == 'close://': return if control.setting('playback_info') == 'true': control.infoDialog(self.selectedSource, heading=name) control.sleep(200) player().run(content, name, url, year, imdb, tvdb, meta) return url except Exception as e: logger.error(e.message) control.infoDialog(control.lang(30501).encode('utf-8'))
def movieDirectory(self, items, lang=None): if items == None or len(items) == 0: control.infoDialog(control.lang(30518).encode('utf-8')) return indicators = playcount.getMovieIndicators() isPlayable = 'true' if not 'plugin' in control.infoLabel( 'Container.PluginName') else 'false' playbackMenu = control.lang(30204).encode('utf-8') if control.setting( 'host_select') == '2' else control.lang(30203).encode('utf-8') cacheToDisc = False if not action == 'movieSearch' else True addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting( 'fanart') for i in items: try: label = '%s (%s)' % (i['title'], i['year']) imdb, title, year, trailer = i['imdb'], i['title'], i[ 'year'], i.get('trailer') sysname = urllib.quote_plus('%s (%s)' % (title, year)) systitle = urllib.quote_plus(title) poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if poster == '0': poster = addonPoster if banner == '0' and poster == '0': banner = addonBanner elif banner == '0': banner = poster meta = dict((k, v) for k, v in i.iteritems() if not v == '0') meta.update({ 'trailer': '%s?action=trailer&name=%s&url=%s' % (sysaddon, sysname, trailer) }) if i['duration'] == '0': meta.update({'duration': '120'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=play&name=%s&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % ( sysaddon, sysname, systitle, year, imdb, sysmeta, self.systime) sysurl = urllib.quote_plus(url) cm = [] cm.append((playbackMenu, 'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' % (sysaddon, sysurl, sysmeta))) # AUTOPLAY cm.append((control.lang(30214).encode('utf-8'), 'RunPlugin(%s?action=trailer&name=%s&url=%s)' % (sysaddon, sysname, trailer))) # TRAILER cm.append((control.lang(30205).encode('utf-8'), 'Action(Info)')) # MOVIEINFORMATION cm.append((control.lang(30212).encode('utf-8'), 'RunPlugin(%s?action=addView&content=movies)' % sysaddon)) # SET MOVIES VIEW try: overlay = int(playcount.getMovieOverlay(indicators, imdb)) #logger.debug('imdb : %s Overlay : %s' % (imdb, overlay), __name__) if overlay == 7: cm.append((control.lang(30206).encode( 'utf-8' ), 'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=6)' % (sysaddon, imdb))) meta.update({'playcount': 1, 'overlay': 7}) else: cm.append((control.lang(30207).encode( 'utf-8' ), 'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=7)' % (sysaddon, imdb))) meta.update({'playcount': 0, 'overlay': 6}) except Exception as e: logger.error(e, __name__) pass item = control.item(label=label, iconImage=poster, thumbnailImage=poster) try: item.setArt({'poster': poster, 'banner': banner}) except: pass if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels=meta) item.setProperty('Video', 'true') item.setProperty('IsPlayable', isPlayable) item.addContextMenuItems(cm) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except Exception as e: logger.error(e, __name__) pass try: url = items[0]['next'] if url == '': raise Exception() url = '%s?action=movies&url=%s' % (sysaddon, urllib.quote_plus(url)) addonNext = control.addonNext() item = control.item(label=control.lang(30213).encode('utf-8'), iconImage=addonNext, thumbnailImage=addonNext) item.addContextMenuItems([]) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except Exception as e: logger.error(e, __name__) pass content = 'movies' control.content(syshandle, content) control.directory(syshandle, cacheToDisc=cacheToDisc) views.setView( content, { 'skin.confluence': control.viewMode['confluence']['thumbnails'], 'skin.estuary': control.viewMode['esturary']['list'] })
def episodeDirectory(self, items, provider=None, confViewMode='list', estViewMode='widelist'): if items == None or len(items) == 0: return isFolder = True if control.setting('host_select') == '1' else False isPlayable = 'true' if not 'plugin' in control.infoLabel( 'Container.PluginName') else 'false' playbackMenu = control.lang(30271).encode('utf-8') if control.setting( 'host_select') == '2' else control.lang(30270).encode('utf-8') cacheToDisc = False addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting( 'fanart') indicators = playcount.getTVShowIndicators(refresh=True) try: multi = [i['tvshowtitle'] for i in items] except Exception as e: logger.error(e) multi = [] multi = len([x for y, x in enumerate(multi) if x not in multi[:y]]) multi = True if multi > 1 else False sysaction = '' if items[0].get('action') == None else items[0].get( 'action') for i in items: try: try: if i['title'] == '0': label = '%sx%02d . %s %s' % (i['season'], int(i['episode']), 'Episode', i['episode']) elif i['season'] == '0': label = '%s' % (i['episode']) else: label = '%sx%02d . %s' % (i['season'], int( i['episode']), i['title']) except: label = i['title'] if multi == True: label = '%s - %s' % (i['tvshowtitle'], label) systitle = sysname = urllib.quote_plus( i['tvshowtitle'].encode('utf-8')) episodetitle, episodename = urllib.quote_plus( i['title'].encode('utf-8'), safe=':/'), urllib.quote_plus(i['name'].encode('utf-8'), safe=':/') syspremiered = urllib.quote_plus(i['premiered']) imdb, tvdb, year, season, episode = i['imdb'], i['tvdb'], i[ 'year'], i['season'], i['episode'] poster, banner, fanart, thumb = i['poster'], i['banner'], i[ 'fanart'], i['thumb'] if poster == '0': poster = addonPoster if banner == '0' and poster == '0': banner = addonBanner elif banner == '0': banner = poster if thumb == '0' and fanart == '0': thumb = addonFanart elif thumb == '0': thumb = fanart meta = dict((k, v) for k, v in i.iteritems() if not v == '0') meta.update({ 'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname) }) if i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=play&name=%s&title=%s&year=%s&imdb=%s&tvdb=%s&season=%s&episode=%s&tvshowtitle=%s&date=%s&meta=%s&t=%s' % ( sysaddon, episodename, episodetitle, year, imdb, tvdb, season, episode, systitle, syspremiered, sysmeta, self.systime) sysurl = urllib.quote_plus(url) if sysaction == 'episodes': url = '%s?action=episodes&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s&season=%s&episode=%s' % ( sysaddon, systitle, year, imdb, tvdb, season, episode) isFolder = True cacheToDisc = True cm = [] if isFolder == False: cm.append((control.lang(30261).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append( (control.lang(30272).encode('utf-8'), 'Action(Info)')) if multi == True: cm.append((control.lang(30274).encode( 'utf-8' ), 'ActivateWindow(Videos,%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s,return)' % (sysaddon, systitle, year, imdb, tvdb))) cm.append((playbackMenu, 'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' % (sysaddon, sysurl, sysmeta))) item = control.item(label=label, iconImage=thumb, thumbnailImage=thumb) try: item.setArt({ 'poster': poster, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner }) except: pass if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels=meta) item.setProperty('Video', 'true') item.setProperty('IsPlayable', isPlayable) item.setProperty('resumetime', str(0)) item.setProperty('totaltime', str(1)) item.addContextMenuItems(cm) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except Exception as e: logger.error(e) pass try: url = items[0]['next'] if url == '': raise Exception() url = '%s?action=episodes&tvshowtitle=%s&url=%s&provider=%s' % ( sysaddon, systitle, urllib.quote_plus(url), provider) addonNext = control.addonNext() item = control.item(label=control.lang(30213).encode('utf-8'), iconImage=addonNext, thumbnailImage=addonNext) item.addContextMenuItems([]) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass content = 'episodes' control.content(syshandle, content) control.directory(syshandle, cacheToDisc=cacheToDisc) views.setView( content, { 'skin.confluence': control.viewMode['confluence'][confViewMode], 'skin.estuary': control.viewMode['esturary'][estViewMode] })
def get_url(scraper, title, show_year, year, season, episode, imdb, tvdb, type, cache_location, maximum_age, check_url=False, debrid=False): cache_enabled = control.setting("cache_enabled") == 'true' try: dbcon = database.connect(cache_location) dbcur = dbcon.cursor() try: dbcur.execute("SELECT * FROM version") match = dbcur.fetchone() except: desiscrapers.clear_cache() dbcur.execute("CREATE TABLE version (" "version TEXT)") dbcur.execute("INSERT INTO version Values ('0.5.4')") dbcon.commit() dbcur.execute("CREATE TABLE IF NOT EXISTS rel_src (" "scraper TEXT, " "title Text, show_year TEXT, year TEXT, " "season TEXT, " "episode TEXT, " "imdb_id TEXT, " "urls TEXT, " "added TEXT, " "UNIQUE(scraper, title, year, season, episode)" ");") except: pass if cache_enabled: try: sources = [] dbcur.execute( "SELECT * FROM rel_src WHERE scraper = '%s' AND title = '%s' AND show_year= '%s' AND year = '%s' AND season = '%s' AND episode = '%s'" % (scraper.name, cleantitle.get(title).upper(), show_year, year, season, episode)) match = dbcur.fetchone() t1 = int(re.sub('[^0-9]', '', str(match[8]))) t2 = int(datetime.datetime.now().strftime("%Y%m%d%H%M")) update = abs(t2 - t1) > maximum_age if update == False: sources = json.loads(match[7]) return sources except: pass try: sources = [] if type == "movie": sources = scraper.scrape_movie(title, year, imdb, debrid=debrid) elif type == "episode": sources = scraper.scrape_episode(title, show_year, year, season, episode, imdb, tvdb, debrid=debrid) if sources == None: sources = [] else: if cache_enabled: dbcur.execute( "DELETE FROM rel_src WHERE scraper = '%s' AND title = '%s' AND show_year= '%s' AND year = '%s' AND season = '%s' AND episode = '%s'" % (scraper.name, cleantitle.get(title).upper(), show_year, year, season, episode)) dbcur.execute( "INSERT INTO rel_src Values (?, ?, ?, ?, ?, ?, ?, ?, ?)", (scraper.name, cleantitle.get(title).upper(), show_year, year, season, episode, imdb, json.dumps(sources), datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))) dbcon.commit() if check_url: noresolver = False try: import urlresolver except: try: import urlresolver9 as urlresolver except: noresolver = True new_sources = [] from common import check_playable for source in sources: if source["direct"]: check = check_playable(source["url"]) if check: new_sources.append(source) elif not noresolver: try: hmf = urlresolver.HostedMediaFile( url=source['url'], include_disabled=False, include_universal=False) if hmf.valid_url(): resolved_url = hmf.resolve() check = check_playable(resolved_url) if check: new_sources.append(source) except: pass else: new_sources.append(source) sources = new_sources return sources except: pass
def get_muscic_url(scraper, title, artist, cache_location, maximum_age, debrid=False): cache_enabled = control.setting("cache_enabled") == 'true' try: dbcon = database.connect(cache_location) dbcur = dbcon.cursor() try: dbcur.execute("SELECT * FROM version") match = dbcur.fetchone() except: desiscrapers.clear_cache() dbcur.execute("CREATE TABLE version (" "version TEXT)") dbcur.execute("INSERT INTO version Values ('0.5.4')") dbcon.commit() dbcur.execute("CREATE TABLE IF NOT EXISTS rel_music_src (" "scraper TEXT, " "title Text, " "artist TEXT, " "urls TEXT, " "added TEXT, " "UNIQUE(scraper, title, artist)" ");") except: pass if cache_enabled: try: sources = [] dbcur.execute( "SELECT * FROM rel_music_src WHERE scraper = '%s' AND title = '%s' AND artist = '%s'" % (scraper.name, cleantitle.get(title).upper(), artist.upper())) match = dbcur.fetchone() t1 = int(re.sub('[^0-9]', '', str(match[4]))) t2 = int(datetime.datetime.now().strftime("%Y%m%d%H%M")) update = abs(t2 - t1) > maximum_age if update == False: sources = json.loads(match[3]) return sources except: pass try: sources = scraper.scrape_music(title, artist, debrid=debrid) if sources == None: sources = [] else: if cache_enabled: dbcur.execute( "DELETE FROM rel_music_src WHERE scraper = '%s' AND title = '%s' AND artist = '%s'" % (scraper.name, cleantitle.get(title).upper(), artist.upper)) dbcur.execute( "INSERT INTO rel_music_src Values (?, ?, ?, ?, ?)", (scraper.name, cleantitle.get(title).upper(), artist.upper(), json.dumps(sources), datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))) dbcon.commit() return sources except: pass
def getSources(self, name, title, year, imdb, tvdb, season, episode, tvshowtitle, date, meta=None): content = 'movie' if tvshowtitle == None else 'episode' control.makeFile(control.dataPath) self.sourceFile = control.sourcescacheFile logger.debug('Content [%s]' % content, __name__) try: timeout = int(control.setting('sources_timeout_40')) except: timeout = 40 try: allowDebrid = bool(control.setting('allow_debrid')) except: allowDebrid = False import desiscrapers control.init('script.module.desiscrapers') totalScrapers = len( desiscrapers.relevant_scrapers(scraper_type=content)) if content == 'movie': title = cleantitle.normalize(title) links_scraper = desiscrapers.scrape_movie( title, year, imdb, timeout=timeout, enable_debrid=allowDebrid) elif content == 'episode': tvshowtitle = cleantitle.normalize(tvshowtitle) imdb = json.loads(meta)['url'] show_year = year tvshowtitle = tvshowtitle.replace('Season', '').replace('season', '') links_scraper = desiscrapers.scrape_episode( tvshowtitle, show_year, year, season, episode, imdb, tvdb, timeout=timeout, enable_debrid=allowDebrid) control.init('plugin.video.swadesi') control.idle() self.progressDialog = control.progressDialog self.progressDialog.create(control.addonInfo('name'), '') self.progressDialog.update(0) thread = workers.Thread(self.get_desi_sources, links_scraper, totalScrapers) thread.start() for i in range(0, timeout * 4): try: if xbmc.abortRequested: return sys.exit() try: if self.progressDialog.iscanceled(): break except: pass if not thread.is_alive(): break time.sleep(0.5) except: pass self.progressDialog.close() for i in range(0, len(self.srcs)): self.srcs[i].update({'content': content}) return self.srcs
import urlparse from aftershock.common import control, logger, views, analytics, cache, changelog sysaddon = sys.argv[0] syshandle = int(sys.argv[1]) artPath = control.artPath() addonFanart = control.addonFanart() try: action = dict(urlparse.parse_qsl(sys.argv[2].replace('?', '')))['action'] except: action = None imdbMode = False if control.setting('imdb_user') == '' else True class navigator: def __init__(self): self.index_provider = control.setting('idx_provider') def root(self): self.addDirectoryItem(30860, 'movieLangNavigator', 'movies.png', 'DefaultMovies.png') self.addDirectoryItem(30861, 'desiTVNavigator', 'tv-vod.png', 'DefaultMovies.png') self.addDirectoryItem(90116, 'tools', 'settings.png', 'DefaultMovies.png')
def addItem(self, title, content): try: control.playlist.clear() items = control.window.getProperty(self.itemProperty) items = json.loads(items) if items == []: raise Exception() meta = control.window.getProperty(self.metaProperty) meta = json.loads(meta) infoMenu = control.lang(30502).encode('utf-8') downloads = True if control.setting( 'downloads') == 'true' and not control.setting( 'movie.download.path') == '' else False #if 'tvshowtitle' in meta and 'season' in meta and 'episode' in meta: # name = '%s S%02dE%02d' % (title, int(meta['season']), int(meta['episode'])) #el if 'year' in meta: name = '%s (%s)' % (title, meta['year']) else: name = title systitle = urllib.quote_plus(title.encode('utf-8')) sysname = urllib.quote_plus(name.encode('utf-8')) poster = meta['poster'] if 'poster' in meta else '0' banner = meta['banner'] if 'banner' in meta else '0' thumb = meta['thumb'] if 'thumb' in meta else poster fanart = meta['fanart'] if 'fanart' in meta else '0' if poster == '0': poster = control.addonPoster() if banner == '0' and poster == '0': banner = control.addonBanner() elif banner == '0': banner = poster if thumb == '0' and fanart == '0': thumb = control.addonFanart() elif thumb == '0': thumb = fanart if control.setting('fanart') == 'true' and not fanart == '0': pass else: fanart = control.addonFanart() for i in range(len(items)): try: parts = int(items[i]['parts']) except: parts = 1 label = items[i]['label'] syssource = urllib.quote_plus(json.dumps([items[i]])) sysurl = '%s?action=playItem&title=%s&source=%s&content=%s' % ( sysaddon, systitle, syssource, content) item = control.item(label=label) cm = [] cm.append((control.lang(30504).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) if content != 'live': if downloads == True and parts <= 1: sysimage = urllib.quote_plus(poster.encode('utf-8')) cm.append((control.lang(30505).encode( 'utf-8' ), 'RunPlugin(%s?action=download&name=%s&image=%s&source=%s)' % (sysaddon, systitle, sysimage, syssource))) item.setArt({ 'icon': thumb, 'thumb': thumb, 'poster': poster, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner }) if not fanart == None: item.setProperty('Fanart_Image', fanart) item.addContextMenuItems(cm) item.setInfo(type='Video', infoLabels=meta) control.addItem(handle=syshandle, url=sysurl, listitem=item, isFolder=False) control.directory(syshandle, cacheToDisc=True) except Exception as e: logger.error(e.message) control.infoDialog(control.lang(30501).encode('utf-8'))
def __init__(self): self.index_provider = control.setting('idx_provider')
def tvshowDirectory(self, items, confViewMode='list', estViewMode='widelist'): if items == None or len(items) == 0: return isFolder = True if control.setting('host_select') == '1' else False addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting( 'fanart') for i in items: try: label = i['name'] systitle = sysname = urllib.quote_plus( i['title'].encode('utf-8'), safe=':/') imdb, tvdb, year = i['imdb'], i['tvdb'], i['year'] try: sysurl, sysprovider = urllib.quote_plus( i['url']), i['provider'] except: pass poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if poster == '0': poster = addonPoster if banner == '0' and poster == '0': banner = addonBanner elif banner == '0': banner = poster meta = dict((k, v) for k, v in i.iteritems() if not v == '0') meta.update({ 'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname) }) if i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass action = 'episodes' url = '%s?action=%s&provider=%s&url=%s&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % ( sysaddon, action, sysprovider, sysurl, systitle, year, imdb, tvdb) cm = [] if isFolder == False: cm.append((control.lang(30232).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append( (control.lang(30233).encode('utf-8'), 'Action(Info)')) cm.append((control.lang(30234).encode( 'utf-8' ), 'RunPlugin(%s?action=tvPlaycount&name=%s&year=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, year, imdb, tvdb))) cm.append((control.lang(30235).encode( 'utf-8' ), 'RunPlugin(%s?action=tvPlaycount&name=%s&year=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, year, imdb, tvdb))) cm.append((control.lang(30240).encode('utf-8'), 'RunPlugin(%s?action=addView&content=tvshows)' % sysaddon)) item = control.item(label=label, 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 settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels=meta) item.setProperty('Video', 'true') item.addContextMenuItems(cm) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except Exception as e: logger.error(e, __name__) pass content = 'tvshows' control.content(syshandle, content) control.directory(syshandle, cacheToDisc=True) views.setView( content, { 'skin.confluence': control.viewMode['confluence'][confViewMode], 'skin.estuary': control.viewMode['esturary'][estViewMode] })