diff --git a/bink.py b/bink.py index 5fb1584..57bf998 100755 --- a/bink.py +++ b/bink.py @@ -4,6 +4,8 @@ from time import time_ns import datetime import os from sys import argv +from subprocess import run +import tempfile home = os.path.expanduser("~/.bink") max_body_length = 64_000 @@ -13,6 +15,11 @@ try: except FileExistsError: pass +try: + editor = os.environ["EDITOR"] +except KeyError: + editor = "nano" + def create_post(body): with open(f"{home}/{time_ns()}", "w", encoding="UTF-8") as f: f.write(body) @@ -51,25 +58,53 @@ import urwid class App(object): def __init__(self): - self.walker = urwid.SimpleFocusListWalker([ + self.walker = urwid.SimpleListWalker([ self.post_to_widget(post) for post in generate_feed() ]) self.loop = urwid.MainLoop( - urwid.ListBox(self.walker) + ActionBox(self.walker) ) + def update(self, before=None, count=50): + self.walker.clear() + for post in generate_feed(before=before, count=count): + self.walker.append(self.post_to_widget(post)) + def post_to_widget(self, post): time = post["time"] / 1_000_000_000 stamp = datetime.datetime.fromtimestamp(time) return urwid.Pile([ urwid.Text([f"~{post['user']}", " @ ", stamp.strftime("%H:%M (%A, %B %d, %Y)")]), - urwid.Text(post["body"]), + urwid.Text(f" {post['body']}"), urwid.Divider() ]) + def write_with_editor(self): + self.loop.stop() + tmp = tempfile.NamedTemporaryFile() + run([editor, tmp.name]) + with open(tmp.name, "r") as f: + body = f.read().strip() + if body: + create_post(body) + self.update() + self.loop.start() + + +class ActionBox(urwid.ListBox): + def keypress(self, size, key): + keyl = key.lower() + if keyl == "c": + app.write_with_editor() + elif keyl == "r": + app.update() + elif keyl in ("q", "x"): + app.loop.stop() + exit() + return super().keypress(size, key) + app = App() try: app.loop.run() except KeyboardInterrupt: app.loop.stop() - exit() \ No newline at end of file