retronews

a featureful fork of the luke8086/retronews hn+lobste.rs tui
Log | Files | Refs | README | LICENSE

commit da466cc17a286d05008d119341c1bf35f1d4ae5b
parent 45fefc7b1c231eef28b6c69654bdd43afa7e1b1b
Author: luke8086 <55237178+luke8086@users.noreply.github.com>
Date:   Wed, 20 Jul 2022 17:23:35 +0000

Parse message body when message is selected for easier debugging

Diffstat:
Mretronews.py | 30+++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)

diff --git a/retronews.py b/retronews.py @@ -46,12 +46,11 @@ class Colors: class Message: msg_id: str story_id: str + date: datetime author: str title: str - date: datetime - loaded: bool = False + body: Optional[str] = None lines: List[str] = field(default_factory=list) - raw_lines: List[str] = field(default_factory=list) children: List["Message"] = field(default_factory=list) index_position: int = 0 index_tree: str = "" @@ -171,6 +170,7 @@ def cmd_close(app: AppState) -> None: def cmd_toggle_raw_mode(app: AppState) -> None: app.raw_mode = not app.raw_mode + app_select_message(app, app.selected_message) def cmd_unknown(app: AppState) -> None: @@ -193,8 +193,11 @@ KEY_BINDINGS = { def app_select_message(app: AppState, message: Optional[Message]) -> None: app.selected_message = message - if message is None or not message.loaded: + if message is None or message.body is None: app.pager_visible = False + return + + message.lines = wrap(message.body) if app.raw_mode else parse_html(message.body) def app_load_messages(app: AppState, messages: List[Message], selected_message_id: Optional[str] = None) -> None: @@ -257,10 +260,8 @@ def app_render_pager(app: AppState, top: int, height: int) -> None: if message is None: return - lines = message.raw_lines if app.raw_mode else message.lines - for i in range(height): - line = list_get(lines, i) or "" + line = list_get(message.lines, i) or "" app.screen.insstr(i + top, 0, line[: curses.COLS].ljust(curses.COLS)) @@ -344,30 +345,25 @@ def hn_parse_search_hit(hit: HNSearchHit) -> Message: return Message( msg_id=f"{hit['objectID']}@hn", story_id=f"{hit['objectID']}@hn", + date=datetime.fromtimestamp(hit["created_at_i"]), author=hit["author"], title=hit["title"], - date=datetime.fromtimestamp(hit["created_at_i"]), - loaded=False, - lines=[], - raw_lines=[], ) def hn_parse_entry(entry: HNEntry, story_id: str = "", parent_title: str = "") -> Message: story_id = story_id or str(entry["id"]) - content = f"<p>{entry['url']}</p>" if entry["url"] else "" - content = f"{content}{entry['text']}" if entry["text"] else content + body = f"<p>{entry['url']}</p>" if entry["url"] else "" + body = f"{body}{entry['text']}" if entry["text"] else body return Message( msg_id=f"{entry['id']}@hn", story_id=f"{story_id}@hn", + date=datetime.fromtimestamp(entry["created_at_i"]), author=entry["author"] or "unknown", title=entry["title"] or f"Re: {parent_title}", - date=datetime.fromtimestamp(entry["created_at_i"]), - loaded=True, - lines=parse_html(content), - raw_lines=wrap(content), + body=body, children=[hn_parse_entry(child, story_id, entry["title"] or parent_title) for child in entry["children"]], )