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
Example #2
0
 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
Example #3
0
 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