Exemple #1
0
    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'
Exemple #2
0
    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()
Exemple #3
0
    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()
Exemple #4
0
    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'
Exemple #5
0
 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
Exemple #6
0
    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
Exemple #7
0
 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
Exemple #8
0
    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'
Exemple #9
0
    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
Exemple #10
0
 def get_setting(cals, key):
     return control.setting(key)
Exemple #11
0
    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
Exemple #12
0
    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'))
Exemple #13
0
    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']
            })
Exemple #14
0
    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]
            })
Exemple #15
0
    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
Exemple #16
0
    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
Exemple #17
0
    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
Exemple #18
0
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')
Exemple #19
0
    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'))
Exemple #20
0
 def __init__(self):
     self.index_provider = control.setting('idx_provider')
Exemple #21
0
    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]
            })