Broken project to implement a cross-protocol browser in textual
mime: Support plaintext format as well
| -rw-r--r-- | .gitignore | 1 | ||||
| -rwxr-xr-x | browset.py | 9 | ||||
| -rw-r--r-- | mime/gemtext.py (renamed from gemtext.py) | 3 | ||||
| -rw-r--r-- | mime/plaintext.py | 16 |
4 files changed, 26 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ @@ -4,7 +4,8 @@ from textual.widgets import Input, Button, Static, Footer from textual.containers import Container from rich.markdown import Markdown from textual.binding import Binding -from gemtext import Gemtext +from mime.gemtext import Gemtext +from mime.plaintext import Plaintext from protocol.gemini import GeminiProtocol class Browset(App): @@ -69,7 +70,11 @@ class Browset(App): self.url = url (mime, fp) = GeminiProtocol.get(url) self.query_one("#content").remove() - self.mount(Gemtext(fp=fp, id="content")) + if "text/gemini" in mime: + content = Gemtext(fp=fp, id="content") + else: + content = Plaintext(fp=fp, id="content") + self.mount(content) if __name__ == "__main__": app = Browset() diff --git a/gemtext.py b/mime/gemtext.py index 602d308..9436d3f 100644 --- a/gemtext.py +++ b/mime/gemtext.py @@ -1,6 +1,7 @@ from textual.widgets import Button, Static from textual.app import ComposeResult from textual.containers import Container +from rich.text import Text class Gemtext(Static): """Gemtext widget.""" @@ -26,7 +27,7 @@ class Gemtext(Static): elif line.startswith("=>"): path = line[2:].lstrip().split(' ')[0] text = ' '.join(line[2:].lstrip().split(' ')[1:]) - self.mount(Button(text or path, name=path)) + self.mount(Button(Text(text or path,overflow="fold"), name=path)) elif line.startswith("#"): count = line.split(' ')[0][0:3].count("#") w = Static(line.lstrip("#"), markup=False, classes="header h"+str(count)) diff --git a/mime/plaintext.py b/mime/plaintext.py new file mode 100644 index 0000000..ff548e5 --- /dev/null +++ b/mime/plaintext.py @@ -0,0 +1,16 @@ +from textual.widgets import Static + +class Plaintext(Static): + """Plaintext widget.""" + + def __init__(self, fp, id): + super().__init__(id=id) + self.addlines(fp) + + def addlines(self, fp): + for lin in fp: + line = lin + if type(line) is bytes: + line = line.decode("UTF-8") + line = line.rstrip("\r\n") + self.mount(Static(line, markup=False)) |