def setWindowColorsDark(dark=None,view=None): if dark == None: dark = util.getSetting('window_colors_dark', False) for v in VIEW_TYPES: d = util.getSetting('window_colors_dark_%s' % v, False) dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_dark_%s' % v, d and '1' or '0') if d: dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_fore_%s' % v, 'FFFFFFFF') dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_back_%s' % v, 'FF000000') else: dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_fore_%s' % v, 'FF000000') dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_back_%s' % v, 'FFFFFFFF') elif view: util.setSetting('window_colors_dark_%s' % view, dark) dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_dark_%s' % view, dark and '1' or '0') if dark: dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_fore_%s' % view, 'FFFFFFFF') dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_back_%s' % view, 'FF000000') else: dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_fore_%s' % view, 'FF000000') dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_back_%s' % view, 'FFFFFFFF') else: util.setSetting('window_colors_dark', dark) dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_dark', dark and '1' or '0') if dark: dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_fore', 'FFFFFFFF') dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_back', 'FF000000') else: dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_fore', 'FF000000') dialogs.setGlobalSkinProperty('ForumBrowser_window_colors_back', 'FFFFFFFF')
def installKeyboardMod(update=True,paths=None,change=False): paths = ensureLocalSkin(paths) if change: yes = True else: yes = xbmcgui.Dialog().yesno(T(32496),T(32497),T(32498)) if yes: keyboardFile = chooseKeyboardFile(paths.fbPath,paths.currentSkin) if not keyboardFile: return True sourcePath = os.path.join(paths.fbPath,'keyboard',keyboardFile) LOG('Keyboard source path: %s' % sourcePath) copyKeyboardModImages(paths.localSkinPath) keyboardcontents = open(paths.dialogPath,'r').read() if not os.path.exists(paths.backupPath) or not 'Forum Browser' in keyboardcontents: LOG('Creating backup of original DialogKeyboard.xml file: ' + paths.backupPath) open(paths.backupPath,'w').write(open(paths.dialogPath,'r').read()) if not 'Forum Browser' in keyboardcontents or update: LOG('Replacing DialogKeyboard.xml with: ' + sourcePath) os.remove(paths.dialogPath) open(paths.dialogPath,'w').write(open(sourcePath,'r').read()) #if getSetting('FBIsRunning',True) and FBrunning: # dialogs.showMessage(T(32052),'',T(32499) + '[CR][CR]' + T(32477)) #else: dialogs.showMessage(T(32052),'',T(32499)) else: setSetting('keyboard_installed',False) dialogs.showMessage(T(32483),T(32521),' ',T(32522)) return True
def onPlayBackStarted(self): self.status('STARTED') if False and self.status.channel: util.DEBUG_LOG( 'Saving successful channel number as last: {0}'.format( self.status.channel.number)) util.setSetting('last.channel', self.status.channel.number) self.owner.onPlayBackStarted()
def checkIfUpdated(self): lastAPILevel = util.getSetting('API.LEVEL',0) util.setSetting('API.LEVEL',API_LEVEL) if not lastAPILevel: return self.firstRun() elif lastAPILevel < 2: util.showTextDialog('Info',util.T(32100))
def keyboardInstalled(paths=None): paths = paths or getPaths() if os.path.exists(paths.dialogPath): keyboardcontents = open(paths.dialogPath,'r').read() if 'Forum Browser' in keyboardcontents: LOG('Keyboard mod detected') setSetting('keyboard_installed',True) return True return False
def checkKBModRemove(skinPath): backupPath = getSkinFilePath(skinPath,'DialogKeyboard.xml.FBbackup') dialogPath = getSkinFilePath(skinPath,'DialogKeyboard.xml') if backupPath and dialogPath: xbmcvfs.delete(dialogPath) xbmcvfs.rename(backupPath,dialogPath) setSetting('keyboard_installed',False) dialogs.showMessage(T(32476),T(32476),' ',T(32477)) return True
def onPlayBackFailed(self): source = self.status.nextSource() if source: util.DEBUG_LOG('Playing from NEXT source: {0}'.format(source.ID)) self.play(source.url, self.status.item, self.touchMode, 0) return True else: util.setSetting('last.channel', '') self.status.reset() self.owner.onPlayBackFailed() return True
def toggleFontInstallation(): if fontInstalled(): yes = dialogs.dialogYesNo(T(32466),T(32588),'',T(32466)) if yes: unInstallFont() setSetting('font_installed',False) else: yes = dialogs.dialogYesNo(T(32482),T(32589),'',T(32482)) if yes: installFont() setSetting('font_installed',True)
def setWindowSlideUp(up=None,view=None): if up == None: up = util.getSetting('window_slide_up', False) for v in VIEW_TYPES: u = util.getSetting('window_slide_up_%s' % v, False) dialogs.setGlobalSkinProperty('ForumBrowser_window_slide_up_%s' % v, u and '1' or '0') else: if view: util.setSetting('window_slide_up_%s' % view, up) dialogs.setGlobalSkinProperty('ForumBrowser_window_slide_up_%s' % view, up and '1' or '0') util.setSetting('window_slide_up', up) dialogs.setGlobalSkinProperty('ForumBrowser_window_slide_up', up and '1' or '0')
def setWindowSelectionColors(color=None,view=None): if not color: for v in VIEW_TYPES: sc = util.getSetting('selection_color_%s' % v, '802080FF') v_nf = dialogs.binascii.hexlify(chr(int(ord(dialogs.binascii.unhexlify(sc[:2])) / 4))) + sc[2:] dialogs.setGlobalSkinProperty('ForumBrowser_selection_color_%s' % v,sc) dialogs.setGlobalSkinProperty('ForumBrowser_selection_color_nofocus_%s' % v,v_nf) else: util.setSetting('selection_color_%s' % view, color) color_nf = dialogs.binascii.hexlify(chr(int(ord(dialogs.binascii.unhexlify(color[:2])) / 4))) + color[2:] dialogs.setGlobalSkinProperty('ForumBrowser_selection_color_%s' % view,color) dialogs.setGlobalSkinProperty('ForumBrowser_selection_color_nofocus_%s' % view,color_nf)
def onAction(self,action): try: pct = self.slider.getPercent() val = hex(int((pct/100.0)*255))[2:].upper() setGlobalSkinProperty('ForumBrowser_window_background_fade_white_%s' % self.viewType,val + 'FFFFFF') setGlobalSkinProperty('ForumBrowser_window_background_fade_black_%s' % self.viewType,val + '000000') if action == 92 or action == 10 or action == 7: util.setSetting('background_fade_%s' % self.viewType, pct) if action == 7: self.close() except: util.ERROR('ERROR') BaseDialog.onAction(self,action)
def setWindowBackgroundImage(image=None,view=None,clear=False,save=True): if clear: util.setSetting('window_background_%s' % view, '') dialogs.setGlobalSkinProperty('ForumBrowser_window_background_%s' % view,'') return if view == None: for v in VIEW_TYPES: i = util.getSetting('window_background_%s' % v,'') dialogs.setGlobalSkinProperty('ForumBrowser_window_background_%s' % v,i) else: if not image: image = util.getSetting('window_background_%s' % view,'') if save: util.setSetting('window_background_%s' % view, image) dialogs.setGlobalSkinProperty('ForumBrowser_window_background_%s' % view,image)
def sort(self,key): if self.sortMode == key: self.sortASC = not self.sortASC else: self.sortASC = True self.sortMode = key util.setSetting('episodes.sort.mode',key) util.setSetting('episodes.sort.asc',self.sortASC) self.setWindowProperties() self.sortItems(self.recordingList)
def fontInstalled(paths=None): paths = paths or getPaths() font = os.path.join(paths.skinPath,'fonts','ForumBrowser-DejaVuSans.ttf') installed = False if os.path.exists(font): if Version(paths.versionLocal) >= Version(paths.versionUsed): if os.path.exists(paths.fontPath): contents = open(paths.fontPath,'r').read() if 'Forum Browser' in contents: LOG('Fonts mod detected') installed = True setSetting('font_installed',installed) return installed
def playChannel(self, channel): url = channel.sources[0].url util.DEBUG_LOG('Playing from source: {0}'.format( channel.sources[0].ID)) title = u'{0} - {1}'.format(channel.number, channel.name) item = xbmcgui.ListItem(title, thumbnailImage=channel.guide.icon) info = { 'Title': title, #'Plot': currentShow.synopsis, 'Studio': channel.guide.affiliate } item.setInfo('video', info) util.setSetting('last.channel', channel.number) self.status('NOT_STARTED', channel, item) args = self.getArgs() self.play(url + args, item, self.touchMode, 0)
def selectSetting(settingName, options): T = xbmcaddon.Addon(util.ADDON_ID).getLocalizedString if not options: xbmcgui.Dialog().ok(T(32153), T(32152)) return ids = [] displays = [] for ID, display in options: ids.append(ID) displays.append(display) chosenIndex = xbmcgui.Dialog().select(T(32151), displays) if chosenIndex < 0: return choice = ids[chosenIndex] util.DEBUG("Setting {} set to: {}".format(settingName, choice)) util.setSetting("{}".format(settingName), choice)
def chooseKeyboardFile(fbPath,currentSkin): files = os.listdir(os.path.join(fbPath,'keyboard')) skins = [] for f in files: if f.startswith('DialogKeyboard-'): skinName = f.split('-',1)[-1].rsplit('.',1)[0].lower() if skinName in currentSkin.lower() or skinName == 'generic' or skinName == 'video': skins.append(skinName.title()) remove = None if keyboardInstalled(): remove = len(skins) skins.append('Remove') idx = xbmcgui.Dialog().select(T(32523),skins) if idx < 0: return None if remove and idx == remove: checkKBModRemove(getPaths().skinPath) if not keyboardInstalled(): setSetting('keyboard_installed',False) #Checks and resets the installed setting setSetting('current_keyboard_mod','') return None skin = skins[idx] setSetting('current_keyboard_mod',skin) return 'DialogKeyboard-%s.xml' % skin.lower()
def signout(): util.setSetting('auth.token', '') util.DEBUG_LOG('Main: Signing out...disabled by mark')
def doMenu(self): selected = self.pushList.getSelectedPosition() options = [] if self.viewMode != "ALL": options.append(("show_all", T(32056))) if self.viewMode != "SELF": options.append(("show_self", T(32057))) options.append(("show_device", T(32058))) if selected >= 0: push = self.pushes[selected] if push.get("type") in ("file", "link"): options.append(("download", T(32059))) options.append(("delete", T(32060))) idx = xbmcgui.Dialog().select(T(32061), [o[1] for o in options]) if idx < 0: return choice = options[idx][0] if choice == "download": import os d = util.Downloader() targetDir = os.path.join(xbmc.translatePath(util.ADDON.getAddonInfo("profile")), "temp") if not os.path.exists(targetDir): os.makedirs(targetDir) finalTargetDir = d.chooseDirectory() if not finalTargetDir: return url = push.get("url") if push.get("type") == "link": vid = StreamExtractor.getVideoInfo(url) if vid: return d.youtubeDLDownload(vid, targetDir, finalTargetDir) elif push.get("type") == "file": url = push.get("file_url") fname, ftype = d.downloadURL(targetDir, url, fname=push.get("file_name"), final_target_dir=finalTargetDir) if fname: xbmcgui.Dialog().ok(T(32062), "{0}:".format(T(32063)), "[CR]", fname) else: xbmcgui.Dialog().ok(T(32064), "[CR]", T(32064)) elif choice == "delete": # set last selected to the item above, or the item below if we are at the top closest = selected - 1 if closest < 0: self.lastSelected = None else: self.lastSelected = self.pushes[closest].get("iden") self.client.deletePush(push) self.onInit() elif choice == "show_all": self.viewMode = "ALL" self.onInit() elif choice == "show_self": self.viewMode = "SELF" self.onInit() elif choice == "show_device": deviceID = selectDevice(self.client) if not deviceID: return self.viewMode = deviceID self.onInit() util.setSetting("last_view_mode", self.viewMode)
def applyNetworkSettings (): interface = util.getSetting('interface') essid = util.getSetting('essid') oldEssid = util.getSetting('old_essid') psk = util.getSetting('psk') encryption = util.getSetting('encryption') useDHCP = util.getSetting('dhcp') ipAddress = util.getSetting('ipaddress') subnetMask = util.getSetting('subnet') gateway = util.getSetting('gateway') util.DEBUG('interface={}, essid={}, encryption={}, psk={}, dhcp={}, ipaddress={}, subnetmask={}, gateway={}'.format (interface, essid, encryption, psk, useDHCP, ipAddress, subnetMask, gateway)) util.DEBUG('old_essid={}, psk_backup={}'.format(oldEssid, util.getSetting('psk_backup'))) localTempPath = '/tmp/' # 0 .. eth0 # 1 .. wlan0 interfaceName = '' if interface == '0': interfaceName = 'eth0' networkConfigPath = '/etc/systemd/network/' backupConfigPathFilename = '{}_backup_-{}._etwor_.backup'.format (networkConfigPath, interfaceName) configFilename = '{}.network'.format (interfaceName) localConfigPathFilename = '{}{}'.format (localTempPath, configFilename) networkConfigPathFilename = '{}{}'.format (networkConfigPath, configFilename) # create new config file... file = open (localConfigPathFilename, 'w') file.write ('[Match]\n') file.write ('Name={}\n'.format(interfaceName)) file.write ('\n') file.write ('[Network]\n') # if DHCP -> start dhcp # else set fixed route if useDHCP.lower() == 'true': file.write ('DHCP=both\n') else: file.write ('DNS={}\n'.format(gateway)) file.write ('Address={}/{}\n'.format(ipAddress, util.calcNetSize(subnetMask))) file.write ('Gateway={}\n'.format(gateway)) pass file.write('\n') file.close() # backup and replace config file... try: util.execShell('sudo rm {}'.format (backupConfigPathFilename)) except: util.DEBUG("removing of {} failed...".format(backupConfigPathFilename)) try: util.execShell('sudo mv -v {} {}'.format (networkConfigPathFilename, backupConfigPathFilename)) except: util.DEBUG("backing {} up to {} failed...".format(networkConfigPathFilename, backupConfigPathFilename)) util.execShell('sudo mv -v {} {}'.format (localConfigPathFilename, networkConfigPathFilename)) util.execShell('sudo chown -v root:root {}'.format (networkConfigPathFilename)) else: interfaceName = 'wlan0' networkConfigPath = '/etc/netctl/' backupConfigPathFilename = '{}_backup_-{}-{}._backup'.format (networkConfigPath, interfaceName, essid) configFilename = '{}-{}'.format (interfaceName, essid) if oldEssid == "": oldConfigFilename = '' else: oldConfigFilename = '{}-{}'.format (interfaceName, oldEssid) localConfigPathFilename = '{}{}'.format (localTempPath, configFilename) networkConfigPathFilename = '{}{}'.format (networkConfigPath, configFilename) # create new config file... file = open (localConfigPathFilename, 'w') file.write ("Description='Created by script.module.netmgr'\n") file.write ("Interface={}\n".format(interfaceName)) file.write ("Connection=wireless\n") security = 'none' if encryption == '1': security = 'wep' elif encryption == '2': security = 'wpa' file.write ("Security={}\n".format(security)) file.write ("ESSID={}\n".format (essid)) ip = 'dhcp' if useDHCP == 'false': ip = 'static' file.write ("IP={}\n".format(ip)) if useDHCP == 'false': file.write("Address='{}/{}'\n".format(ipAddress, util.calcNetSize(subnetMask))) file.write("Gateway='{}'\n".format(gateway)) file.write("DNS=('{}')\n".format(gateway)) if encryption != '0': file.write ("Key={}\n".format(psk)) file.write('\n') file.close() # Disable profile (just in case...) try: util.execShell('sudo systemctl reset-failed') except: util.DEBUG("call 'systemctl reset-failed' failed...".format(configFilename)) try: util.execShell('sudo netctl disable {}'.format (configFilename)) except: util.DEBUG("disabling of netctl {} failed...".format(configFilename)) try: util.execShell('sudo netctl disable {}'.format (oldConfigFilename)) except: util.DEBUG("disabling of netctl {} failed...".format(oldConfigFilename)) # backup and replace config file... try: util.execShell('sudo rm {}'.format (backupConfigPathFilename)) except: util.DEBUG("removing of {} failed...".format(backupConfigPathFilename)) try: util.execShell('sudo mv -v {} {}'.format (networkConfigPathFilename, backupConfigPathFilename)) except: util.DEBUG("backing {} up to {} failed...".format(networkConfigPathFilename, backupConfigPathFilename)) util.execShell('sudo mv -v {} {}'.format (localConfigPathFilename, networkConfigPathFilename)) util.execShell('sudo chown -v root:root {}'.format (networkConfigPathFilename)) util.execShell('sudo chmod -v 600 {}'.format (networkConfigPathFilename)) # util.execShell('sudo netctl start {}'.format (configFilename)) util.execShell('sudo netctl enable {}'.format (configFilename)) # save essid als old_essid util.setSetting('old_essid', essid) # save password util.setSetting("psk_backup", util.getSetting("psk")) # remove password from storage... util.setSetting("psk", "") # reboot the system util.execShell('sudo reboot')
def doMenu(self): selected = self.pushList.getSelectedPosition() options = [] if self.viewMode != 'ALL': options.append(('show_all',T(32056))) if self.viewMode != 'SELF': options.append(('show_self',T(32057))) options.append(('show_device',T(32058))) if selected >= 0: push = self.pushes[selected] if push.get('type') in ('file','link'): options.append(('download',T(32059))) options.append(('delete',T(32060))) idx = xbmcgui.Dialog().select(T(32061),[o[1] for o in options]) if idx < 0: return choice = options[idx][0] if choice == 'download': import os d = util.Downloader() targetDir = os.path.join(xbmc.translatePath(util.ADDON.getAddonInfo('profile')),'temp') if not os.path.exists(targetDir): os.makedirs(targetDir) finalTargetDir = d.chooseDirectory() if not finalTargetDir: return url = push.get('url') if push.get('type') == 'link': vid = StreamExtractor.getVideoInfo(url) if vid: return d.youtubeDLDownload(vid,targetDir,finalTargetDir) elif push.get('type') == 'file': url = push.get('file_url') fname, ftype = d.downloadURL(targetDir,url,fname=push.get('file_name'),final_target_dir=finalTargetDir) if fname: xbmcgui.Dialog().ok(T(32062),'{0}:'.format(T(32063)),'[CR]',fname) else: xbmcgui.Dialog().ok(T(32064),'[CR]',T(32064)) elif choice == 'delete': #set last selected to the item above, or the item below if we are at the top closest = selected - 1 if closest < 0: self.lastSelected = None else: self.lastSelected = self.pushes[closest].get('iden') self.client.deletePush(push) self.onInit() elif choice == 'show_all': self.viewMode = 'ALL' self.onInit() elif choice == 'show_self': self.viewMode = 'SELF' self.onInit() elif choice == 'show_device': deviceID = selectDevice(self.client) if not deviceID: return self.viewMode = deviceID self.onInit() util.setSetting('last_view_mode',self.viewMode)
def alignChanged(): if util.getSetting('current_right_align',False) != util.getSetting('last_right_align',False): util.setSetting('last_right_align',util.getSetting('current_right_align',False)) return True return False
def saveVersion(version): import util util.setSetting('core_version',version)
def setRegistry(self, reg, value, sec=None): util.setSetting('{0}.{1}'.format(sec, reg), value)
def abortFlag(): return util.MONITOR.abortRequested() plexapp.setTimer(PlexTimer) plexapp.setAbortFlagFunction(abortFlag) maxVideoRes = plexapp.Res( (3840, 2160) ) # INTERFACE.globals["supports4k"] and plexapp.Res((3840, 2160)) or plexapp.Res((1920, 1080)) CLIENT_ID = util.getSetting('client.ID') if not CLIENT_ID: CLIENT_ID = str(uuid.uuid4()) util.setSetting('client.ID', CLIENT_ID) def defaultUserAgent(): """Return a string representing the default user agent.""" _implementation = platform.python_implementation() if _implementation == 'CPython': _implementation_version = platform.python_version() elif _implementation == 'PyPy': _implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major, sys.pypy_version_info.minor, sys.pypy_version_info.micro) if sys.pypy_version_info.releaselevel != 'final': _implementation_version = ''.join( [_implementation_version, sys.pypy_version_info.releaselevel])
def doMenu(self): selected = self.pushList.getSelectedPosition() options = [] if self.viewMode != 'ALL': options.append(('show_all', T(32056))) if self.viewMode != 'SELF': options.append(('show_self', T(32057))) options.append(('show_device', T(32058))) if selected >= 0: push = self.pushes[selected] if push.get('type') in ('file', 'link'): options.append(('download', T(32059))) options.append(('delete', T(32060))) idx = xbmcgui.Dialog().select(T(32061), [o[1] for o in options]) if idx < 0: return choice = options[idx][0] if choice == 'download': import os d = util.Downloader() targetDir = os.path.join( xbmc.translatePath(util.ADDON.getAddonInfo('profile')), 'temp') if not os.path.exists(targetDir): os.makedirs(targetDir) finalTargetDir = d.chooseDirectory() if not finalTargetDir: return url = push.get('url') if push.get('type') == 'link': vid = StreamExtractor.getVideoInfo(url) if vid: return d.youtubeDLDownload(vid, targetDir, finalTargetDir) elif push.get('type') == 'file': url = push.get('file_url') fname, ftype = d.downloadURL(targetDir, url, fname=push.get('file_name'), final_target_dir=finalTargetDir) if fname: xbmcgui.Dialog().ok(T(32062), '{0}:'.format(T(32063)), '[CR]', fname) else: xbmcgui.Dialog().ok(T(32064), '[CR]', T(32064)) elif choice == 'delete': #set last selected to the item above, or the item below if we are at the top closest = selected - 1 if closest < 0: self.lastSelected = None else: self.lastSelected = self.pushes[closest].get('iden') self.client.deletePush(push) self.onInit() elif choice == 'show_all': self.viewMode = 'ALL' self.onInit() elif choice == 'show_self': self.viewMode = 'SELF' self.onInit() elif choice == 'show_device': deviceID = selectDevice(self.client) if not deviceID: return self.viewMode = deviceID self.onInit() util.setSetting('last_view_mode', self.viewMode)
def signout(): util.setSetting('auth.token', '') util.DEBUG_LOG('Main: Signing out...') plexapp.ACCOUNT.signOut()
def saveVersion(version): import util util.setSetting('core_version', version)
def setPreference(self, pref, value): util.setSetting(pref, value)
def saveAddonsMD5(md5): util.setSetting('addons_MD5', md5)
def clearRegistry(self, reg, sec=None): util.setSetting('{0}.{1}'.format(sec, reg), '')
def saveAddonsMD5(md5): util.setSetting('addons_MD5',md5)