From fdfebe06a63d53b199ad9915d302f9c35f4f33bb Mon Sep 17 00:00:00 2001 From: Krystian Lewandowski Date: Wed, 3 Apr 2019 22:30:56 +0200 Subject: [PATCH 1/5] go-to-parent --- curseradio/__init__.py | 2 +- curseradio/curseradio.py | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/curseradio/__init__.py b/curseradio/__init__.py index 605b28e..36c9c8d 100644 --- a/curseradio/__init__.py +++ b/curseradio/__init__.py @@ -1,4 +1,4 @@ __author__ = "Gordon Ball " -__version__ = "0.2" +__version__ = "0.3" from .curseradio import OPMLBrowser diff --git a/curseradio/curseradio.py b/curseradio/curseradio.py index beda01b..9b217fb 100644 --- a/curseradio/curseradio.py +++ b/curseradio/curseradio.py @@ -26,11 +26,11 @@ import xdg.BaseDirectory import configparser import re - +import sys CONFIG_DEFAULT = { 'opml': {'root': "http://opml.radiotime.com/"}, - 'playback': {'command': '/usr/bin/mpv'}, + 'playback': {'command': '/usr/local/bin/mpv'}, 'interface': {'keymap': 'default'}, 'keymap.default': { 'up': 'KEY_UP', @@ -42,7 +42,8 @@ 'enter': 'KEY_ENTER', 'stop': 'k', 'exit': 'q', - 'favourite': 'f' + 'parent': 'h', + 'favourite': 'f', } } @@ -311,7 +312,8 @@ def get_keymap(self): else: keysrc = self.config['keymap.default'] for key in ('up', 'down', 'start', 'end', 'pageup', 'pagedown', - 'enter', 'stop', 'exit', 'favourite'): + 'enter', 'stop', 'exit', 'favourite', + 'parent'): value = keysrc.get(key, self.config['keymap.default'][key]) if value.startswith('KEY_'): keymap[key] = getattr(curses, value) @@ -356,6 +358,16 @@ def move(self, rel=None, to=None): target = 0 elif to == "end": target = len(self.flat) - 1 + elif to == "parent": + target = self.top + self.cursor + showobjs = self.flat[0:target] + cdepth = self.flat[target][1] + for i, (obj, depth) in tuple(reversed(list(enumerate(showobjs)))): + if target >= 0: + target = target - 1 + if depth == cdepth - 1: + break + elif rel is not None: target = self.top + self.cursor + rel @@ -392,6 +404,8 @@ def interact(self): self.move(rel=-self.maxy) elif ch == self.keymap['pagedown']: # page down self.move(rel=self.maxy) + elif ch == self.keymap['parent']: + self.move(to="parent") elif ch == self.keymap['enter'] or ch == ord('\n'): for msg in self.selected.activate(): if isinstance(msg, str): From 2ec78e2cab71f937337d202e009417efb3ae5f9c Mon Sep 17 00:00:00 2001 From: Krystian Lewandowski Date: Fri, 5 Apr 2019 23:38:18 +0200 Subject: [PATCH 2/5] remove unused sys import --- curseradio/curseradio.py | 1 - 1 file changed, 1 deletion(-) diff --git a/curseradio/curseradio.py b/curseradio/curseradio.py index 9b217fb..9aa5c0f 100644 --- a/curseradio/curseradio.py +++ b/curseradio/curseradio.py @@ -26,7 +26,6 @@ import xdg.BaseDirectory import configparser import re -import sys CONFIG_DEFAULT = { 'opml': {'root': "http://opml.radiotime.com/"}, From e456987950cd3f7cff689a1ab4d9de61f7687040 Mon Sep 17 00:00:00 2001 From: Krystian Lewandowski Date: Fri, 5 Apr 2019 23:38:46 +0200 Subject: [PATCH 3/5] Update curseradio.py --- curseradio/curseradio.py | 1 + 1 file changed, 1 insertion(+) diff --git a/curseradio/curseradio.py b/curseradio/curseradio.py index 9aa5c0f..df4cf15 100644 --- a/curseradio/curseradio.py +++ b/curseradio/curseradio.py @@ -27,6 +27,7 @@ import configparser import re + CONFIG_DEFAULT = { 'opml': {'root': "http://opml.radiotime.com/"}, 'playback': {'command': '/usr/local/bin/mpv'}, From dc6294cc3984e4effda71d787db67fae45ad88bb Mon Sep 17 00:00:00 2001 From: Krystian Lewandowski Date: Fri, 5 Apr 2019 23:42:44 +0200 Subject: [PATCH 4/5] Update curseradio.py --- curseradio/curseradio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/curseradio/curseradio.py b/curseradio/curseradio.py index df4cf15..c22c33f 100644 --- a/curseradio/curseradio.py +++ b/curseradio/curseradio.py @@ -30,7 +30,7 @@ CONFIG_DEFAULT = { 'opml': {'root': "http://opml.radiotime.com/"}, - 'playback': {'command': '/usr/local/bin/mpv'}, + 'playback': {'command': '/usr/bin/mpv'}, 'interface': {'keymap': 'default'}, 'keymap.default': { 'up': 'KEY_UP', From 95d6d33202a06da7b1db5d7a599e6cd6e4ec073b Mon Sep 17 00:00:00 2001 From: Krystian Lewandowski Date: Sun, 22 Dec 2024 17:50:48 +0100 Subject: [PATCH 5/5] bugfix: disable no_network policy for lxml parser --- curseradio/curseradio.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/curseradio/curseradio.py b/curseradio/curseradio.py index c22c33f..cf8457c 100644 --- a/curseradio/curseradio.py +++ b/curseradio/curseradio.py @@ -60,7 +60,8 @@ def from_xml(cls, url, text="", attr=None): is currently discarded). """ if attr is None: attr = {} - tree = lxml.etree.parse(url) + parser = lxml.etree.XMLParser(dtd_validation=False, no_network=False) + tree = lxml.etree.parse(url, parser=parser) result = cls(text=text, attr=attr) result.children = [OPMLNode.from_element(o) for o in tree.xpath('/opml/body/outline')]