commit - b5ebf4c73102fa0f823ff1c0eaad49c387aeb3a5
commit + 3601f1e9b8cf6ad43170a5a87b4254efd32ac30d
blob - 843f5dd7dfffa7f84b7d37c64ec19bfef628b0fe
blob + 4c889b567270a0ca3d25d70848322816751150e0
--- lonk.py
+++ lonk.py
convoy TEXT,
client_id INTEGER,
honk_id INTEGER,
- honker TEXT,
+ handle TEXT,
+ oondle TEXT,
url TEXT,
html TEXT,
date TEXT,
public INTEGER,
handles TEXT,
+ honker_url TEXT,
+ oonker_url TEXT,
FOREIGN KEY (client_id) REFERENCES client (client_id),
UNIQUE (convoy, client_id),
UNIQUE (honk_id, client_id)
db_con.execute(
"""
CREATE TABLE
+ xonker (
+ xonker_id INTEGER PRIMARY KEY,
+ client_id INTEGER,
+ convoy_id INTEGER,
+ url TEXT NOT NULL,
+ FOREIGN KEY (client_id) REFERENCES client (client_id),
+ FOREIGN KEY (convoy_id) REFERENCES convoy (convoy_id)
+ )
+ """
+ )
+ db_con.execute(
+ """
+ CREATE TABLE
meta (
db_schema_version INTEGER
)
class _LonkTreeItem:
- def __init__(self, convoy_id, convoy, honk_id, honker, url, html, date, public, handles):
+ def __init__(self, convoy_id, convoy, honk_id, handle, oondle, url, html, date, public, handles, honker, oonker):
self.convoy_id = convoy_id
self.convoy = convoy
self.honk_id = honk_id
- self.honker = honker
+ self.handle = handle
+ self.oondle = oondle
self.url = url
self.html = html
self.date = date
self.public = bool(public)
self.handles = handles
+ self.honker = honker
+ self.oonker = oonker
self.donks = []
- self.reposters = []
self.thread = []
def iterate_honks(self):
if self.html is not None:
- handle = self.honker
- if self.reposters:
- handle += " (🔁 " + ", ".join(reason for reason in set(self.reposters)) + ")"
yield {
"Convoy": self.convoy,
- "Handle": handle,
+ "Handle": self.handle,
+ "Oondle": self.oondle,
"ID": self.honk_id,
"XID": self.url,
"HTML": self.html,
"Date": self.date,
"Public": self.public,
"Handles": self.handles,
+ "Honker": self.honker,
+ "Oonker": self.oonker,
"Donks": [
{"URL": donk[0], "Media": donk[1], "Desc": donk[2]}
for donk in self.donks
if convoy not in lonk_page:
row = db_con.execute(
- "SELECT convoy_id, convoy, honk_id, honker, url, html, date, public, handles FROM convoy WHERE client_id=? AND convoy=?",
+ """
+ SELECT
+ convoy_id, convoy, honk_id, handle, oondle, url, html, date, public, handles, honker_url, oonker_url
+ FROM
+ convoy
+ WHERE
+ client_id=? AND convoy=?
+ """,
(client_id, convoy)
).fetchone()
if row:
lonk_page[convoy].donks.append((donk_url, donk_mime, donk_text))
if convoy not in lonk_page:
- def _save_convoy(convoy, honker, honk):
+ def _save_convoy(convoy, honk):
is_public = 1 if honk.get("Public") else 0
row = db_con.execute(
"""
INSERT INTO
- convoy(convoy, client_id, honk_id, honker, url, html, date, public, handles)
+ convoy(convoy, client_id, honk_id, handle, oondle, url, html, date, public, handles, honker_url, oonker_url)
VALUES
- (?, ?, ?, ?, ?, ?, ?, ?, ?)
+ (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
RETURNING
- convoy_id
+ convoy_id, convoy, honk_id, handle, oondle, url, html, date, public, handles, honker_url, oonker_url
""",
- (convoy, client_id, honk["ID"], honker, honk["XID"], honk["HTML"], honk["Date"], is_public, honk["Handles"])
+ (convoy, client_id, honk["ID"], honk["Handle"], honk.get("Oondle"), honk["XID"], honk["HTML"], honk["Date"], is_public, honk["Handles"], honk.get("Honker"), honk.get("Oonker"))
).fetchone()
- convoy_id, = row
- lonk_page[convoy] = _LonkTreeItem(
- convoy_id, convoy, honk["ID"], honker, honk["XID"], honk["HTML"], honk["Date"], is_public, honk["Handles"]
- )
+ lonk_page[convoy] = _LonkTreeItem(*row)
for donk in (honk.get("Donks") or []):
donk_url = honk_url.build_url(path=f'/d/{donk["XID"]}') if donk.get("XID") else donk["URL"]
if honk.get("RID"):
for honk_in_convoy in honk_url.do_get("gethonks", page="convoy", c=convoy)["honks"]:
if not honk_in_convoy.get("RID"):
- honker = honk_in_convoy.get("Oondle") or honk_in_convoy["Handle"]
- _save_convoy(convoy, honker, honk_in_convoy)
+ _save_convoy(convoy, honk_in_convoy)
break
else:
- _save_convoy(convoy, None, {"ID": None, "XID": None, "HTML": None, "Date": None, "Handles": None})
+ _save_convoy(convoy, {"ID": None, "Handle": None, "XID": None, "HTML": None, "Date": None, "Handles": None})
else:
- _save_convoy(convoy, honk.get("Oondle") or honk["Handle"], honk)
+ _save_convoy(convoy, honk)
- if honk.get("What") == "bonked":
- lonk_page[convoy].reposters.append(honk["Handle"])
if honk.get("RID"):
lonk_page[convoy].thread.append(honk)
return
gethonks_answer = honk_url.do_get("gethonks", page="convoy", c=query["c"])
- gethonks_answer["honks"] = [
- honk
- for honk in (gethonks_answer.pop("honks", None) or [])
- if honk.get("What") != "bonked"
- ]
print("20 text/gemini\r")
print(f"# 𝓗 onk: convoy {query['c']}\r")
print("\r")
print_gethonks(gethonks_answer, lonk_url, honk_url)
+def page_myhonks(db_con, client_id, lonk_url, honk_url):
+ gethonks_answer = honk_url.do_get("gethonks", page="myhonks")
+ print("20 text/gemini\r")
+ print("# 𝓗 onk: my honks")
+ print("\r")
+ print_gethonks(gethonks_answer, lonk_url, honk_url)
+
+
+def page_honker(db_con, client_id, lonk_url, honk_url):
+ xid = {pair[0]: pair[1] for pair in parse_qsl(lonk_url.query)}.get("xid")
+ if not xid:
+ print("51 Not found\r")
+ return
+
+ gethonks_answer = honk_url.do_get("gethonks", page="honker", xid=xid)
+ print("20 text/gemini\r")
+ print(f"# 𝓗 onk: honks of {xid}\r")
+ print("\r")
+ print_gethonks(gethonks_answer, lonk_url, honk_url)
+
+
def print_gethonks(gethonks_answer, lonk_url, honk_url):
def _menu():
print(f"=> {honk_url.build_url(path='honkers')} honkers\r")
print(f"=> {lonk_url.build('search')} search\r")
print(f"=> {lonk_url.build('longago')} long ago\r")
+ print(f"=> {lonk_url.build('myhonks')} my honks\r")
_menu()
print("\r")
print("\r")
for honk in gethonks_answer.get("honks") or []:
- if honk.get("What") == "bonked":
- continue
-
convoy = honk["Convoy"]
re_url = honk.get("RID")
+ oondle = honk.get("Oondle")
+ from_ = f'{oondle} (🔁 {honk["Handle"]})' if oondle else f'{honk["Handle"]}'
lines = [
- f'##{"# ↱" if re_url else ""} From {honk["Handle"]} {honk["Date"]}',
+ f'##{"# ↱" if re_url else ""} From {from_} {honk["Date"]}',
f'=> {lonk_url.build("convoy", urlencode({"c": convoy}))} Convoy {convoy}',
f'=> {honk["XID"]}',
]
if honk.get("Public"):
lines.append(f'=> {lonk_url.build("bonk", urlencode({"w": honk["XID"]}))} ↺ bonk')
lines.append(f'=> {honk_url.build_url(path="newhonk", query=urlencode({"rid": honk["XID"]}))} ↱ honk back')
+ for xonker in (honk.get("Honker"), honk.get("Oonker")):
+ if xonker:
+ lines.append(f'=> {lonk_url.build("honker", urlencode({"xid": xonker}))} honks of {xonker}')
print("\r\n".join(lines))
print("\r")
return
bonk_answer = honk_url.do_get("zonkit", wherefore="bonk", what=what, answer_is_json=False)
- print(f'30 {lonk_url.build([])}\r')
+ print(f'30 {lonk_url.build("myhonks")}\r')
def authenticated(cert_hash, lonk_url, fn_impl):
authenticated(cert_hash, lonk_url, page_search)
elif lonk_url.page == "longago":
authenticated(cert_hash, lonk_url, page_longago)
+ elif lonk_url.page == "myhonks":
+ authenticated(cert_hash, lonk_url, page_myhonks)
+ elif lonk_url.page == "honker":
+ authenticated(cert_hash, lonk_url, page_honker)
elif lonk_url.page == "bonk":
authenticated(cert_hash, lonk_url, bonk)
elif lonk_url.page == "ask_server":