def loadFile(lItem): ext = getFileExtension(lItem[u'url']) if ext == u'cfg' or ext == u'list': filename = lItem[u'url'] else: filename = lItem[u'cfg'] for directory in [resDir, cacheDir, allsitesDir, catDir, '']: try: f = open(os.path.join(directory, filename), 'r') except IOError: pass else: data = smart_unicode(f.read()) f.close() data = data.splitlines() keys = [] values = [] for line in reversed(data): if line and not line.startswith(u'#'): key, value = line.split(u'=', 1) keys.append(key) values.append(value) return keys, values else: traceback.print_exc(file = sys.stdout) log(u'File Not Found: "%s"' % filename) raise
def _single_view_non_directory_modes_for_link(self, link): if link[u'type'] == u'search': link[u'mode'] = str(self.modes[u'VIEW_SEARCH']) elif getFileExtension(link[u'url']) == u'list': link[u'mode'] = str(self.modes[u'VIEW_DIRECTORY']) else: link[u'mode'] = str(self.modes[u'VIEW_RSS_DIRECTORY']) return link
def _single_view_non_directory_modes(self, item): if item[u'type'] == u'video': item[u'mode'] = str(self.modes[u'PLAY']) elif item[u'type'] == u'search': item[u'mode'] = str(self.modes[u'VIEW_SEARCH']) elif getFileExtension(item[u'url']) == u'list': item[u'mode'] = str(self.modes[u'VIEW_DIRECTORY']) elif islink: item[u'mode'] = str(self.modes[u'VIEW_RSS_DIRECTORY']) else: item[u'mode'] = str(self.modes[u'VIEW_RSS']) return item
def loadLocal(lItem, search_phrase = None): def loadKey(txt): return keys[-1] == txt and keys.pop() site = None links = [] keys, values = loadFile(lItem) ext = getFileExtension(lItem[u'url']) if ext == u'cfg' or ext == u'list': filename = lItem[u'url'] if ext == u'cfg' and u'cfg' not in lItem: lItem[u'cfg'] = filename else: filename = lItem[u'cfg'] # if u'type' in lItem and lItem[u'type'] == u'search' and search_phrase == None: # search_phrase = getSearchPhrase() while keys: old_line = len(keys) while keys and keys[-1].startswith(u'site_'): old_line = len(keys) if loadKey(u'site_start'): site = CRuleSite() if ext == u'cfg': site.start = values.pop() else: if lItem[u'type'] == u'search': lItem[u'url'] = lItem[u'url'] % search_phrase site.start = lItem[u'url'] del values[-1] if site.cfg == None and ext == u'cfg': site.cfg = filename elif u'cfg' in lItem: site.cfg = lItem[u'cfg'] if loadKey(u'site_header'): headers = values.pop().split(u'|') site.txheaders[headers[0]] = headers[1] if loadKey(u'site_skill'): site.skill = values.pop() skill_file = filename[:filename.find(u'.')] + u'.lnk' if site.skill.find(u'redirect') != -1: try: f = open(str(os.path.join(resDir, skill_file)), 'r') except IOError: pass else: forward_cfg = f.read() f.close() if forward_cfg != filename: lItem[u'url'] = forward_cfg lItem[u'cfg'] = forward_cfg return loadLocal(lItem) elif site.skill.find(u'store') != -1: f = open(str(os.path.join(resDir, skill_file)), 'w') f.write(filename) f.close() if loadKey(u'site_sort'): if values[-1].find(u'|') != -1: site.sort.extend(values.pop().split(u'|')) else: site.sort.append(values.pop()) if loadKey(u'site_startRE'): site.startRE = values.pop() if len(keys) == old_line: log(u'Syntax Error: "%s" is invalid.' % filename) del keys[-1] while keys and keys[-1].startswith(u'item_'): old_line = len(keys) if loadKey(u'item_infos'): rule_tmp = CRuleItem() rule_tmp.infos = values.pop() if loadKey(u'item_order'): if values[-1].find(u'|') != -1: rule_tmp.order.extend(values.pop().split(u'|')) else: rule_tmp.order.append(values.pop()) if loadKey(u'item_skill'): rule_tmp.skill = values.pop() if loadKey(u'item_curr'): rule_tmp.curr = values.pop() if loadKey(u'item_type'): rule_tmp.type = values.pop() while keys and keys[-1].startswith(u'item_info_'): old_line = len(keys) if loadKey(u'item_info_name'): info_tmp = CItemInfo() if values[-1].startswith(u'video.devil.context'): values[-1] = u'context.' + __language__(int(values[-1][20:])) info_tmp.name = values.pop() if loadKey(u'item_info_from'): info_tmp.src = values.pop() if loadKey(u'item_info'): info_tmp.rule = values.pop() if loadKey(u'item_info_default'): info_tmp.default = values.pop() if loadKey(u'item_info_build'): if values[-1].startswith(u'video.devil.'): if values[-1].startswith(u'video.devil.locale'): values[-1] = u' ' + __language__(int(values[-1][19:])) + u' ' elif values[-1].startswith(u'video.devil.image'): values[-1] = os.path.join(imgDir, values[-1][18:]) info_tmp.build = values.pop() rule_tmp.info_list.append(info_tmp) info_tmp = None if len(keys) == old_line: log(u'Syntax Error: "%s" is invalid.' % filename) del keys[-1] if loadKey(u'item_infos_actions'): if values[-1].find(u'|') != -1: rule_tmp.actions.extend(values.pop().split(u'|')) else: rule_tmp.actions.append(values.pop()) if loadKey(u'item_url_build'): rule_tmp.url_build = values.pop() if mode == u'VIEWALL_RSS' or mode == u'VIEWALL_SEARCH': if rule_tmp.type.startswith(u'video') or rule_tmp.type == u'next': site.rules.append(rule_tmp) elif rule_tmp.type == u'category' and not os.path.isfile(os.path.join(allsitesDir, rule_tmp.type + u'.list')): site.rules.append(rule_tmp) elif mode == u'VIEWALL_DIRECTORY': if rule_tmp.type == u'category' and not os.listdir(os.path.join(allsitesDir, rule_tmp.type)): site.rules.append(rule_tmp) elif mode == u'VIEW_RSS_DIRECTORY': if not rule_tmp.type.startswith(u'video'): site.rules.append(rule_tmp) else: site.rules.append(rule_tmp) rule_tmp = None if len(keys) == old_line: log(u'Syntax Error: "%s" is invalid.' % filename) del keys[-1] while keys and keys[-1].startswith(u'link_'): old_line = len(keys) if loadKey(u'link_title'): tmp = {} if values[-1].startswith(u'video.devil.locale'): values[-1] = __language__(int(values[-1][19:])) tmp[u'title'] = values.pop() while tmp != None and keys[-1] != u'link_url': if values[-1].startswith(u'video.devil.image'): values[-1] = os.path.join(imgDir, values[-1][18:]) tmp[keys[-1][5:]] = values.pop() del keys[-1] if loadKey(u'link_url'): tmp[u'url'] = values.pop() if filename == u'sites.list': if addon.getSetting(tmp[u'title']) == u'true': tmp[u'cfg'] = tmp[u'url'] links.append(tmp) else: tmp = inheritInfos(tmp, lItem) if site != None: tmp[u'title'] = u' ' + tmp[u'title'] + u' ' if ext == u'cfg' and tmp[u'type'] == u'once': tmp[u'type'] = u'links' site.links[tmp[u'type']] = (tmp, [tmp]) if mode == u'VIEW_RSS' or mode == u'VIEWALL_RSS' or mode == u'VIEWALL_SEARCH': for i in range(len(site.rules) - 1, 0, -1): if site.rules[i].type == tmp[u'type']: log('deleting rule type: "%s"' % tmp[u'type']) del site.rules[i] else: links.append(tmp) tmp = None break if len(keys) == old_line: log(u'Syntax Error: "%s" is invalid.' % filename) del keys[-1] if len(keys) == old_line: log(u'Syntax Error: "%s" is invalid.' % filename) del keys[-1] if site != None: return site return links