Ejemplo n.º 1
0
def _cacheClear():
    try:
        data = database.Database(databaseName, connect=True)
        data._drop(databaseTable, commit=True)
        data._close()
    except:
        log_utils.error()
Ejemplo n.º 2
0
def _cacheProcess():
    data = database.Database(databaseName, connect=True)
    data._lock()
    _cacheCreate(data)
    data._unlock()
    try:
        while True:
            # Execute the select and delete as atomic operations.
            data._lock()
            result = data._selectSingle(
                'SELECT id, time, link, data FROM %s ORDER BY time ASC LIMIT 1;'
                % (databaseTable))
            if not result: raise Exception()
            data._delete('DELETE FROM %s WHERE id IS %d;' %
                         (databaseTable, result[0]),
                         commit=True)
            data._unlock()
            result = getTrakt(url=result[2],
                              post=jsloads(result[3]) if result[3] else None,
                              cache=True,
                              check=False,
                              timestamp=result[1])
    except:
        log_utils.error()
        data._unlock()
    data._close()
Ejemplo n.º 3
0
def _cacheClear():
    try:
        data = database.Database(databaseName, connect=True)
        data._drop(databaseTable, commit=True)
        data._close()
    except:
        import traceback
        traceback.print_exc()
Ejemplo n.º 4
0
def _cache(url, post=None, timestamp=None):
    try:
        # Only cache the requests that change something on the Trakt account.
        # Trakt uses JSON post data to set things and only uses GET parameters to retrieve things.
        if not post: return None
        data = database.Database(databaseName, connect=True)
        _cacheCreate(data)
        # post parameter already jsdumps from getTrakt.
        post = ('"%s"' % post.replace('"', '""').replace("'", "''")
                ) if post else data._null()

        if not timestamp:
            timestamp = int(time.time())

        data._insert('''
			INSERT INTO %s (time, link, data)
			VALUES (%d, "%s", %s);
			''' % (databaseTable, timestamp, url, post),
                     commit=True)
        data._close()
    except:
        log_utils.error()
Ejemplo n.º 5
0
	def failureClear(self):
		database.Database(name = self.DatabaseName)._drop(self.DatabaseFailure)
Ejemplo n.º 6
0
	def _failureInitialize(self):
		data = database.Database(name = self.DatabaseName)
		data._create('CREATE TABLE IF NOT EXISTS %s (id TEXT, count INTEGER, time INTEGER, UNIQUE(id));' % self.DatabaseFailure)
		return data
Ejemplo n.º 7
0
    def _update(self, notifications=None):
        try:
            self._createDirectory(self._location(tools.Media.TypeMovie))
            self._createDirectory(self._location(tools.Media.TypeShow))
            self._createDirectory(self._location(tools.Media.TypeDocumentary))
            self._createDirectory(self._location(tools.Media.TypeShort))
        except:
            pass

        if notifications == None:
            notifications = tools.Settings.getInteger(
                'library.updates.shows.notifications')
            notificationDuration = 10000000000 if notifications == 2 else 3000
            notifications = notifications > 0
        interface.Loader.hide()

        try:
            items = []
            season, episode = [], []
            show = [
                tools.File.joinPath(self.mLocation, i)
                for i in tools.File.listDirectory(self.mLocation)[0]
            ]
            for s in show:
                try:
                    season += [
                        tools.File.joinPath(s, i)
                        for i in tools.File.listDirectory(s)[0]
                    ]
                except:
                    pass
            for s in season:
                try:
                    episode.append([
                        tools.File.joinPath(s, i)
                        for i in tools.File.listDirectory(s)[1]
                        if i.endswith('.strm')
                    ][-1])
                except:
                    pass

            for file in episode:
                try:
                    data = tools.File.readNow(file).encode('utf-8')
                    if not data.startswith(sys.argv[0]): raise Exception()

                    params = dict(urlparse.parse_qsl(data.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:
            library = tools.System.executeJson(
                '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties" : ["imdbnumber", "title", "year"]}, "id": 1}'
            )
            library = unicode(library, 'utf-8', errors='ignore')
            library = tools.Converter.jsonFrom(library)['result']['tvshows']
        except:
            return

        if notifications and self._ready():
            interface.Dialog.notification(
                title=33244,
                message=35181,
                icon=interface.Dialog.IconInformation,
                time=notificationDuration)
            self.mDialog = True

        try:
            base = database.Database(name=self.DatabaseName)
            base._create(
                'CREATE TABLE IF NOT EXISTS shows (id TEXT, items TEXT, UNIQUE(id));'
            )
        except:
            return

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

        count = 0

        for item in items:
            if tools.System.aborted(): return sys.exit()
            it = None

            try:
                fetch = base._selectSingle(
                    'SELECT * FROM shows WHERE id = "%s";' % item['tvdb'])
                it = tools.Converter.jsonFrom(
                    tools.Converter.base64From(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'],
                    'seasoncount':
                    i['seasoncount'] if 'seasoncount' in i else None
                } for i in it]

                if status == 'continuing': raise Exception()

                json = tools.Converter.base64To(tools.Converter.jsonTo(it))
                base._insert('INSERT INTO shows VALUES ("%s", "%s");' %
                             (item['tvdb'], json))
            except:
                pass

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

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

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

            dateCurrent = int((datetime.datetime.utcnow() -
                               datetime.timedelta(hours=6)).strftime('%Y%m%d'))

            for i in it:
                try:
                    if tools.System.aborted(): return sys.exit()

                    try:
                        premiered = i['premiered']
                    except:
                        premiered = None
                    if not premiered or premiered == '' or premiered == '0':
                        premiered = None

                    #if (premiered and int(re.sub('[^0-9]', '', str(premiered))) > dateCurrent) or (not premiered and not self.mUnaired):
                    #	continue

                    self._televisionFiles(i)
                    count += 1
                except:
                    tools.Logger.error()

        if notifications and self.mDialog:
            interface.Dialog.notification(title=33244,
                                          message=35182,
                                          icon=interface.Dialog.IconSuccess)
        if self.mUpdate and not self._libraryBusy() and count > 0:
            self._libraryUpdate()