add low quality urwid code

This commit is contained in:
nebula 2025-04-21 01:10:11 +00:00
parent 611625679d
commit 73e488681c

43
bink.py
View File

@ -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()