def authenticate(self, username, password): if not self.is_authenticated() and (username and password): control.log('username/password set. trying to authenticate') self.credentials = self._authenticate(username, password) if self.is_authenticated(): control.log('successfully authenticated') self._save_credentials() else: control.log('wrong username or password') message = '[%s] %s' % (self.__class__.__name__, control.lang(32003)) control.infoDialog(message, icon='ERROR') return None elif self.is_authenticated(): control.log('already authenticated') else: control.log_warning('no username set to authenticate') message = 'Missing user credentials' control.infoDialog(message, icon='ERROR') control.openSettings() return None control.log(repr(self.credentials)) return self.credentials
def toggleAll(setting, query=None, sourceList=None): from resources.lib.sources import getAllHosters sourceList = getAllHosters() if not sourceList else sourceList for i in sourceList: source_setting = 'provider.' + i control.setSetting(source_setting, setting) control.openSettings(query)
def root(self): popup = control.setting('popup.date') print ("POPUP DATE", popup) validAccount = debrid.realdebrid().accountInfo() if not validAccount: from resources.lib.modules import deviceAuthDialog authDialog = deviceAuthDialog.DonationDialog('firstrun_RD.xml', xbmcaddon.Addon().getAddonInfo('path'), code='', url='') authDialog.doModal() del authDialog control.openSettings('0.0') sys.exit() elif (popup == '0' or ((int(timeNow) - int(popup)) > 30) or popup == None): from resources.lib.modules import deviceAuthDialog authDialog = deviceAuthDialog.DonationDialog('donations.xml', xbmcaddon.Addon().getAddonInfo('path'), code='', url='') authDialog.doModal() del authDialog control.setSetting(id='popup.date', value=timeNow) #self.addDirectoryItem('TEST', 'testItem', 'movies.png', 'DefaultMovies.png') self.addDirectoryItem('Cloud Browser', 'rdNavigator', 'cloud.png', 'DefaultAddonProgram.png') #self.addDirectoryItem('Lists', 'browse_nav', 'cloud.png', 'DefaultAddonProgram.png') #self.addDirectoryItem('Download Manager', 'download_manager', 'cloud.png', 'DefaultAddonProgram.png') #self.addDirectoryItem('RSS Manager', 'rss_manager_nav', 'cloud.png', 'DefaultAddonProgram.png') self.addDirectoryItem(32008, 'toolNavigator', 'settings.png', 'DefaultAddonProgram.png') self.addDirectoryItem('[I]Support and Donations[/I]', 'donations', 'support.png', 'DefaultAddonProgram.png', isFolder=False) self.endDirectory()
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog( control.lang(32511).encode('utf-8'), control.lang(32512).encode('utf-8'), '', 'Trakt'): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.user2', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() result = getTraktAsJson('/oauth/device/code', {'client_id': V2_API_KEY}) verification_url = (control.lang(32513) % result['verification_url']).encode('utf-8') user_code = (control.lang(32514) % result['user_code']).encode('utf-8') expires_in = int(result['expires_in']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('Trakt', verification_url, user_code) for i in range(0, expires_in): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() r = getTraktAsJson( '/oauth/device/token', { 'client_id': V2_API_KEY, 'client_secret': CLIENT_SECRET, 'code': device_code }) if 'access_token' in r: break except: pass try: progressDialog.close() except: pass token, refresh = r['access_token'], r['refresh_token'] headers = { 'Content-Type': 'application/json', 'trakt-api-key': V2_API_KEY, 'trakt-api-version': 2, 'Authorization': 'Bearer %s' % token } result = client.request(urlparse.urljoin(BASE_URL, '/users/me'), headers=headers) result = utils.json_loads_as_str(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.user2', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('7.6')
def checkinfo(): validAccount = premiumize.validAccount() firstSetup = control.setting('first.setup') popup = control.setting('popup.date') if not validAccount: from resources.lib.modules import deviceAuthDialog authDialog = deviceAuthDialog.DonationDialog( 'firstrun.xml', xbmcaddon.Addon().getAddonInfo('path'), code='', url='') authDialog.doModal() del authDialog control.openSettings('0.0') elif (popup == '0' or ((int(timeNow) - int(popup)) > 30)): from resources.lib.modules import deviceAuthDialog authDialog = deviceAuthDialog.DonationDialog( 'donations.xml', xbmcaddon.Addon().getAddonInfo('path'), code='', url='') authDialog.doModal() del authDialog control.setSetting(id='popup.date', value=timeNow)
def rdAuthorize(): try: CLIENT_ID = 'X245A4XAIBGVM' USER_AGENT = 'Kodi Exodus/3.0' if not '' in credentials()['realdebrid'].values(): if control.yesnoDialog(control.lang(30411).encode('utf-8'), control.lang(30413).encode('utf-8'), '', 'RealDebrid', control.lang(30415).encode('utf-8'), control.lang(30414).encode('utf-8')): control.setSetting(id='realdebrid.id', value='') control.setSetting(id='realdebrid.secret', value='') control.setSetting(id='realdebrid.token', value='') control.setSetting(id='realdebrid.refresh', value='') control.setSetting(id='realdebrid.auth', value='') raise Exception() headers = {'User-Agent': USER_AGENT} url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % (CLIENT_ID) result = client.request(url, headers=headers) result = json.loads(result) verification_url = (control.lang(30416) + '[COLOR skyblue]%s[/COLOR]' % result['verification_url']).encode('utf-8') user_code = (control.lang(30417) + '[COLOR skyblue]%s[/COLOR]' % result['user_code']).encode('utf-8') device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('RealDebrid', verification_url, user_code) for i in range(0, 3600): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() url = 'https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s' % (CLIENT_ID, device_code) result = client.request(url, headers=headers, error=True) result = json.loads(result) if 'client_secret' in result: break except: pass try: progressDialog.close() except: pass id, secret = result['client_id'], result['client_secret'] url = 'https://api.real-debrid.com/oauth/v2/token' post = urllib.urlencode({'client_id': id, 'client_secret': secret, 'code': device_code, 'grant_type': 'http://oauth.net/grant_type/device/1.0'}) result = client.request(url, post=post, headers=headers) result = json.loads(result) token, refresh = result['access_token'], result['refresh_token'] control.setSetting(id='realdebrid.id', value=id) control.setSetting(id='realdebrid.secret', value=secret) control.setSetting(id='realdebrid.token', value=token) control.setSetting(id='realdebrid.refresh', value=refresh) control.setSetting(id='realdebrid.auth', value='*************') raise Exception() except: control.openSettings('3.13')
def rdAuthorize(): try: CLIENT_ID = 'X245A4XAIBGVM' USER_AGENT = 'Kodi zen/3.0' if not '' in credentials()['realdebrid'].values(): if control.yesnoDialog(control.lang(32531).encode('utf-8'), control.lang(32532).encode('utf-8'), '', 'RealDebrid'): control.setSetting(id='realdebrid.id', value='') control.setSetting(id='realdebrid.secret', value='') control.setSetting(id='realdebrid.token', value='') control.setSetting(id='realdebrid.refresh', value='') control.setSetting(id='realdebrid.auth', value='') raise Exception() headers = {'User-Agent': USER_AGENT} url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % (CLIENT_ID) result = client.request(url, headers=headers) result = json.loads(result) verification_url = (control.lang(32533) % result['verification_url']).encode('utf-8') user_code = (control.lang(32534) % result['user_code']).encode('utf-8') device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('RealDebrid', verification_url, user_code) for i in range(0, 3600): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() url = 'https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s' % (CLIENT_ID, device_code) result = client.request(url, headers=headers, error=True) result = json.loads(result) if 'client_secret' in result: break except: pass try: progressDialog.close() except: pass id, secret = result['client_id'], result['client_secret'] url = 'https://api.real-debrid.com/oauth/v2/token' post = urllib.urlencode({'client_id': id, 'client_secret': secret, 'code': device_code, 'grant_type': 'http://oauth.net/grant_type/device/1.0'}) result = client.request(url, post=post, headers=headers) result = json.loads(result) token, refresh = result['access_token'], result['refresh_token'] control.setSetting(id='realdebrid.id', value=id) control.setSetting(id='realdebrid.secret', value=secret) control.setSetting(id='realdebrid.token', value=token) control.setSetting(id='realdebrid.refresh', value=refresh) control.setSetting(id='realdebrid.auth', value='*************') raise Exception() except: control.openSettings('3.16')
def colorChoicePI(): selectList = [] for i in colorChart: selectList.append(colorStringPI(i, i)) color = control.selectDialog(selectList) if color == -1: return control.setSetting('prem.identify', colorChart[color]) control.openSettings(query='2.3')
def colorChoiceUI(): selectList = [] for i in colorChart: selectList.append(colorStringUI(i, i)) color = control.selectDialog(selectList) if color == -1: return control.setSetting('unaired.identify', colorChart[color]) control.openSettings(query='0.16')
def accountCheck(self): if traktCredentials == False: control.idle() control.infoDialog(control.lang(32042).encode('utf-8'), sound=True, icon='WARNING') control.openSettings('2.12') sys.exit()
def onClick(self, control): logger.debug('onClick: %s' % (control)) if control == LATER_BUTTON: import webbrowser link = 'http://real-debrid.com/?id=915002' webbrowser.open(link, autoraise=True, new=2) if control == NEVER_BUTTON: from resources.lib.modules import control control.openSettings('0.0') if control in [LATER_BUTTON, NEVER_BUTTON]: self.close()
def onClick(self, control): logger.debug('onClick: %s' % (control)) if control == LATER_BUTTON: import webbrowser link = 'https://www.premiumize.me/ref/947927388' webbrowser.open(link, autoraise = True, new = 2) if control == NEVER_BUTTON: from resources.lib.modules import control as AddonControl AddonControl.openSettings('0.0') if control in [LATER_BUTTON, NEVER_BUTTON]: self.close()
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(30479).encode('utf-8'), control.lang(30481).encode('utf-8'), '', 'Trakt', control.lang(30483).encode('utf-8'), control.lang(30482).encode('utf-8')): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() result = getTrakt('/oauth/device/code', {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa'}) result = json.loads(result) verification_url = (control.lang(30416) + '[COLOR skyblue]%s[/COLOR]' % result['verification_url']).encode('utf-8') user_code = (control.lang(30417) + '[COLOR skyblue]%s[/COLOR]' % result['user_code']).encode('utf-8') expires_in = int(result['expires_in']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('Trakt', verification_url, user_code) for i in range(0, expires_in): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() r = getTrakt('/oauth/device/token', {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'client_secret': '90a1840447a1e39d350023263902fe7010338d19789e6260f18df56a8b07a68a', 'code': device_code}) r = json.loads(r) if 'access_token' in r: break except: pass try: progressDialog.close() except: pass token, refresh = r['access_token'], r['refresh_token'] headers = {'Content-Type': 'application/json', 'trakt-api-key': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'trakt-api-version': '2', 'Authorization': 'Bearer %s' % token} result = client.request('http://api-v2launch.trakt.tv/users/me', headers=headers) result = json.loads(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('3.1')
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(32511).encode('utf-8'), control.lang(32512).encode('utf-8'), '', 'Trakt'): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() result = getTrakt('/oauth/device/code', {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa'}) result = json.loads(result) verification_url = (control.lang(32513) % result['verification_url']).encode('utf-8') user_code = (control.lang(32514) % result['user_code']).encode('utf-8') expires_in = int(result['expires_in']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('Trakt', verification_url, user_code) for i in range(0, expires_in): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() r = getTrakt('/oauth/device/token', {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'client_secret': '90a1840447a1e39d350023263902fe7010338d19789e6260f18df56a8b07a68a', 'code': device_code}) r = json.loads(r) if 'access_token' in r: break except: pass try: progressDialog.close() except: pass token, refresh = r['access_token'], r['refresh_token'] headers = {'Content-Type': 'application/json', 'trakt-api-key': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'trakt-api-version': '2', 'Authorization': 'Bearer %s' % token} result = client.request('http://api-v2launch.trakt.tv/users/me', headers=headers) result = json.loads(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('3.1')
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog('An account already exists.', 'Do you want to reset?', '', 'Trakt'): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() result = getTrakt('/oauth/device/code', {'client_id': '3b76e1b99fa4a5b27f63e04307754751514d88916195ea8abc1c48eeef68f0d9'}) result = json.loads(result) verification_url = ('1) Visit : [COLOR skyblue]%s[/COLOR]' % result['verification_url']).encode('utf-8') user_code = ('2) When prompted enter : [COLOR skyblue]%s[/COLOR]' % result['user_code']).encode('utf-8') expires_in = int(result['expires_in']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('Trakt', verification_url, user_code) for i in range(0, expires_in): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() r = getTrakt('/oauth/device/token', {'client_id': '3b76e1b99fa4a5b27f63e04307754751514d88916195ea8abc1c48eeef68f0d9', 'client_secret': 'b0be7e72b647bcb44f2846b29729028e5d75fa710b91812027ae79cc48456a16', 'code': device_code}) r = json.loads(r) if 'access_token' in r: break except: pass try: progressDialog.close() except: pass token, refresh = r['access_token'], r['refresh_token'] headers = {'Content-Type': 'application/json', 'trakt-api-key': '3b76e1b99fa4a5b27f63e04307754751514d88916195ea8abc1c48eeef68f0d9', 'trakt-api-version': '2', 'Authorization': 'Bearer %s' % token} result = client.request('http://api-v2launch.trakt.tv/users/me', headers=headers) result = json.loads(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('0.1')
def restoreFolder(): names = [] links = [] zipFolder = control.setting('restore.path') if zipFolder == '' or zipFolder == None: control.infoDialog('Please Setup a Zip Files Location first') control.openSettings(query='2.0') return for zipFile in os.listdir(zipFolder): if zipFile.endswith(".zip"): url = xbmc.translatePath(os.path.join(zipFolder, zipFile)) names.append(zipFile) links.append(url) select = control.selectDialog(names) if select != -1: restore(links[select])
def backup(mode='full'): KODIV = control.get_Kodi_Version() backupdir = control.setting('download.path') if backupdir == '' or backupdir == None: control.infoDialog('Please Setup a Path for Downlads first') control.openSettings(query='1.3') return if mode == 'full': defaultName = "kodi_backup" BACKUPDATA = HOME FIX_SPECIAL() elif mode == 'userdata': defaultName = "kodi_userdata" BACKUPDATA = USERDATA else: return if os.path.exists(BACKUPDATA): if not backupdir == '': name = control.get_keyboard(default=defaultName, heading='Name your Backup') today = datetime.now().strftime('%Y%m%d%H%M') today = re.sub('[^0-9]', '', str(today)) zipDATE = "_%s.zip" % today name = re.sub(' ', '_', name) + zipDATE backup_zip = control.transPath(os.path.join(backupdir, name)) exclude_database = [ 'Textures13.db', '.DS_Store', 'advancedsettings.xml', 'Thumbs.db', '.gitignore' ] try: maintenance.clearCache(mode='silent') #maintenance.deleteThumbnails(mode='silent') #maintenance.purgePackages(mode='silent') except: pass exclude_dirs = [ '.git', '.idea', 'packages', 'backupdir', 'cache', 'system', 'Thumbnails', 'peripheral_data', 'temp', 'My_Builds', 'keymaps', 'cdm' ] CreateZip(BACKUPDATA, backup_zip, 'Creating Backup', 'Backing up files', exclude_dirs, exclude_database) dialog.ok(AddonTitle, 'Backup complete', '', '') else: dialog.ok( AddonTitle, 'No backup location found. Please setup your Backup location', '', '')
def root(self): from resources.lib.api import premiumize validAccount = premiumize.validAccount() if not validAccount: from resources.lib.modules import deviceAuthDialog authDialog = deviceAuthDialog.DonationDialog( 'firstrun.xml', xbmcaddon.Addon().getAddonInfo('path'), code='', url='') authDialog.doModal() del authDialog control.openSettings('0.0') sys.exit() elif (popup == '0' or ((int(timeNow) - int(popup)) > 30)): from resources.lib.modules import deviceAuthDialog authDialog = deviceAuthDialog.DonationDialog( 'donations.xml', xbmcaddon.Addon().getAddonInfo('path'), code='', url='') authDialog.doModal() del authDialog control.setSetting(id='popup.date', value=timeNow) #self.addDirectoryItem('TEST', 'testItem', 'movies.png', 'DefaultMovies.png') self.addDirectoryItem('Search Cloud', 'premiumizeSearch', 'cloud.png', 'DefaultMovies.png') self.addDirectoryItem('Meta Cloud', 'meta_cloud', 'cloud.png', 'DefaultTVShows.png') # self.addDirectoryItem('Meta Library', 'libraryNavigator', # 'cloud.png', 'DefaultMovies.png', isFolder=True) self.addDirectoryItem(50001, 'premiumizeNavigator', 'cloud.png', 'DefaultTVShows.png') self.addDirectoryItem('Lists', 'browse_nav', 'cloud.png', 'DefaultTVShows.png') downloads = True if control.setting('downloads') == 'true' else False if downloads == True: self.addDirectoryItem('Download Manager', 'download_manager', 'cloud.png', 'DefaultTVShows.png') self.addDirectoryItem(32008, 'toolNavigator', 'settings.png', 'DefaultAddonProgram.png') self.addDirectoryItem('[I]Support and Donations[/I]', 'donations', 'support.png', 'DefaultAddonProgram.png', isFolder=False) self.endDirectory()
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(32511).encode('utf-8'), control.lang(32512).encode('utf-8'), '', 'Trakt'): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() result = getTraktAsJson('/oauth/device/code', {'client_id': V2_API_KEY}) verification_url = (control.lang(32513) % result['verification_url']).encode('utf-8') user_code = (control.lang(32514) % result['user_code']).encode('utf-8') expires_in = int(result['expires_in']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('Trakt', verification_url, user_code) for i in range(0, expires_in): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() r = getTraktAsJson('/oauth/device/token', {'client_id': V2_API_KEY, 'client_secret': CLIENT_SECRET, 'code': device_code}) if 'access_token' in r: break except: pass try: progressDialog.close() except: pass token, refresh = r['access_token'], r['refresh_token'] headers = {'Content-Type': 'application/json', 'trakt-api-key': V2_API_KEY, 'trakt-api-version': 2, 'Authorization': 'Bearer %s' % token} result = client.request(urlparse.urljoin(BASE_URL, '/users/me'), headers=headers) result = utils.json_loads_as_str(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('3.1')
def set_reuselanguageinvoker(): try: addon_xml = control.joinPath(control.addonPath('plugin.video.dg'), '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: from resources.lib.modules import log_utils log_utils.error()
def backup(mode='full'): KODIV = get_Kodi_Version() backupdir = control.setting('download.path') if backupdir == '' or backupdir == None: control.infoDialog('Please Setup a Path for Downlads first') control.openSettings(query='1.3') return if mode == 'full': defaultName = "kodi_backup" BACKUPDATA = control.HOME FIX_SPECIAL() elif mode == 'userdata': defaultName = "kodi_settings" BACKUPDATA = control.USERDATA else: return if os.path.exists(BACKUPDATA): if not backupdir == '': name = _get_keyboard(default=defaultName, heading='Name your Backup') today = datetime.now().strftime('%Y%m%d%H%M') today = re.sub('[^0-9]', '', str(today)) zipDATE = "_%s.zip" % today name = re.sub(' ', '_', name) + zipDATE backup_zip = xbmc.translatePath(os.path.join(backupdir, name)) exclude_database = ['.pyo', '.log'] try: maintenance.clearCache(mode='silent') maintenance.deleteThumbnails(mode='silent') maintenance.purgePackages(mode='silent') except: pass exclude_dirs = [''] CreateZip(BACKUPDATA, backup_zip, 'Creating Backup', 'Backing up files', exclude_dirs, exclude_database) dialog.ok(AddonTitle, 'Backup complete', '', '') else: dialog.ok( AddonTitle, 'No backup location found: Please setup your Backup location', '', '')
def authenticate(self, username, password, service_id): if not self.is_authenticated(username, password, service_id) and ( username and password and service_id): control.log('username/password set. trying to authenticate') self.credentials = self._authenticate(username, password, service_id) success = self.credentials.get('success') if success is False: error_message = self.credentials.get('error_message') control.log('authentication error: %s' % error_message) control.infoDialog(error_message, icon='ERROR') return {}, {} is_authenticated, self.user_data = self.check_service( bypass_cache=True) if is_authenticated and self.is_authenticated( username, password, service_id): control.log('successfully authenticated') self._save_credentials() else: control.log('wrong username or password') message = '[%s] %s' % (self.__class__.__name__, control.lang(32003)) control.infoDialog(message, icon='ERROR') return {}, {} elif self.is_authenticated(username, password, service_id): control.log('[GLOBO AUTH] - already authenticated') else: control.log('no username set to authenticate', control.LOGWARNING) message = 'Missing user credentials' control.infoDialog(message, icon='ERROR') control.openSettings() return {}, {} control.log(repr(self.credentials)) returned_credentials = dict(self.credentials) del returned_credentials['brplay_id'] del returned_credentials['success'] del returned_credentials['error_message'] return returned_credentials, self.user_data
def premiumizeNav(self): from resources.lib.api import premiumize try: accountStatus = premiumize.info() self.addDirectoryItem(accountStatus, '0', 'search.png', 'DefaultMovies.png') except:pass if control.setting('premiumize.customer_id') == '' or control.setting('premiumize.customer_id') == None: authDialog = deviceAuthDialog.DeviceAuthDialog('script-DeviceAuthDialog.xml', __addon__.getAddonInfo('path'), code='test code', url='http://premiumize.me') authDialog.doModal() del authDialog control.openSettings('0.0') else: self.addDirectoryItem(50002, 'premiumizerootFolder', 'cloud.png', 'DefaultMovies.png') self.addDirectoryItem(50003, 'premiumizeTransfers', 'cloud.png', 'DefaultMovies.png') self.addDirectoryItem(50004, 'premiumizeAdd', 'cloud.png', 'DefaultMovies.png') self.addDirectoryItem('Library', 'libraryNavigator', 'cloud.png', 'DefaultMovies.png', isFolder=True) self.endDirectory()
def upload_log(): url = 'https://paste.kodi.tv/' if not os.path.exists(log_file): w = open(log_file, 'w') w.close() f = open(log_file, 'rb') data = f.read() f.close() if not data: msg = control.lang(32140) ok = control.dialog.ok(name, msg) if ok: control.openSettings('9.0') else: import requests session = requests.Session() UserAgent = 'TheOath %s' % version try: response = session.post(url + 'documents', data=data, headers={'User-Agent': UserAgent}) #log('log_response: ' + str(response)) if 'key' in response.json(): result = url + response.json()['key'] msg = control.lang(32141) % str(result) log('log_upload_url: ' + result) control.dialog.ok(name, msg) elif 'message' in response.json(): control.infoDialog('Log upload failed: %s' % str(response.json()['message']), sound=True) log('log_upload_msg: %s' % str(response.json()['message'])) else: control.infoDialog('Log upload failed', sound=True) log('log_error: %s' % response.text) except: control.infoDialog('Unable to retrieve the paste url', sound=True) log('log_upload_fail', 1)
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(30479).encode('utf-8'), control.lang(30481).encode('utf-8'), '', 'Trakt', control.lang(30483).encode('utf-8'), control.lang(30482).encode('utf-8')): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() if control.yesnoDialog(control.lang(30484).encode('utf-8') + '[COLOR skyblue]http://trakt.tv/pin/7920[/COLOR]', control.lang(30485).encode('utf-8'), control.lang(30486).encode('utf-8'), 'Trakt', control.lang(30487).encode('utf-8'), control.lang(30488).encode('utf-8')): raise Exception() k = control.keyboard('', control.lang(30487).encode('utf-8')) k.doModal() ; pin = k.getText() if k.isConfirmed() else None if pin == '' or pin == None: raise Exception() trakt_base = 'http://api-v2launch.trakt.tv' headers = {'Content-Type': 'application/json', 'trakt-api-key': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'trakt-api-version': '2'} post = {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'client_secret': '90a1840447a1e39d350023263902fe7010338d19789e6260f18df56a8b07a68a', 'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob', 'grant_type': 'authorization_code', 'code': pin} result = client.request(urlparse.urljoin(trakt_base, '/oauth/token'), post=json.dumps(post), headers=headers) result = json.loads(result) token, refresh = result['access_token'], result['refresh_token'] headers['Authorization'] = 'Bearer %s' % token result = client.request(urlparse.urljoin(trakt_base, '/users/me'), headers=headers) result = json.loads(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('3.1')
def authenticate(self, provider_id, username, password, select_profile=True): if not self.is_authenticated(provider_id) and (username and password): control.log('username/password set. trying to authenticate') credentials = self._authenticate(provider_id, username, password, select_profile) self.credentials.update(credentials) if self.is_authenticated(provider_id): control.log('successfully authenticated') self._save_credentials() else: control.log('wrong username or password') control.infoDialog('[%s] %s' % (self.__class__.__name__, control.lang('32003')), icon='ERROR') return None elif self.is_authenticated(provider_id): control.log('already authenticated') pass else: control.log_warning('no username set to authenticate') message = 'Missing user credentials' control.infoDialog(message, icon='ERROR') control.openSettings() return None control.log("credentials: %s" % repr(self.credentials)) credentials_cookie = {} for key in self.credentials.keys(): if key.endswith(provider_id): credentials_cookie.update({ key: self.credentials[key] }) control.log("credentials_cookie: %s" % repr(credentials_cookie)) return credentials_cookie
def resolve(self, url): try: m3u8 = [ [ '#EXTM3U', '', '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH={bandwidth},NAME="{stream_name}"', '{video_stream}' ], [ '#EXTM3U', '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="{audio_group}",DEFAULT=YES,AUTOSELECT=YES,NAME="Stream 1",URI="{audio_stream}"', '', '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH={bandwidth},NAME="{stream_name}",AUDIO="{audio_group}"', '{video_stream}' ] ] query = urlparse.parse_qs(url) query = dict([(key, query[key][0]) if query[key] else (key, '') for key in query]) for i in m3u8: try: content = ('\n'.join(i)).format(**query) except: pass auth = query['video_stream'] r = client.request(auth, headers={'User-Agent': 'Lavf/56.40.101'}) try: url = json.loads(r)['url'] except: url = None if not url == None: def dialog(url): try: self.disableScraper = control.yesnoDialog('To watch this video visit from any device', '[COLOR skyblue]%s[/COLOR]' % url, '', 'Torba', 'Cancel', 'Settings') except: pass workers.Thread(dialog, url).start() control.sleep(3000) for i in range(100): try: if not control.condVisibility('Window.IsActive(yesnoDialog)'): break r = client.request(auth, headers={'User-Agent': 'Lavf/56.40.101'}) try: url = json.loads(r)['url'] except: url = None if url == None: break workers.Thread(dialog, url).start() control.sleep(3000) except: pass if self.disableScraper: control.openSettings(query='2.0') return '' control.execute('Dialog.Close(yesnoDialog)') if not url == None: return path = os.path.join(control.dataPath, 'torbase.m3u8') control.makeFile(control.dataPath) ; control.deleteFile(path) file = control.openFile(path, 'w') ; file.write(content) ; file.close() return path except: return
elif action == 'addSearch': from resources.lib.indexers import hub hub.indexer().addSearch(url) elif action == 'delSearch': from resources.lib.indexers import hub hub.indexer().delSearch() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openSettings': from resources.lib.modules import control control.openSettings() elif action == 'urlresolverSettings': from resources.lib.modules import control control.openSettings(id='script.module.urlresolver') elif action == 'addView': from resources.lib.modules import views views.addView(content) elif action == 'downloader': from resources.lib.modules import downloader downloader.downloader() elif action == 'addDownload': from resources.lib.modules import downloader
elif action == 'refresh': from resources.lib.modules import control control.refresh() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openPlaylist': from resources.lib.modules import control control.openPlaylist() elif action == 'openSettings': from resources.lib.modules import control control.openSettings(query) elif action == 'artwork': from resources.lib.modules import control control.artwork() elif action == 'moviePlaycount': from resources.lib.modules import playcount playcount.movies(imdb, query) elif action == 'episodePlaycount': from resources.lib.modules import playcount playcount.episodes(imdb, tvdb, season, episode, query) elif action == 'tvPlaycount': from resources.lib.modules import playcount
def openSettings(self): control.openSettings('7.1') xbmc.executebuiltin('Container.Refresh')
if subid == None: youtube.yt_index().root(action) else: youtube.yt_index().get(action, subid) elif action == 'refresh': from resources.lib.modules import control control.refresh() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openSettings': from resources.lib.modules import control control.openSettings(query) elif action == 'artwork': from resources.lib.modules import control control.artwork() elif action == 'addView': from resources.lib.modules import views views.addView(content) elif action == 'moviePlaycount': from resources.lib.modules import playcount playcount.movies(imdb, query) elif action == 'episodePlaycount': from resources.lib.modules import playcount
else: parent.enable() elif mode[0] == 'set_password': from resources.lib.modules import parental parent = parental.Parental() parent.setPassword() elif mode[0] == 'change_password': from resources.lib.modules import parental parent = parental.Parental() parent.changePassword() elif mode[0] == 'settings': from resources.lib.modules import control control.openSettings() elif mode[0] == 'addon_installer': from resources.lib.modules import addonInstaller addons = addonInstaller.get_addons() for a in addons: addon.add_item( { 'mode': 'install', 'id': a[2], 'key': a[1], 'name': a[0] }, { 'title': a[0], 'plot': 'Install addon' },
def resolve(self, url): try: m3u8 = [ '#EXTM3U', '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",DEFAULT=YES,AUTOSELECT=YES,NAME="Stream 1",URI="{audio_stream}"', '', '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=0,NAME="{stream_name}",AUDIO="audio"', '{video_stream}' ] query = urlparse.parse_qs(url) query = dict([(key, query[key][0]) if query[key] else (key, '') for key in query]) auth = 'http://streamtorrent.tv/api/torrent/%s/%s.m3u8?json=true' % (query['vid_id'], query['stream_id']) r = client.request(auth) r = json.loads(r) try: url = r['url'] except: url = None if not url == None: def dialog(url): try: self.disableScraper = control.yesnoDialog('Torba requires you visit, on any device, the following url to watch this video:', '[COLOR skyblue]%s[/COLOR]' % url, '', 'Torba', 'Cancel', 'Settings') except: pass workers.Thread(dialog, url).start() control.sleep(3000) for i in range(100): try: if not control.condVisibility('Window.IsActive(yesnoDialog)'): break r = client.request(auth) r = json.loads(r) try: url = r['url'] except: url = None if url == None: break workers.Thread(dialog, url).start() control.sleep(3000) except: pass if self.disableScraper: control.openSettings(query='2.0') return '' control.execute('Dialog.Close(yesnoDialog)') if not url == None: return stream_name = '%sp' % (query['height']) video_stream = r[stream_name] if not 'audio' in r: return video_stream audio_stream = r['audio'] content = ('\n'.join(m3u8)).format(**{'audio_stream': audio_stream, 'stream_name': stream_name, 'video_stream': video_stream}) path = os.path.join(control.dataPath, 'torbase.m3u8') control.makeFile(control.dataPath) ; control.deleteFile(path) file = control.openFile(path, 'w') ; file.write(content) ; file.close() return path except: return
elif action == 'episodeUserlists': from resources.lib.indexers import episodes episodes.episodes().userlists() elif action == 'refresh': from resources.lib.modules import control control.refresh() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openSettings': from resources.lib.modules import control control.openSettings(query) elif action == 'open.Settings.CacheProviders': from resources.lib.modules import control control.openSettings(query) elif action == 'artwork': from resources.lib.modules import control control.artwork() elif action == 'addView': from resources.lib.modules import views views.addView(content) elif action == 'moviePlaycount': from resources.lib.modules import playcount
def rdAuthorize(): xbmc.log("hya") try: CLIENT_ID = 'RAQBAEYSNZCJY' USER_AGENT = 'BOB for Kodi/1.0' if not '' in credentials()['realdebrid'].values(): if control.yesnoDialog("A RealDebrid account already exists", "Do you want to reset the account?", '', 'RealDebrid', "No", "yes"): control.setSetting('realdebrid_client_id', '') control.setSetting('realdebrid_client_secret', '') control.setSetting('realdebrid_token', '') control.setSetting('realdebrid_refresh', '') control.setSetting('realdebrid_auth', '') raise Exception() headers = {'User-Agent': USER_AGENT} url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % ( CLIENT_ID) result = client.request(url, headers=headers) result = json.loads(result) verification_url = control.lang(30416).encode( 'utf-8') + '[COLOR skyblue]%s[/COLOR]' % ( result['verification_url']) user_code = control.lang(30417).encode( 'utf-8') + '[COLOR skyblue]%s[/COLOR]' % (result['user_code']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('RealDebrid', verification_url, user_code) for i in range(0, 3600): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() url = 'https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s' % ( CLIENT_ID, device_code) result = client.request(url, headers=headers, error=True) result = json.loads(result) if 'client_secret' in result: break except: pass try: progressDialog.close() except: pass id, secret = result['client_id'], result['client_secret'] url = 'https://api.real-debrid.com/oauth/v2/token' post = urllib.urlencode({ 'client_id': id, 'client_secret': secret, 'code': device_code, 'grant_type': 'http://oauth.net/grant_type/device/1.0' }) result = client.request(url, post=post, headers=headers) #control.log("### result:%s " % (result)) result = json.loads(result) token, refresh = result['access_token'], result['refresh_token'] control.setSetting('realdebrid_client_id', id) control.setSetting('realdebrid_client_secret', secret) control.setSetting('realdebrid_token', token) control.setSetting('realdebrid_refresh', refresh) control.setSetting('realdebrid_auth', '*************') raise Exception() except: xbmc.log("hello?") control.openSettings()
parent.enable() elif mode[0]=='set_password': from resources.lib.modules import parental parent = parental.Parental() parent.setPassword() elif mode[0]=='change_password': from resources.lib.modules import parental parent = parental.Parental() parent.changePassword() elif mode[0]=='settings': from resources.lib.modules import control control.openSettings() elif mode[0]=='addon_installer': from resources.lib.modules import addonInstaller addons = addonInstaller.get_addons() for a in addons: addon.add_item({'mode': 'install', 'id':a[2], 'key':a[1], 'name':a[0]}, {'title': a[0], 'plot': 'Install addon'}, img=a[3], fanart=fanart, is_folder=True) addon.end_of_directory() elif mode[0]=='install': id = args['id'][0] key = args['key'][0] name = args['name'][0] from resources.lib.modules import addonInstaller
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(32700).encode('utf-8'), control.lang(32701).encode('utf-8'), '', 'Trakt'): utils.setting('trakt.user', ''); utils.setting('trakt.token', ''); utils.setting('trakt.refresh', ''); raise Exception(); result = getTrakt('/oauth/device/code', {'client_id': '49e7f57ee0c22e6ca39649a9255f6097d10cbdb708a5f1c3dc196e615cce6549'}); result = json.loads(result); verification_url = (control.lang(32702) % result['verification_url']).encode('utf-8'); user_code = (control.lang(32703) % result['user_code']).encode('utf-8'); expires_in = int(result['expires_in']); device_code = result['device_code']; interval = result['interval']; progressDialog = control.progressDialog; progressDialog.create('Trakt', verification_url, user_code); for i in range(0, expires_in): try: if progressDialog.iscanceled(): break; time.sleep(1); if not float(i) % interval == 0: raise Exception(); r = getTrakt('/oauth/device/token', {'client_id': '49e7f57ee0c22e6ca39649a9255f6097d10cbdb708a5f1c3dc196e615cce6549', 'client_secret': '49288059527f042ac3e953419ecfd8c6783438ae966cd0b05982423e7fbb0259', 'code': device_code}); r = json.loads(r); if 'access_token' in r: break; except: pass; try: progressDialog.close(); except: pass; token = r['access_token']; refresh = r['refresh_token']; headers = { 'Content-Type': 'application/json', 'trakt-api-key': '49e7f57ee0c22e6ca39649a9255f6097d10cbdb708a5f1c3dc196e615cce6549', 'trakt-api-version': '2', 'Authorization': 'Bearer %s' % token }; result = client.request('http://api-v2launch.trakt.tv/users/me', headers=headers); result = json.loads(result); user = result['username']; utils.setting('trakt.user', user); utils.setting('trakt.token', token); utils.setting('trakt.refresh', refresh); raise Exception(); except: control.openSettings('3.1');
elif action == 'addSearch': from resources.lib.indexers import streamhub streamhub.indexer().addSearch(url) elif action == 'delSearch': from resources.lib.indexers import streamhub streamhub.indexer().delSearch() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openSettings': from resources.lib.modules import control control.openSettings() elif action == 'urlresolverSettings': from resources.lib.modules import control control.openSettings(id='script.module.urlresolver') elif action == 'addView': from resources.lib.modules import views views.addView(content) elif action == 'downloader': from resources.lib.modules import downloader downloader.downloader() elif action == 'addDownload': from resources.lib.modules import downloader
elif action == 'mymovieliteNavigator': navigator.navigator().mymovies(lite=True) elif action == 'mymovieNavigator': navigator.navigator().mymovies() elif action == 'mytvliteNavigator': navigator.navigator().mytvshows(lite=True) elif action == 'mytvNavigator': navigator.navigator().mytvshows() elif action == 'collectionsMovies': navigator.navigator().collectionsMovies() elif action == 'kidsCollections': navigator.navigator().kidsCollections() elif action == 'holidayCollections': navigator.navigator().holidayCollections() elif action == 'openSettings': control.openSettings(query) elif action == 'play': select = control.setting('hosts.mode') if select == '3' and 'plugin' in control.infoLabel('Container.PluginName'): sources().play_dialog(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, select) elif select == '4' and 'plugin' in control.infoLabel( 'Container.PluginName'): sources().play_dialog_list(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, select) else: sources().play(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, select) elif action == 'play_alter': sources().play_alter(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta)
def Open_settings(): control.openSettings()
elif action == 'episodeUserlists': from resources.lib.indexers import episodes episodes.episodes().userlists() elif action == 'refresh': from resources.lib.modules import control control.refresh() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openSettings': from resources.lib.modules import control control.openSettings(query) elif action == 'artwork': from resources.lib.modules import control control.artwork() elif action == 'addView': from resources.lib.modules import views views.addView(content) elif action == 'moviePlaycount': from resources.lib.modules import playcount playcount.movies(imdb, query) elif action == 'episodePlaycount': from resources.lib.modules import playcount
elif action == 'addSearch': from resources.lib.indexers import snstreams snstreams.indexer().addSearch(url) elif action == 'delSearch': from resources.lib.indexers import snstreams snstreams.indexer().delSearch() elif action == 'queueItem': from resources.lib.modules import control control.queueItem() elif action == 'openSettings': from resources.lib.modules import control control.openSettings() elif action == 'urlresolverSettings': from resources.lib.modules import control control.openSettings(id='script.module.urlresolver') elif action == 'addView': from resources.lib.modules import views views.addView(content) elif action == 'downloader': from resources.lib.modules import downloader downloader.downloader() elif action == 'addDownload':
elif action == 'xdirectory': from resources.lib.indexers import bob; bob.Indexer().getx(url) elif action == 'developer': from resources.lib.indexers import bob; bob.Indexer().developer() elif action == 'play': from resources.lib.indexers import bob; bob.Player().play(url, content) elif action == 'browser': from resources.lib.indexers import bob; bob.Resolver().browser(url) elif action == 'search': from resources.lib.indexers import bob; bob.Indexer().search() elif action == 'add_search': from resources.lib.indexers import bob; bob.Indexer().add_search(url) elif action == 'delete_search': from resources.lib.indexers import bob; bob.Indexer().delete_search() elif action == 'openSettings': from resources.lib.modules import control; control.openSettings() elif action == 'addView': from resources.lib.modules import views; views.addView(content) elif action == 'clearCache': from resources.lib.modules import cache; cache.clear() elif action == 'trailer': from resources.lib.modules import trailer; trailer.trailer().play(name) elif action == 'ScraperSettings': from resources.lib.modules import control control.openSettings(id='script.module.nanscrapers') elif action == 'ResolverSettings': from resources.lib.modules import control control.openSettings(id='script.mrknow.urlresolver') elif action == 'queueItem': from resources.lib.modules import control from resources.lib.indexers.bob import Resolver, Indexer, replace_url