コード例 #1
0
ファイル: views.py プロジェクト: thefon/jellyfin-kodi
    def add_node(self, index, file, view, node, name):

        try:
            xml = etree.parse(file).getroot()
        except Exception:
            xml = self.node_root('filter', index)
            etree.SubElement(xml, 'label')
            etree.SubElement(xml, 'match')
            etree.SubElement(xml, 'content')

        label = xml.find('label')
        label.text = str(name) if type(name) == int else name

        content = xml.find('content')
        content.text = view['Media']

        match = xml.find('match')
        match.text = "all"

        for rule in xml.findall('.//value'):
            if rule.text == view['Tag']:
                break
        else:
            rule = etree.SubElement(xml, 'rule', {
                'field': "tag",
                'operator': "is"
            })
            etree.SubElement(rule, 'value').text = view['Tag']

        getattr(self,
                'node_' + node)(xml)  # get node function based on node type
        indent(xml)
        write_xml(etree.tostring(xml, 'UTF-8'), file)
コード例 #2
0
ファイル: views.py プロジェクト: thefon/jellyfin-kodi
def verify_kodi_defaults():
    ''' Make sure we have the kodi default folder in place.
    '''
    node_path = xbmc.translatePath("special://profile/library/video").decode(
        'utf-8')

    if not xbmcvfs.exists(node_path):
        try:
            shutil.copytree(
                src=xbmc.translatePath(
                    "special://xbmc/system/library/video").decode('utf-8'),
                dst=xbmc.translatePath(
                    "special://profile/library/video").decode('utf-8'))
        except Exception as error:
            xbmcvfs.mkdir(node_path)

    for index, node in enumerate(['movies', 'tvshows', 'musicvideos']):
        file = os.path.join(node_path, node, "index.xml")

        if xbmcvfs.exists(file):

            xml = etree.parse(file).getroot()
            xml.set('order', str(17 + index))
            indent(xml)
            write_xml(etree.tostring(xml, 'UTF-8'), file)

    playlist_path = xbmc.translatePath(
        "special://profile/playlists/video").decode('utf-8')

    if not xbmcvfs.exists(playlist_path):
        xbmcvfs.mkdirs(playlist_path)
コード例 #3
0
ファイル: views.py プロジェクト: thefon/jellyfin-kodi
    def add_playlist(self, path, view, mixed=False):
        ''' Create or update the xps file.
        '''
        file = os.path.join(path,
                            "jellyfin%s%s.xsp" % (view['Media'], view['Id']))

        try:
            xml = etree.parse(file).getroot()
        except Exception:
            xml = etree.Element('smartplaylist', {'type': view['Media']})
            etree.SubElement(xml, 'name')
            etree.SubElement(xml, 'match')

        name = xml.find('name')
        name.text = view['Name'] if not mixed else "%s (%s)" % (view['Name'],
                                                                view['Media'])

        match = xml.find('match')
        match.text = "all"

        for rule in xml.findall('.//value'):
            if rule.text == view['Tag']:
                break
        else:
            rule = etree.SubElement(xml, 'rule', {
                'field': "tag",
                'operator': "is"
            })
            etree.SubElement(rule, 'value').text = view['Tag']

        indent(xml)
        write_xml(etree.tostring(xml, 'UTF-8'), file)
コード例 #4
0
    def str_pretty(self, verbosity=1):
        s = ''

        if verbosity > 0:
            s += 'Skipped because ' + self.reason
            if self.blacklist_item:
                if verbosity == 1:
                    s += ' ' + self.blacklist_item.get_name()
                if verbosity > 1:
                    s += ':\n' + indent(
                        self.blacklist_item.str_pretty(verbosity))

            s += '\nNumbers:\n' + indent(self.tipp.str_pretty(verbosity))
        return s
コード例 #5
0
ファイル: views.py プロジェクト: thefon/jellyfin-kodi
    def add_dynamic_node(self, index, file, view, node, name, path):

        try:
            xml = etree.parse(file).getroot()
        except Exception:
            xml = self.node_root('folder', index)
            etree.SubElement(xml, 'label')
            etree.SubElement(xml, 'content')

        label = xml.find('label')
        label.text = name

        getattr(self, 'node_' + node)(xml, path)
        indent(xml)
        write_xml(etree.tostring(xml, 'UTF-8'), file)
コード例 #6
0
    def add_single_node(self, path, index, item_type, view):

        file = os.path.join(path,
                            "jellyfin_%s.xml" % view['Tag'].replace(" ", ""))

        try:
            xml = etree.parse(file).getroot()
        except Exception:
            LOG.warning("Unable to parse file '%s'", file)
            xml = self.node_root(
                'folder' if item_type == 'favorites'
                and view['Media'] == 'episodes' else 'filter', index)
            etree.SubElement(xml, 'label')
            etree.SubElement(xml, 'match')
            etree.SubElement(xml, 'content')

        label = xml.find('label')
        label.text = view['Name']

        content = xml.find('content')
        content.text = view['Media']

        match = xml.find('match')
        match.text = "all"

        if view['Media'] != 'episodes':

            for rule in xml.findall('.//value'):
                if rule.text == view['Tag']:
                    break
            else:
                rule = etree.SubElement(xml, 'rule', {
                    'field': "tag",
                    'operator': "is"
                })
                etree.SubElement(rule, 'value').text = view['Tag']

        if item_type == 'favorites' and view['Media'] == 'episodes':
            path = self.window_browse(view, 'FavEpisodes')
            self.node_favepisodes(xml, path)
        else:
            self.node_all(xml)

        indent(xml)
        write_xml(etree.tostring(xml, 'UTF-8'), file)
コード例 #7
0
ファイル: views.py プロジェクト: thefon/jellyfin-kodi
    def node_index(self, folder, view, mixed=False):

        file = os.path.join(folder, "index.xml")
        index = self.sync['SortedViews'].index(view['Id'])

        try:
            xml = etree.parse(file).getroot()
            xml.set('order', str(index))
        except Exception:
            xml = self.node_root('main', index)
            etree.SubElement(xml, 'label')

        label = xml.find('label')
        label.text = view['Name'] if not mixed else "%s (%s)" % (
            view['Name'], _(view['Media']))

        indent(xml)
        write_xml(etree.tostring(xml, 'UTF-8'), file)