def search_new(self): # need fix for when context menu returns here brings keyboard input back up t = control.lang(32010) k = control.keyboard('', t) k.doModal() q = k.getText() if k.isConfirmed() else None if not q: return try: from sqlite3 import dbapi2 as database except ImportError: from pysqlite2 import dbapi2 as database try: dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("INSERT INTO movies VALUES (?,?)", (None, q)) # dbcur.execute("INSERT INTO movies VALUES (?,?)", (None, py_tools.ensure_text(q))) # ensure_text?, search of BRÜNO not saved to db in 18? dbcur.connection.commit() except: log_utils.error() finally: dbcur.close() ; dbcon.close() url = self.search_link + quote_plus(q) if control.getKodiVersion() >= 18: self.get(url) else: url = '%s?action=moviePage&url=%s' % (argv[0], quote_plus(url)) control.execute('Container.Update(%s)' % url)
def search_new(self): control.hide() t = control.lang(32010) k = control.keyboard('', t) k.doModal() q = k.getText() if k.isConfirmed() else None if not q: return try: from sqlite3 import dbapi2 as database except: from pysqlite2 import dbapi2 as database try: dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("INSERT INTO furk VALUES (?,?)", (None, q)) dbcur.connection.commit() except: log_utils.error() finally: dbcur.close() dbcon.close() url = quote_plus(q) if control.getKodiVersion() >= 18: self.furk_meta_search(url) else: url = '%s?action=furkMetaSearch&url=%s' % (sys.argv[0], quote_plus(url)) control.execute('Container.Update(%s)' % url)
def onPlayBackStarted(self): if int(control.getKodiVersion()) < 18: control.execute('Dialog.Close(all,true)') if control.setting( 'bookmarks' ) == 'true' and not self.offset == '0' and self.isPlayingVideo(): if control.setting('bookmarks.auto') == 'true': self.seekTime(float(self.offset)) else: if control.setting( 'rersume.source' ) == '1' and trakt.getTraktCredentialsInfo() == True: yes = control.dialog.contextmenu([ "Resume (Trakt)", control.lang(32501).encode('utf-8'), ]) if yes == 0: self.seekTime(float(self.offset)) else: 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') yes = control.dialog.contextmenu([ label, control.lang(32501).encode('utf-8'), ]) if yes == 0: self.seekTime(float(self.offset)) subtitles().get(self.name, self.imdb, self.season, self.episode) self.idleForPlayback() else: self.onAVStarted()
def onPlayBackStarted(self): if int(control.getKodiVersion()) < 18: control.execute('Dialog.Close(all,true)') if control.setting('bookmarks') == 'true' and not self.offset == '0' and self.isPlayingVideo(): if control.setting('bookmarks.auto') == 'true': self.seekTime(float(self.offset)) else: self.pause() minutes, seconds = divmod(float(self.offset), 60); hours, minutes = divmod(minutes, 60) label = '%02d:%02d:%02d' % (hours, minutes, seconds) label = (six.ensure_str(control.lang2(12022).format(label))) if control.setting('rersume.source') == '1' and trakt.getTraktCredentialsInfo() == True: yes = control.yesnoDialog(label + '[CR] (Trakt scrobble)', heading=control.lang2(13404)) else: yes = control.yesnoDialog(label, heading=six.ensure_str(control.lang2(13404))) if yes: self.seekTime(float(self.offset)) self.pause() subtitles().get(self.name, self.imdb, self.season, self.episode) self.idleForPlayback() else: self.onAVStarted()
def set_reuselanguageinvoker(): if control.getKodiVersion() < 18: return control.notification(message=32116) try: addon_xml = control.joinPath(control.addonPath('plugin.video.venom'), 'addon.xml') tree = ET.parse(addon_xml) root = tree.getroot() for item in root.iter('reuselanguageinvoker'): current_value = str(item.text) if current_value: new_value = 'true' if current_value == 'false' else 'false' if not control.yesnoDialog(control.lang(33018) % (current_value, new_value), '', ''): return control.openSettings(query='12.6') if new_value == 'true': if not control.yesnoDialog(control.lang(33019), '', ''): return item.text = new_value hash_start = gen_file_hash(addon_xml) tree.write(addon_xml) hash_end = gen_file_hash(addon_xml) if hash_start != hash_end: control.setSetting('reuse.languageinvoker', new_value) control.okDialog(message='%s\n%s' % (control.lang(33017) % new_value, control.lang(33020))) else: return control.okDialog(message=33021) current_profile = control.infoLabel('system.profilename') control.execute('LoadProfile(%s)' % current_profile) except: log_utils.error()
def onPlayBackStarted(self): if int(control.getKodiVersion()) < 18: control.execute('Dialog.Close(all,true)') if not self.offset == '0': self.seekTime(float(self.offset)) subtitles().get(self.name, self.imdb, self.season, self.episode) self.idleForPlayback() else: self.onAVStarted()
def get_tv(self, tmdb, status): try: if not tmdb or tmdb == '0': return control.infoDialog('No ID found') sysaddon = sys.argv[0] cache_dur = 720 if status in ['Ended', 'Canceled'] else 96 url = self.tmdb_tv_credits % tmdb r = cache.get(client.request, cache_dur, url) r = utils.json_loads_as_str(r) c = r['cast'][:50] ids = [str(i['id']) for i in c] names = [i['name'] for i in c] items = [] for person in c: role = person['roles'][0]['character'] name = '%s [I](as %s)[/I]' % (person['name'], role) if role else person['name'] if control.getKodiVersion() >= 17: icon = self.tm_img_link % person['profile_path'] if person[ 'profile_path'] else self.fallback_img item = control.item(label=name) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon}) items.append(item) else: items.append(name) select = control.selectDialog(items, heading='Actors:', useDetails=True) if select == -1: return c_id = ids[select] c_name = names[select] choose = control.selectDialog( ['TV Shows appeared in', 'Movies appeared in', 'Biography'], heading=c_name) if choose == -1: return elif choose == 0: control.execute( 'Container.Update(%s?action=tvshows&url=%s)' % (sysaddon, urllib_parse.quote_plus(self.tmdb_tvpeople_link % c_id))) elif choose == 1: control.execute('Container.Update(%s?action=movies&url=%s)' % (sysaddon, urllib_parse.quote_plus( self.tmdb_moviepeople_link % c_id))) elif choose == 2: self.bio_txt(c_id) except: log_utils.log('get_tv credits', 1) return
def run(self): if control.getKodiVersion() < 18: return xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck Service Starting...', 2) try: import xml.etree.ElementTree as ET addon_xml = control.joinPath( control.addonPath('plugin.video.venom'), 'addon.xml') tree = ET.parse(addon_xml) root = tree.getroot() current_addon_setting = control.addon( 'plugin.video.venom').getSetting('reuse.languageinvoker') try: current_xml_setting = [ str(i.text) for i in root.iter('reuselanguageinvoker') ][0] except: return xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck failed to get settings.xml value', 2) if current_addon_setting == '': current_addon_setting = 'true' control.setSetting('reuse.languageinvoker', current_addon_setting) if current_xml_setting == current_addon_setting: return xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck Service Finished', 2) control.okDialog(message='%s\n%s' % (control.lang(33023), control.lang(33020))) for item in root.iter('reuselanguageinvoker'): item.text = current_addon_setting hash_start = control.gen_file_hash(addon_xml) tree.write(addon_xml) hash_end = control.gen_file_hash(addon_xml) xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck Service Finished', 2) if hash_start != hash_end: current_profile = control.infoLabel('system.profilename') control.execute('LoadProfile(%s)' % current_profile) else: control.okDialog(title='default', message=33022) return except: log_utils.error() pass
def get_video_database_path(): database_path = control.absPath( control.joinPath( control.dataPath, '..', '..', 'Database', )) kodi_version = control.getKodiVersion() if kodi_version == 17: database_path = control.joinPath(database_path, 'MyVideos107.db') elif kodi_version == 18: database_path = control.joinPath(database_path, 'MyVideos116.db') elif kodi_version == 19: database_path = control.joinPath(database_path, 'MyVideos119.db') return database_path
def get_video_database_path(): database_path = control.absPath( control.joinPath( control.dataPath, '..', '..', 'Database', )) # doesn't work with mysql # path_db = 'special://profile/Database/%s' % db_name kodi_version = control.getKodiVersion() if kodi_version == 17: database_path = control.joinPath(database_path, 'MyVideos107.db') elif kodi_version == 18: database_path = control.joinPath(database_path, 'MyVideos116.db') elif kodi_version == 19: database_path = control.joinPath(database_path, 'MyVideos119.db') return database_path
def search(self, url): try: apiLang = control.apiLanguage().get('youtube', 'en') if apiLang != 'en': url += '&relevanceLanguage=%s' % apiLang r = cache.get(client.request, 24, url) result = utils.json_loads_as_str(r) json_items = result['items'] ids = [i['id']['videoId'] for i in json_items] if not ids: return if self.mode == '1': vids = [] for i in json_items: name = client.replaceHTMLCodes(i['snippet']['title']) if control.getKodiVersion() >= 17: icon = i['snippet']['thumbnails']['default']['url'] li = control.item(label=name) li.setArt({ 'icon': icon, 'thumb': icon, 'poster': icon }) vids.append(li) else: vids.append(name) select = control.selectDialog(vids, control.lang(32121) % 'YouTube', useDetails=True) if select == -1: return 'canceled' vid_id = ids[select] url = self.yt_plugin_url % vid_id return url for vid_id in ids: url = resolve(vid_id) if url: return url return except: return
def run(self): if control.getKodiVersion() < 18: return try: import xml.etree.ElementTree as ET addon_dir = control.transPath( control.addon('plugin.video.venom').getAddonInfo('path')) addon_xml = control.joinPath(addon_dir, 'addon.xml') tree = ET.parse(addon_xml) root = tree.getroot() current_addon_setting = control.addon( 'plugin.video.venom').getSetting('reuse.languageinvoker') if current_addon_setting == '': return try: current_xml_setting = [ str(i.text) for i in root.iter('reuselanguageinvoker') ][0] except: return if current_xml_setting == current_addon_setting: return if not control.yesnoDialog( '[B]Reuse Language Invoker[/B] SETTING/XML mismatch.\nRestore correct status(RECOMMENDED)?', '', ''): return for item in root.iter('reuselanguageinvoker'): item.text = current_addon_setting hash_start = control.gen_file_hash(addon_xml) tree.write(addon_xml) hash_end = control.gen_file_hash(addon_xml) if hash_start != hash_end: control.okDialog( 'Kodi must close and be restarted for the change to take effect.' ) else: control.okDialog('Venom', 'Error setting correct value.') return except: log_utils.error() pass
def get_items(self, imdb, name): try: link = self.imdb_link + imdb r = cache.get(client.request, 24, link) items = utils.json_loads_as_str(r) listItems = items['playlists'][imdb]['listItems'] videoMetadata = items['videoMetadata'] vids_list = [] for item in listItems: try: desc = item.get('description') or '' videoId = item['videoId'] metadata = videoMetadata[videoId] title = metadata['title'] icon = metadata['smallSlate']['url2x'] related_to = metadata.get('primaryConst') or imdb if (not related_to == imdb) and (not name.lower() in ' '.join( (title, desc)).lower()): continue videoUrl = [i['videoUrl'] for i in metadata['encodings'] if i['definition'] == '720p'] + \ [i['videoUrl'] for i in metadata['encodings'] if i['definition'] == '1080p'] + \ [i['videoUrl'] for i in metadata['encodings'] if i['definition'] in ['480p', '360p', 'SD']] if not videoUrl: continue vids_list.append({ 'title': title, 'icon': icon, 'description': desc, 'video': videoUrl[0] }) except: pass if not vids_list: return vids_list = [ v for v in vids_list if 'trailer' in v['title'].lower() ] + [v for v in vids_list if 'trailer' not in v['title'].lower()] if self.mode == '1': vids = [] for v in vids_list: if control.getKodiVersion() >= 17: li = control.item(label=v['title']) li.setArt({ 'icon': v['icon'], 'thumb': v['icon'], 'poster': v['icon'] }) vids.append(li) else: vids.append(v['title']) select = control.selectDialog(vids, control.lang(32121) % 'IMDb', useDetails=True) if select == -1: return 'canceled' return vids_list[select] return vids_list[0] except: log_utils.log('IMDb_trailer get_items fail', 1) return
def channelDirectory(self, items): if items == None or len(items) == 0: return #control.idle() ; sys.exit() sysaddon = sys.argv[0] syshandle = int(sys.argv[1]) addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart = control.addonFanart() traktCredentials = trakt.getTraktCredentialsInfo() kodiVersion = control.getKodiVersion() isPlayable = True if not 'plugin' in control.infoLabel('Container.PluginName') else False indicators = playcount.getMovieIndicators(refresh=True) if action == 'movies' else playcount.getMovieIndicators() if self.trailer_source == '0': trailerAction = 'tmdb_trailer' elif self.trailer_source == '1': trailerAction = 'yt_trailer' else: trailerAction = 'imdb_trailer' playbackMenu = control.lang(32063) if control.setting('hosts.mode') == '2' else control.lang(32064) watchedMenu = control.lang(32068) if trakt.getTraktIndicatorsInfo() == True else control.lang(32066) unwatchedMenu = control.lang(32069) if trakt.getTraktIndicatorsInfo() == True else control.lang(32067) queueMenu = control.lang(32065) traktManagerMenu = control.lang(32070) nextMenu = control.lang(32053) addToLibrary = control.lang(32551) clearProviders = control.lang(32081) findSimilar = control.lang(32100) infoMenu = control.lang(32101) for i in items: try: imdb, tmdb, title, year = i['imdb'], i['tmdb'], i['originaltitle'], i['year'] label = i['label'] if 'label' in i and not i['label'] == '0' else title label = '%s (%s)' % (label, year) if 'channel' in i: label = '[B]%s[/B] : %s' % (i['channel'].upper(), label) status = i['status'] if 'status' in i else '0' sysname = urllib_parse.quote_plus('%s (%s)' % (title, year)) systitle = urllib_parse.quote_plus(title) meta = dict((k,v) for k, v in six.iteritems(i) if not v == '0') meta.update({'imdbnumber': imdb, 'code': tmdb}) meta.update({'mediatype': 'movie'}) meta.update({'trailer': '%s?action=%s&name=%s&tmdb=%s&imdb=%s' % (sysaddon, trailerAction, systitle, tmdb, imdb)}) if not 'duration' in i: meta.update({'duration': '120'}) elif i['duration'] == '0': meta.update({'duration': '120'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass if 'castwiththumb' in i and not i['castwiththumb'] == '0': meta.pop('cast', '0') poster = i['poster'] if 'poster' in i and not i['poster'] == '0' else addonPoster meta.update({'poster': poster}) sysmeta = urllib_parse.quote_plus(json.dumps(meta)) url = '%s?action=play&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % (sysaddon, systitle, year, imdb, sysmeta, self.systime) sysurl = urllib_parse.quote_plus(url) #path = '%s?action=play&title=%s&year=%s&imdb=%s' % (sysaddon, systitle, year, imdb) cm = [] cm.append((findSimilar, 'Container.Update(%s?action=movies&url=%s)' % (sysaddon, urllib_parse.quote_plus(self.related_link % tmdb)))) cm.append(('[I]Cast[/I]', 'RunPlugin(%s?action=moviecredits&tmdb=%s&status=%s)' % (sysaddon, tmdb, status))) cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) try: overlay = int(playcount.getMovieOverlay(indicators, imdb)) if overlay == 7: cm.append((unwatchedMenu, 'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=6)' % (sysaddon, imdb))) meta.update({'playcount': 1, 'overlay': 7}) else: cm.append((watchedMenu, 'RunPlugin(%s?action=moviePlaycount&imdb=%s&query=7)' % (sysaddon, imdb))) meta.update({'playcount': 0, 'overlay': 6}) except: pass if traktCredentials == True: cm.append((traktManagerMenu, 'RunPlugin(%s?action=traktManager&name=%s&imdb=%s&content=movie)' % (sysaddon, sysname, imdb))) cm.append((playbackMenu, 'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' % (sysaddon, sysurl, sysmeta))) if kodiVersion < 17: cm.append((infoMenu, 'Action(Info)')) cm.append((addToLibrary, 'RunPlugin(%s?action=movieToLibrary&name=%s&title=%s&year=%s&imdb=%s&tmdb=%s)' % (sysaddon, sysname, systitle, year, imdb, tmdb))) cm.append(('[I]Scrape Filterless[/I]', 'RunPlugin(%s?action=playUnfiltered&title=%s&year=%s&imdb=%s&meta=%s&t=%s)' % (sysaddon, systitle, year, imdb, sysmeta, self.systime))) cm.append((clearProviders, 'RunPlugin(%s?action=clearCacheProviders)' % sysaddon)) try: item = control.item(label=label, offscreen=True) except: item = control.item(label=label) art = {} art.update({'icon': poster, 'thumb': poster, 'poster': poster}) fanart = i['fanart'] if 'fanart' in i and not i['fanart'] == '0' else addonFanart if self.settingFanart == 'true': art.update({'fanart': fanart}) else: art.update({'fanart': addonFanart}) if 'banner' in i and not i['banner'] == '0': art.update({'banner': i['banner']}) else: art.update({'banner': addonBanner}) if 'clearlogo' in i and not i['clearlogo'] == '0': art.update({'clearlogo': i['clearlogo']}) if 'clearart' in i and not i['clearart'] == '0': art.update({'clearart': i['clearart']}) if 'landscape' in i and not i['landscape'] == '0': landscape = i['landscape'] else: landscape = fanart art.update({'landscape': landscape}) if 'discart' in i and not i['discart'] == '0': art.update({'discart': i['discart']}) item.setArt(art) item.addContextMenuItems(cm) if isPlayable: item.setProperty('IsPlayable', 'true') castwiththumb = i.get('castwiththumb') if castwiththumb and not castwiththumb == '0': if kodiVersion >= 18: item.setCast(castwiththumb) else: cast = [(p['name'], p['role']) for p in castwiththumb] meta.update({'cast': cast}) offset = bookmarks.get('movie', imdb, '', '', True) if float(offset) > 120: percentPlayed = int(float(offset) / float(meta['duration']) * 100) item.setProperty('resumetime', str(offset)) item.setProperty('percentplayed', str(percentPlayed)) item.setProperty('imdb_id', imdb) item.setProperty('tmdb_id', tmdb) try: item.setUniqueIDs({'imdb': imdb, 'tmdb': tmdb}) except: pass item.setInfo(type='Video', infoLabels = control.metadataClean(meta)) video_streaminfo = {'codec': 'h264'} item.addStreamInfo('video', video_streaminfo) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except: log_utils.log('channels_dir', 1) pass control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
import pstats import time from datetime import datetime import xbmc import six from resources.lib.modules import control LOGDEBUG = xbmc.LOGDEBUG LOGERROR = xbmc.LOGERROR LOGFATAL = xbmc.LOGFATAL LOGINFO = xbmc.LOGINFO LOGNONE = xbmc.LOGNONE LOGNOTICE = xbmc.LOGNOTICE if int( control.getKodiVersion()) < 19 else xbmc.LOGINFO LOGWARNING = xbmc.LOGWARNING name = control.addonInfo('name') DEBUGPREFIX = '[COLOR yellow][ Kpolyamass DEBUG ][/COLOR]' LOGPATH = control.transPath('special://logpath/') addonName = "Kpolyamass" def log(msg, level=LOGNOTICE): debug_enabled = control.setting('addon_debug') debug_log = control.setting('debug.location') print(DEBUGPREFIX + ' Debug Enabled?: ' + str(debug_enabled)) print(DEBUGPREFIX + ' Debug Log?: ' + str(debug_log))
'RunPlugin(%s?action=service_library)' % plugin ) # service_library contains control.monitor().waitForAbort() while loop every 6hrs class SyncTraktService: def run(self): control.log( '[ plugin.video.dg ] Trakt Sync Service Starting (sync check every 15min)...', LOGINFO) control.execute( 'RunPlugin(%s?action=service_syncTrakt)' % plugin ) # trakt.trakt_service_sync() contains control.monitor().waitForAbort() while loop every 15min try: kodiVersion = control.getKodiVersion(full=True) addonVersion = control.addon('plugin.video.dg').getAddonInfo('version') repoVersion = control.addon('repository.dg').getAddonInfo('version') fsVersion = control.addon('script.module.fenomscrapers').getAddonInfo( 'version') maVersion = control.addon('script.module.myaccounts').getAddonInfo( 'version') log_utils.log('######## CURRENT dg VERSIONS REPORT ########', level=log_utils.LOGINFO) log_utils.log('## Kodi Version: %s' % str(kodiVersion), level=log_utils.LOGINFO) log_utils.log('## python Version: %s' % str(control.pythonVersion), level=log_utils.LOGINFO) log_utils.log('## plugin.video.dg Version: %s' % str(addonVersion), level=log_utils.LOGINFO) log_utils.log('## repository.dg Version: %s' % str(repoVersion),
""" Venom Add-on """ from datetime import datetime import inspect import unicodedata import xbmc from resources.lib.modules import control from resources.lib.modules import py_tools # # only prints when venom logging set to "Debug" (LOGINFO ads to list if Leia(18)) LOGDEBUG = xbmc.LOGDEBUG #0 # ###--from here down methods print when Venom logging set to "Normal". LOGINFO = xbmc.LOGINFO #1 (doesn't print unless Venom logging set to "Debug" in Leia(18)) LOGNOTICE = xbmc.LOGNOTICE if control.getKodiVersion( ) < 19 else xbmc.LOGINFO #(2 in 18, deprecated in 19 use LOGINFO(1)) LOGWARNING = xbmc.LOGWARNING #(3 in 18, 2 in 19) LOGERROR = xbmc.LOGERROR #(4 in 18, 3 in 19) LOGSEVERE = xbmc.LOGSEVERE if control.getKodiVersion( ) < 19 else xbmc.LOGFATAL #(5 in 18, deprecated in 19 use LOGFATAL(4)) LOGFATAL = xbmc.LOGFATAL #(6 in 18, 4 in 19) LOGNONE = xbmc.LOGNONE #(7 in 18, 5 in 19)-not used but listed for int value if py_tools.isPY2: debug_list = [ 'DEBUG', 'INFO', 'NOTICE', 'WARNING', 'ERROR', 'SEVERE', 'FATAL' ] from io import open #py2 open() does not support encoding param else: debug_list = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL'] DEBUGPREFIX = '[COLOR red][ Venom: %s ][/COLOR]' LOGPATH = control.transPath('special://logpath/')
import os import traceback from datetime import datetime from kodi_six import xbmc import six from io import open from resources.lib.modules import control LOGDEBUG = xbmc.LOGDEBUG LOGINFO = xbmc.LOGINFO LOGNOTICE = xbmc.LOGNOTICE if control.getKodiVersion() < 19 else xbmc.LOGINFO LOGWARNING = xbmc.LOGWARNING LOGERROR = xbmc.LOGERROR LOGFATAL = xbmc.LOGFATAL LOGNONE = xbmc.LOGNONE name = control.addonInfo('name') version = control.addonInfo('version') DEBUGPREFIX = '[ Prophet DEBUG ]' LOGPATH = control.transPath('special://logpath/') log_file = os.path.join(LOGPATH, 'prophet.log') debug_enabled = control.setting('addon.debug') #debug_log = control.setting('debug.location') def log(msg, trace=0):
def clean_settings(): def _make_content(dict_object): if kodi_version >= 18: content = '<settings version="2">' for item in dict_object: if item['id'] in active_settings: if 'default' in item and 'value' in item: content += '\n <setting id="%s" default="%s">%s</setting>' % ( item['id'], item['default'], item['value']) elif 'default' in item: content += '\n <setting id="%s" default="%s"></setting>' % ( item['id'], item['default']) elif 'value' in item: content += '\n <setting id="%s">%s</setting>' % ( item['id'], item['value']) else: content += '\n <setting id="%s"></setting>' else: removed_settings.append(item) else: content = '<settings>' for item in dict_object: if item['id'] in active_settings: if 'value' in item: content += '\n <setting id="%s" value="%s" />' % ( item['id'], item['value']) else: content += '\n <setting id="%s" value="" />' % item[ 'id'] else: removed_settings.append(item) content += '\n</settings>' return content kodi_version = control.getKodiVersion() for addon_id in ('plugin.video.venom', 'script.module.fenomscrapers'): try: removed_settings = [] active_settings = [] current_user_settings = [] addon = control.addon(id=addon_id) addon_name = addon.getAddonInfo('name') addon_dir = control.transPath(addon.getAddonInfo('path')) profile_dir = control.transPath(addon.getAddonInfo('profile')) active_settings_xml = control.joinPath(addon_dir, 'resources', 'settings.xml') root = ET.parse(active_settings_xml).getroot() for item in root.findall('./category/setting'): setting_id = item.get('id') if setting_id: active_settings.append(setting_id) settings_xml = control.joinPath(profile_dir, 'settings.xml') root = ET.parse(settings_xml).getroot() for item in root: dict_item = {} setting_id = item.get('id') setting_default = item.get('default') if kodi_version >= 18: setting_value = item.text else: setting_value = item.get('value') dict_item['id'] = setting_id if setting_value: dict_item['value'] = setting_value if setting_default: dict_item['default'] = setting_default current_user_settings.append(dict_item) new_content = _make_content(current_user_settings) nfo_file = control.openFile(settings_xml, 'w') nfo_file.write(new_content) nfo_file.close() control.sleep(200) control.notification(title=addon_name, message=control.lang(32084).format( str(len(removed_settings)))) except: log_utils.error() control.notification(title=addon_name, message=32115)
''' import json import re import requests from resources.lib.modules import control from resources.lib.modules import log_utils from resources.lib.modules import workers try: from resolveurl.plugins.realdebrid import RealDebridResolver except: pass CLIENT_ID = 'X245A4XAIBGVM' USER_AGENT = 'ResolveURL for Kodi/%s' % control.getKodiVersion() rest_base_url = 'https://api.real-debrid.com/rest/1.0/' oauth_base_url = 'https://api.real-debrid.com/oauth/v2' unrestrict_link_path = 'unrestrict/link' device_endpoint_path = 'device/code' token_endpoint_path = 'token' authorize_endpoint_path = 'auth' credentials_endpoint_path = 'device/credentials' hosts_regexes_path = 'hosts/regex' hosts_domains_path = 'hosts/domains' add_magnet_path = 'torrents/addMagnet' torrents_info_path = 'torrents/info' select_files_path = 'torrents/selectFiles' torrents_delete_path = 'torrents/delete' check_cache_path = 'torrents/instantAvailability'
from hashlib import md5 from json import dumps as jsdumps, loads as jsloads from sys import argv, exit as sysexit try: from sqlite3 import dbapi2 as database except ImportError: from pysqlite2 import dbapi2 as database import xbmc from resources.lib.database import metacache from resources.lib.modules import control from resources.lib.modules import cleantitle from resources.lib.modules import log_utils from resources.lib.modules import playcount from resources.lib.modules import py_tools from resources.lib.modules import trakt LOGNOTICE = 2 if control.getKodiVersion( ) < 19 else 1 # (2 in 18, deprecated in 19 use LOGINFO(1)) = 2 if control.getKodiVersion() < 19 else 1 # (2 in 18, deprecated in 19 use LOGINFO(1)) class Player(xbmc.Player): def __init__(self): xbmc.Player.__init__(self) self.play_next_triggered = False self.media_type = None self.offset = '0' self.media_length = 0 self.current_time = 0 self.meta = {} self.playback_started = False self.scrobbled = False self.playback_resumed = False self.av_started = False
from io import open from resources.lib.modules import control LOGDEBUG = xbmc.LOGDEBUG # LOGINFO = xbmc.LOGINFO # LOGNOTICE = xbmc.LOGNOTICE if control.getKodiVersion() < 19 else xbmc.LOGINFO # LOGWARNING = xbmc.LOGWARNING # LOGERROR = xbmc.LOGERROR # LOGFATAL = xbmc.LOGFATAL # LOGNONE = xbmc.LOGNONE name = control.addonInfo('name') version = control.addonInfo('version') kodi_version = control.getKodiVersion(as_str=True) sys_platform = control._platform() DEBUGPREFIX = '[ TheOath {0} | {1} | {2} | DEBUG ]'.format( version, kodi_version, sys_platform) INFOPREFIX = '[ TheOath | INFO ]' LOGPATH = control.transPath('special://logpath/') log_file = os.path.join(LOGPATH, 'theoath.log') debug_enabled = control.setting('addon.debug') #debug_log = control.setting('debug.location') def log(msg, trace=0): #print(DEBUGPREFIX + ' Debug Enabled?: ' + six.ensure_str(debug_enabled)) #print(DEBUGPREFIX + ' Debug Log?: ' + six.ensure_str(debug_log))