def reset(self, currentTime, totalTime, name, year='0'): try: if not control.setting('bookmarks') == 'true': raise Exception() timeInSeconds = str(currentTime) ok = int(currentTime) > 180 and (currentTime / totalTime) <= .92 idFile = hashlib.md5() for i in name: idFile.update(str(i)) for i in year: idFile.update(str(i)) idFile = str(idFile.hexdigest()) control.makeFile(control.dataPath) dbcon = database.connect(control.bookmarksFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS bookmark (" "idFile TEXT, " "timeInSeconds TEXT, " "UNIQUE(idFile)" ");") dbcur.execute("DELETE FROM bookmark WHERE idFile = '%s'" % idFile) if ok: dbcur.execute("INSERT INTO bookmark Values (?, ?)", (idFile, timeInSeconds)) dbcon.commit() except: pass
def log(msg, level=LOGDEBUG): req_level = level # override message level to force logging when addon logging turned on if control.setting('addon_debug') == 'true' and level == LOGDEBUG: level = LOGNOTICE try: if isinstance(msg, unicode): msg = '%s (ENCODED)' % (msg.encode('utf-8')) xbmc.log('[%s] %s' % (name, msg), level) except Exception as e: try: xbmc.log('Logging Failure: %s' % (e), level) except: pass # just give up
def get(self, name, year='0'): try: offset = '0' if not control.setting('bookmarks') == 'true': raise Exception() idFile = hashlib.md5() for i in name: idFile.update(str(i)) for i in year: idFile.update(str(i)) idFile = str(idFile.hexdigest()) dbcon = database.connect(control.bookmarksFile) dbcur = dbcon.cursor() dbcur.execute("SELECT * FROM bookmark WHERE idFile = '%s'" % idFile) match = dbcur.fetchone() self.offset = str(match[1]) dbcon.commit() if self.offset == '0': raise Exception() minutes, seconds = divmod(float(self.offset), 60) hours, minutes = divmod(minutes, 60) label = '%02d:%02d:%02d' % (hours, minutes, seconds) label = (control.lang(32502) % label).encode('utf-8') try: yes = control.dialog.contextmenu([ label, control.lang(32501).encode('utf-8'), ]) except: yes = control.yesnoDialog(label, '', '', str(name), control.lang(32503).encode('utf-8'), control.lang(32501).encode('utf-8')) if yes: self.offset = '0' return self.offset except: return offset
def sourcesFilter(self): provider = control.setting('hosts.sort.provider') quality = control.setting('hosts.quality') if quality == '': quality = '0' captcha = control.setting('hosts.captcha') random.shuffle(self.sources) if provider == 'true': self.sources = sorted(self.sources, key=lambda k: k['provider']) local = [i for i in self.sources if 'local' in i and i['local'] == True] self.sources = [i for i in self.sources if not i in local] filter = [] filter += [i for i in self.sources if i['direct'] == True] filter += [i for i in self.sources if i['direct'] == False] self.sources = filter filter = [] for d in self.debridDict: filter += [dict(i.items() + [('debrid', d)]) for i in self.sources if i['source'].lower() in self.debridDict[d]] filter += [i for i in self.sources if not i['source'].lower() in self.hostprDict and i['debridonly'] == False] self.sources = filter filter = [] filter += local if quality in ['0']: filter += [i for i in self.sources if i['quality'] == '4K' and 'debrid' in i] if quality in ['0', '1']: filter += [i for i in self.sources if i['quality'] == '1440p' and 'debrid' in i] if quality in ['0', '1', '2']: filter += [i for i in self.sources if i['quality'] == '1080p' and 'debrid' in i] if quality in ['0', '1', '2', '3']: filter += [i for i in self.sources if i['quality'] == 'HD' and 'debrid' in i] if quality in ['0']: filter += [i for i in self.sources if i['quality'] == '4K' and not 'debrid' in i and 'memberonly' in i] if quality in ['0', '1']: filter += [i for i in self.sources if i['quality'] == '1440p' and not 'debrid' in i and 'memberonly' in i] if quality in ['0', '1', '2']: filter += [i for i in self.sources if i['quality'] == '1080p' and not 'debrid' in i and 'memberonly' in i] if quality in ['0', '1', '2', '3']: filter += [i for i in self.sources if i['quality'] == 'HD' and not 'debrid' in i and 'memberonly' in i] if quality in ['0']: filter += [i for i in self.sources if i['quality'] == '4K' and not 'debrid' in i and not 'memberonly' in i] if quality in ['0', '1']: filter += [i for i in self.sources if i['quality'] == '1440p' and not 'debrid' in i and not 'memberonly' in i] if quality in ['0', '1', '2']: filter += [i for i in self.sources if i['quality'] == '1080p' and not 'debrid' in i and not 'memberonly' in i] if quality in ['0', '1', '2', '3']: filter += [i for i in self.sources if i['quality'] == 'HD' and not 'debrid' in i and not 'memberonly' in i] #filter += [i for i in self.sources if i['quality'] == 'SD'] #if len(filter) < 10: filter += [i for i in self.sources if i['quality'] == 'SCR'] #if len(filter) < 10: filter += [i for i in self.sources if i['quality'] == 'CAM'] filter += [i for i in self.sources if i['quality'] in ['SD', 'SCR', 'CAM']] self.sources = filter if not captcha == 'true': filter = [i for i in self.sources if i['source'].lower() in self.hostcapDict and not 'debrid' in i] self.sources = [i for i in self.sources if not i in filter] filter = [i for i in self.sources if i['source'].lower() in self.hostblockDict and not 'debrid' in i] self.sources = [i for i in self.sources if not i in filter] multi = [i['language'] for i in self.sources] multi = [x for y,x in enumerate(multi) if x not in multi[:y]] multi = True if len(multi) > 1 else False if multi == True: self.sources = [i for i in self.sources if not i['language'] == 'en'] + [i for i in self.sources if i['language'] == 'en'] self.sources = self.sources[:2000] for i in range(len(self.sources)): u = self.sources[i]['url'] p = self.sources[i]['provider'] q = self.sources[i]['quality'] s = self.sources[i]['source'] s = s.rsplit('.', 1)[0] l = self.sources[i]['language'] try: f = (' | '.join(['[I]%s [/I]' % info.strip() for info in self.sources[i]['info'].split('|')])) except: f = '' try: d = self.sources[i]['debrid'] except: d = self.sources[i]['debrid'] = '' if not d == '': label = '%02d | [B]%s[/B] | ' % (int(i+1), d) #if not d == '': label = '%02d | [B]%s[/B] | [B]%s[/B] | ' % (int(i+1), p, d) else: label = '%02d | [B]%s[/B] | ' % (int(i+1), p) if multi == True and not l == 'en': label += '[B]%s[/B] | ' % l if q in ['4K', '1440p', '1080p', 'HD']: label += '%s | %s | [B][I]%s [/I][/B]' % (s, f, q) elif q == 'SD': label += '%s | %s' % (s, f) else: label += '%s | %s | [I]%s [/I]' % (s, 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) self.sources[i]['label'] = label.upper() return self.sources
# # Dovresti aver ricevuto una copia della GNU General Public License # insieme a Stefano Thegroove 360. In caso contrario, vedi <http://www.gnu.org/licenses/>. # ------------------------------------------------- ----------- # Client for Stefano Thegroove 360 #------------------------------------------------------------ import re,os,sys,urllib,urllib2,urlparse,time,threading from resources.lib.stemodules import control from resources.lib.stemodules import cache import pyxbmct.addonwindow as pyxbmct downloadPath = control.setting('downloadPath') property = control.addonInfo('id') + '.downloader' def downloader1(): thumb = control.addonThumb() ; fanart = control.addonFanart() status = control.window.getProperty(property + '.status') if not downloadPath == '': item = control.item('[COLOR FF00b8ff]ESLPORA IL TUO DISPOSITIVO[/COLOR]', iconImage=thumb, thumbnailImage=thumb) item.addContextMenuItems([], replaceItems=True) item.setProperty('fanart_image', fanart) control.addItem(handle=int(sys.argv[1]), url=downloadPath, listitem=item, isFolder=True)
def get(self, name, imdb, season, episode): try: if not control.setting('subtitles') == 'true': raise Exception() langDict = { 'Afrikaans': 'afr', 'Albanian': 'alb', 'Arabic': 'ara', 'Armenian': 'arm', 'Basque': 'baq', 'Bengali': 'ben', 'Bosnian': 'bos', 'Breton': 'bre', 'Bulgarian': 'bul', 'Burmese': 'bur', 'Catalan': 'cat', 'Chinese': 'chi', 'Croatian': 'hrv', 'Czech': 'cze', 'Danish': 'dan', 'Dutch': 'dut', 'English': 'eng', 'Esperanto': 'epo', 'Estonian': 'est', 'Finnish': 'fin', 'French': 'fre', 'Galician': 'glg', 'Georgian': 'geo', 'German': 'ger', 'Greek': 'ell', 'Hebrew': 'heb', 'Hindi': 'hin', 'Hungarian': 'hun', 'Icelandic': 'ice', 'Indonesian': 'ind', 'Italian': 'ita', 'Japanese': 'jpn', 'Kazakh': 'kaz', 'Khmer': 'khm', 'Korean': 'kor', 'Latvian': 'lav', 'Lithuanian': 'lit', 'Luxembourgish': 'ltz', 'Macedonian': 'mac', 'Malay': 'may', 'Malayalam': 'mal', 'Manipuri': 'mni', 'Mongolian': 'mon', 'Montenegrin': 'mne', 'Norwegian': 'nor', 'Occitan': 'oci', 'Persian': 'per', 'Polish': 'pol', 'Portuguese': 'por,pob', 'Portuguese(Brazil)': 'pob,por', 'Romanian': 'rum', 'Russian': 'rus', 'Serbian': 'scc', 'Sinhalese': 'sin', 'Slovak': 'slo', 'Slovenian': 'slv', 'Spanish': 'spa', 'Swahili': 'swa', 'Swedish': 'swe', 'Syriac': 'syr', 'Tagalog': 'tgl', 'Tamil': 'tam', 'Telugu': 'tel', 'Thai': 'tha', 'Turkish': 'tur', 'Ukrainian': 'ukr', 'Urdu': 'urd' } codePageDict = { 'ara': 'cp1256', 'ar': 'cp1256', 'ell': 'cp1253', 'el': 'cp1253', 'heb': 'cp1255', 'he': 'cp1255', 'tur': 'cp1254', 'tr': 'cp1254', 'rus': 'cp1251', 'ru': 'cp1251' } quality = [ 'bluray', 'hdrip', 'brrip', 'bdrip', 'dvdrip', 'webrip', 'hdtv' ] langs = [] try: try: langs = langDict[control.setting( 'subtitles.lang.1')].split(',') except: langs.append(langDict[control.setting('subtitles.lang.1')]) except: pass try: try: langs = langs + langDict[control.setting( 'subtitles.lang.2')].split(',') except: langs.append(langDict[control.setting('subtitles.lang.2')]) except: pass try: subLang = xbmc.Player().getSubtitles() except: subLang = '' if subLang == langs[0]: raise Exception() server = xmlrpclib.Server('http://api.opensubtitles.org/xml-rpc', verbose=0) token = server.LogIn('', '', 'en', 'XBMC_Subtitles_v1')['token'] sublanguageid = ','.join(langs) imdbid = re.sub('[^0-9]', '', imdb) if not (season == None or episode == None): result = server.SearchSubtitles(token, [{ 'sublanguageid': sublanguageid, 'imdbid': imdbid, 'season': season, 'episode': episode }])['data'] fmt = ['hdtv'] else: result = server.SearchSubtitles(token, [{ 'sublanguageid': sublanguageid, 'imdbid': imdbid }])['data'] try: vidPath = xbmc.Player().getPlayingFile() except: vidPath = '' fmt = re.split('\.|\(|\)|\[|\]|\s|\-', vidPath) fmt = [i.lower() for i in fmt] fmt = [i for i in fmt if i in quality] filter = [] result = [i for i in result if i['SubSumCD'] == '1'] for lang in langs: filter += [ i for i in result if i['SubLanguageID'] == lang and any( x in i['MovieReleaseName'].lower() for x in fmt) ] filter += [ i for i in result if i['SubLanguageID'] == lang and any( x in i['MovieReleaseName'].lower() for x in quality) ] filter += [i for i in result if i['SubLanguageID'] == lang] try: lang = xbmc.convertLanguage(filter[0]['SubLanguageID'], xbmc.ISO_639_1) except: lang = filter[0]['SubLanguageID'] content = [ filter[0]['IDSubtitleFile'], ] content = server.DownloadSubtitles(token, content) content = base64.b64decode(content['data'][0]['data']) content = str( zlib.decompressobj(16 + zlib.MAX_WBITS).decompress(content)) subtitle = xbmc.translatePath('special://temp/') subtitle = os.path.join(subtitle, 'TemporarySubs.%s.srt' % lang) codepage = codePageDict.get(lang, '') if codepage and control.setting('subtitles.utf') == 'true': try: content_encoded = codecs.decode(content, codepage) content = codecs.encode(content_encoded, 'utf-8') except: pass file = control.openFile(subtitle, 'w') file.write(str(content)) file.close() xbmc.sleep(1000) xbmc.Player().setSubtitles(subtitle) except: pass