def getViewType(): #logic to obtain viewtype inspired by lambda path = 'special://skin/' addon = os.path.join(path, 'addon.xml') xml = sfile.read(addon).replace('\n','').replace('\t','') try: src = re.compile('defaultresolution="(.+?)"').findall(xml)[0] except: src = re.compile('<res.+?folder="(.+?)"').findall(xml)[0] types = ['MyVideoNav.xml', 'MyMusicNav.xml', 'MyPrograms.xml', 'Includes_View_Modes.xml', 'IncludesViews.xml'] views = [] for type in types: view = os.path.join(path, src, type) view = sfile.read(view).replace('\n','').replace('\t','') try: view = re.compile('<views>(.+?)</views>').findall(view)[0].split(',') for v in view: v = int(v) if v not in views: views.append(v) except: pass count = 1 for view in views: label = xbmc.getInfoLabel('Control.GetLabel(%d)' % view) if label: return view return 0
def getViewType(): #logic to obtain viewtype inspired by lambda path = 'special://skin/' addon = os.path.join(path, 'addon.xml') xml = sfile.read(addon).replace('\n','').replace('\t','') try: src = re.compile('defaultresolution="(.+?)"').findall(xml)[0] except: src = re.compile('<res.+?folder="(.+?)"').findall(xml)[0] types = ['MyVideoNav.xml', 'MyMusicNav.xml', 'MyPrograms.xml', 'Includes_View_Modes.xml', 'IncludesViews.xml'] views = [] for type in types: view = os.path.join(path, src, type) view = sfile.read(view).replace('\n','').replace('\t','') try: view = re.compile('<views>(.+?)</views>').findall(view)[0].split(',') for v in view: v = int(v) if v not in views: views.append(v) except: pass for view in views: label = xbmc.getInfoLabel('Control.GetLabel(%d)' % view) if label: return view return 0
def getDataFromExternal(self, date, progress_callback=None): categoryPath = os.path.join(datapath, 'cats.xml') channels = os.path.join(datapath, 'chan.xml') categories = dixie.getCategoryList(categoryPath) xml = None try: if sfile.exists(channels): xml = sfile.read(channels) except: dixie.log('Error reading chan.xml') if not xml: return [] if not self.xml: self.xml = xml io = StringIO.StringIO(self.xml) context = ElementTree.iterparse(io, events=("start", "end")) return parseXMLTV(context, io, len(self.xml), progress_callback, self.offset, categories)
def updateAdvancedSettings(input): try: filename = 'advancedsettings.xml' source = os.path.join('special://userdata', filename) if sfile.exists(source): contents = sfile.read(source) if input in contents: Log('%s already in %s' % (input, filename)) return True Log('Updating %s with %s' % (filename, input)) start = input.replace('>', ' >').split(' ', 1)[0].strip() end = '</' + input.rsplit('</', 1)[-1].strip() start = contents.split(start, 1)[0] end = contents.split(end, 1)[-1] contents = start if start != end: contents += end contents = contents.replace('</advancedsettings>', '%s</advancedsettings>' % input) else: Log('Creating %s with %s' % (filename, input)) contents = '<advancedsettings>%s</advancedsettings>' % input except: Log('Error updating %s with %s' % (filename, input)) Log('Resetting %s with %s' % (filename, input)) contents = '<advancedsettings>%s</advancedsettings>' % input sfile.write(source, contents) return False
def getCategories(self): cat = dict() path = os.path.join(datapath, 'cats.xml') try: if sfile.exists(path): xml = sfile.read(path) except: pass xml = xml.replace('&', '&') xml = StringIO.StringIO(xml) xml = ElementTree.iterparse(xml, events=("start", "end")) for event, elem in xml: try: if event == 'end': if elem.tag == 'cats': channel = elem.findtext('channel') category = elem.findtext('category') if channel != '' and category != '': cat[channel] = category except: pass return cat
def showMyMessage(num, id): title = "======================= 라일락TV 안내 =======================" path = os.path.join(__cwd__, 'message%d.txt' % num) fp = open(path) text = fp.read() fp.close() lines = text.split('\n') newMessage = [] count = 0 for line in lines: newMessage.append(line) count += 1 if "진행하실 수 있습니다" in line: newMessage.append("") newMessage.append( " " + id) count += 2 ofp = open(__cwd__ + "/message.txt", "w") for line in newMessage: ofp.write(line + '\n') ofp.close() path1 = os.path.join(__cwd__, 'message.txt') at = sfile.read(path1) showText(title, at, True)
def getCategories(self): cat = dict() path = os.path.join(datapath, 'cats.xml') dixie.log("Checking for category XML path at: "+path) try: if sfile.exists(path): xml = sfile.read(path) except: dixie.log("### cats.xml does not exist") # xml = xml.replace('&', '&') xml = StringIO.StringIO(xml) xml = ElementTree.iterparse(xml, events=("start", "end")) for event, elem in xml: try: if event == 'end': if elem.tag == 'cats': channel = elem.findtext('channel') category = elem.findtext('category') if channel != '' and category != '': cat[channel] = category except: pass return cat
def getCategoryList(path): import StringIO from xml.etree import ElementTree xml = None cat = dict() try: if sfile.exists(path): xml = sfile.read(path) except: pass if not xml: return {} xml = StringIO.StringIO(xml) xml = ElementTree.iterparse(xml, events=("start", "end")) for event, elem in xml: try: if event == 'end': if elem.tag == 'cats': channel = elem.findtext('channel') category = elem.findtext('category') if channel != '' and category != '': cat[channel] = category except: pass return cat
def generateMD5(path): if not sfile.exists(path): return '0' try: import hashlib return hashlib.md5(sfile.read(path)).hexdigest() except: pass try: import md5 return md5.new(sfile.read(path)).hexdigest() except: pass return '0'
def getFavourites(file, limit=10000, validate=True, superSearch=False): import xbmcgui xml = '<favourites></favourites>' if sfile.exists(file): xml = sfile.read(file) items = [] faves = re.compile('<favourite(.+?)</favourite>').findall(xml) for fave in faves: fave = fave.replace('"', '&_quot_;') fave = fave.replace('\'', '"') fave = utils.unescape(fave) fave = fave.replace('name=""', '') try: name = re.compile('name="(.+?)"').findall(fave)[0] except: name = '' try: thumb = re.compile('thumb="(.+?)"').findall(fave)[0] except: thumb = '' try: cmd = fave.split('>', 1)[-1] except: cmd = '' #name = utils.Clean(name.replace( '&_quot_;', '"')) name = name.replace( '&_quot_;', '"') thumb = thumb.replace('&_quot_;', '"') cmd = cmd.replace( '&_quot_;', '"') add = False if superSearch: add = isValid(cmd) elif (SHOWUNAVAIL) or (not validate) or isValid(cmd): add = True if add: cmd = upgradeCmd(cmd) if cmd.startswith('PlayMedia'): option = 'mode' try: mode = int(favourite.getOption(cmd, option)) except: win = xbmcgui.getCurrentWindowId() cmd = updateSFOption(cmd, 'winID', win) cmd = patch(cmd) items.append([name, thumb, cmd]) if len(items) > limit: return items return items
def extractAll(filename, dp, location): global CHANGELOG CHANGELOG = None zin = zipfile.ZipFile(filename, 'r') relroot = os.path.abspath(os.path.join(ROOT, os.pardir)) root = os.path.join(HOME, 'SF_Temp') profile = os.path.join(root, 'Super Favourites') #copy existing settings to root dst = os.path.join(root, 'settings.xml') src = os.path.join(ROOT, 'settings.xml') sfile.copy(src, dst) if IMPORT_RESET: try: sfile.rmtree(os.path.join(ROOT, 'Super Favourites')) except: pass try: nItem = float(len(zin.infolist())) index = 0 for item in zin.infolist(): index += 1 percent = int(index / nItem * 100) filename = item.filename if dp: dp.update(percent, GETTEXT(30140) % filename, location, GETTEXT(30141)) if filename == 'settings.xml': if utils.DialogYesNo(GETTEXT(30135), line2='', line3=GETTEXT(30136), noLabel=None, yesLabel=None): zin.extract(item, root) elif filename == 'changelog.txt': try: zin.extract(item, root) filename = os.path.join(root, filename) CHANGELOG = sfile.read(filename) utils.DeleteFile(filename) except Exception, e: utils.log('Changelog error in extractAll') utils.log(e) elif filename.lower().startswith('super favourites'): zin.extract(item, root) elif filename.lower().startswith('s'): zin.extract(item, root)
def showChangelog(addonID=None): try: if addonID: ADDON = xbmcaddon.Addon(addonID) else: ADDON = xbmcaddon.Addon(ADDONID) text = sfile.read(ADDON.getAddonInfo('changelog')) title = '%s - %s' % (xbmc.getLocalizedString(24054), ADDON.getAddonInfo('name')) showText(title, text) except: pass
def getDataFromExternal(self, date, progress_callback = None): categories = self.getCategories() channels = os.path.join(datapath, 'chan.xml') try: if sfile.exists(channels): xml = sfile.read(channels) except: dixie.log('chan.xml does not exist') if not self.xml: self.xml = xml io = StringIO.StringIO(self.xml) context = ElementTree.iterparse(io, events=("start", "end")) return parseXMLTV(context, io, len(self.xml), progress_callback, self.offset, categories)
def showChangelog(addonID=None): try: if addonID: _ADDON = xbmcaddon.Addon(addonID) else: _ADDON = xbmcaddon.Addon(ADDONID) path = os.path.join(_ADDON.getAddonInfo('path'), 'changelog.txt') text = sfile.read(path) title = '%s - %s' % (xbmc.getLocalizedString(24054), _ADDON.getAddonInfo('name')) showText(title, text) except: pass
def extractAll(filename, dp, location): global CHANGELOG CHANGELOG = None zin = zipfile.ZipFile(filename, 'r') relroot = os.path.abspath(os.path.join(ROOT, os.pardir)) root = os.path.join(HOME, 'SF_Temp') profile = os.path.join(root, 'Super Favourites') #copy existing settings to root dst = os.path.join(root, 'settings.xml') src = os.path.join(ROOT, 'settings.xml') sfile.copy(src, dst) if IMPORT_RESET: try: sfile.rmtree(os.path.join(ROOT, 'Super Favourites')) except: pass try: nItem = float(len(zin.infolist())) index = 0 for item in zin.infolist(): index += 1 percent = int(index / nItem *100) filename = item.filename if dp: dp.update(percent, GETTEXT(30140) % filename, location, GETTEXT(30141)) if filename == 'settings.xml': if utils.DialogYesNo(GETTEXT(30135), line2='', line3=GETTEXT(30136), noLabel=None, yesLabel=None): zin.extract(item, root) elif filename == 'changelog.txt': try: zin.extract(item, root) filename = os.path.join(root, filename) CHANGELOG = sfile.read(filename) utils.DeleteFile(filename) except Exception, e: utils.log('Changelog error in extractAll') utils.log(e) elif filename.lower().startswith('super favourites'): zin.extract(item, root) elif filename.lower().startswith('s'): zin.extract(item, root)
def showChangelog(addonID=None): import sfile try: if addonID: ADDON = xbmcaddon.Addon(addonID) else: ADDON = xbmcaddon.Addon(ADDONID) path = os.path.join(HOME, 'changelog.txt') text = sfile.read(path) title = '%s - %s' % (xbmc.getLocalizedString(24054), ADDON.getAddonInfo('name')) showText(title, text) except: pass
def getLocalContent(url, ext): filename = None try: if sfile.isfile(url): filename = removeExtension(url) + '.' + ext if sfile.isdir(url): filename = url + '.' + ext if filename: return sfile.read(filename) except: pass return ''
def verifySuperSearch(): old = os.path.join(ROOT, 'Search') dst = os.path.join(ROOT, 'S') sfile.rename(old, dst) try: sfile.makedirs(dst) except: pass src = os.path.join(HOME, 'resources', 'search', FILENAME) dst = os.path.join(dst, FILENAME) if not sfile.exists(dst): sfile.copy(src, dst) try: #patch any changes xml = sfile.read(dst) xml = xml.replace('is/?action=movies_search&', 'is/?action=movieSearch&') xml = xml.replace('is/?action=people_movies&', 'is/?action=moviePerson&') xml = xml.replace('is/?action=shows_search&', 'is/?action=tvSearch&') xml = xml.replace('is/?action=people_shows&', 'is/?action=tvPerson&') f = sfile.file(dst, 'w') f.write(xml) f.close() except: pass import favourite new = favourite.getFavourites(src, validate=False) #line1 = GETTEXT(30123) #line2 = GETTEXT(30124) for item in new: fave, index, nFaves = favourite.findFave(dst, item[2]) if index < 0: #line = line1 % item[0] #if DialogYesNo(line1=line, line2=line2): favourite.addFave(dst, item)
def verifySuperSearch(): src = os.path.join(ROOT, 'Search') dst = os.path.join(ROOT, 'S') sfile.rename(src, dst) dst = os.path.join(ROOT, 'S') src = os.path.join(HOME, 'resources', 'Search', FILENAME) try: sfile.makedirs(dst) except: pass dst = os.path.join(dst, FILENAME) if not sfile.exists(dst): sfile.copy(src, dst) try: #patch any changes xml = sfile.read(dst) xml = xml.replace('1channel/?mode=7000', '1channel/?mode=Search') xml = xml.replace('plugin.video.genesis/?action=actors_movies', 'plugin.video.genesis/?action=people_movies') xml = xml.replace('plugin.video.genesis/?action=actors_shows', 'plugin.video.genesis/?action=people_shows') f = sfile.file(dst, 'w') f.write(xml) f.close() except: pass import favourite new = favourite.getFavourites(src, validate=False) line1 = GETTEXT(30123) line2 = GETTEXT(30124) for item in new: fave, index, nFaves = favourite.findFave(dst, item[2]) if index < 0: line = line1 % item[0] if DialogYesNo(line1=line, line2=line2): favourite.addFave(dst, item)
def verifySuperSearch(): src = os.path.join(ROOT, "Search") dst = os.path.join(ROOT, "S") sfile.rename(src, dst) dst = os.path.join(ROOT, "S") src = os.path.join(HOME, "resources", "Search", FILENAME) try: sfile.makedirs(dst) except: pass dst = os.path.join(dst, FILENAME) if not sfile.exists(dst): sfile.copy(src, dst) try: # patch any changes xml = sfile.read(dst) xml = xml.replace("1channel/?mode=7000", "1channel/?mode=Search") xml = xml.replace("plugin.video.genesis/?action=actors_movies", "plugin.video.genesis/?action=people_movies") xml = xml.replace("plugin.video.genesis/?action=actors_shows", "plugin.video.genesis/?action=people_shows") f = sfile.file(dst, "w") f.write(xml) f.close() except: pass import favourite new = favourite.getFavourites(src, validate=False) line1 = GETTEXT(30123) line2 = GETTEXT(30124) for item in new: fave, index, nFaves = favourite.findFave(dst, item[2]) if index < 0: line = line1 % item[0] if DialogYesNo(line1=line, line2=line2): favourite.addFave(dst, item)
def getSettingsApp(): try: import os import sfile log = sfile.read(os.path.join('special://temp', 'kodi.log')) if 'LVBX' in log: return 'com.mbx.settingsmbox' if 'Manufacturer: MBX' in log: return 'com.mbx.settingsmbox' if 'Brand: MBX' in log: return'com.mbx.settingsmbox' except: pass return 'com.android.settings'
def verifySource(): input = '<source><name>Livebox Cache</name><path pathversion="1">special://userdata/addon_data/script.video.thelivebox/</path></source></video>' source = os.path.join('special://userdata', 'sources.xml') if sfile.exists(source): contents = sfile.read(source) if 'Livebox Cache' in contents: Log('Source already exists') return True Log('Updating sources') contents = contents.replace('</video>', input) else: Log('Creating sources.xml file') contents = '<sources><video><default pathversion="1"></default>%s</sources>' % input sfile.write(source, contents) return False
def getFavourites(file, limit=10000, validate=True, superSearch=False, chooser=False): import xbmcgui prefix = '' if not chooser: prefix = 'HOME:' if xbmcgui.getCurrentWindowId() == 10000 else '' xml = '<favourites></favourites>' if sfile.exists(file): xml = sfile.read(file) items = [] faves = re.compile('<favourite(.+?)</favourite>').findall(xml) for fave in faves: fave = fave.replace('"', '&_quot_;') fave = fave.replace('\'', '"') fave = utils.unescape(fave) fave = fave.replace('name=""', '') try: name = re.compile('name="(.+?)"').findall(fave)[0] except: name = '' try: thumb = re.compile('thumb="(.+?)"').findall(fave)[0] except: thumb = '' try: cmd = fave.split('>', 1)[-1] except: cmd = '' #name = utils.Clean(name.replace( '&_quot_;', '"')) name = name.replace('&_quot_;', '"') thumb = thumb.replace('&_quot_;', '"') cmd = cmd.replace('&_quot_;', '"') add = False if superSearch: add = isValid(cmd) elif (SHOWUNAVAIL) or (not validate) or isValid(cmd): add = True if add: cmd = upgradeCmd(cmd) if cmd.startswith('PlayMedia'): option = 'mode' try: mode = int(favourite.getOption(cmd, option)) except: win = xbmcgui.getCurrentWindowId() cmd = updateSFOption(cmd, 'winID', win) name = resolve(name) cmd = patch(cmd) cmd = resolve(cmd) cmd = prefix + cmd items.append([name, thumb, cmd]) if len(items) > limit: return items return items
def getCachedData(url): cacheKey = createKey(url) cachePath = os.path.join(CacheDir, cacheKey) data = sfile.read(cachePath) return data