diff options
author | Blake DeMarcy <ofunknowndescent@gmail.com> | 2017-04-25 03:36:51 -0500 |
---|---|---|
committer | Blake DeMarcy <ofunknowndescent@gmail.com> | 2017-04-25 03:36:51 -0500 |
commit | 0f6846c3609c3b8caa34a296355e06d18261a1e1 (patch) | |
tree | 4fc46a36625b844f3c65ddd7b6062ea01b23efe0 | |
parent | 90b5573f842e1be81743194705fa94c41969da61 (diff) | |
download | bbj-0f6846c3609c3b8caa34a296355e06d18261a1e1.tar.gz |
add new parameter to threads: last_author
-rw-r--r-- | clients/urwid/main.py | 12 | ||||
-rw-r--r-- | dbupdate.py | 9 | ||||
-rw-r--r-- | schema.sql | 3 | ||||
-rw-r--r-- | server.py | 11 | ||||
-rw-r--r-- | src/db.py | 8 | ||||
-rw-r--r-- | src/schema.py | 6 | ||||
-rw-r--r-- | src/utils.py | 3 |
7 files changed, 37 insertions, 15 deletions
diff --git a/clients/urwid/main.py b/clients/urwid/main.py index fa343a3..0f0c942 100644 --- a/clients/urwid/main.py +++ b/clients/urwid/main.py @@ -594,17 +594,23 @@ class App(object): ] infoline = "%d replies; active %s" % ( - thread["reply_count"], self.timestring(thread["last_mod"], "delta")) + thread["reply_count"], + self.timestring(thread["last_mod"], "delta")) + last_author = self.usermap[thread["last_author"]] pile = [ urwid.Columns([(3, urwid.AttrMap(button, "button", "hover")), title]), urwid.Text(dateline), - urwid.AttrMap(urwid.Text(infoline), "dim"), + urwid.Text(("dim", infoline)), + urwid.Text([ + ("dim", "last post by "), + (str(last_author["color"]), "~" + last_author["user_name"]) + ]), urwid.AttrMap(urwid.Divider("-"), "dim") ] if self.prefs["index_spacing"]: - pile.insert(3, urwid.Divider()) + pile.insert(4, urwid.Divider()) pile = urwid.Pile(pile) pile.thread = thread diff --git a/dbupdate.py b/dbupdate.py new file mode 100644 index 0000000..717feb1 --- /dev/null +++ b/dbupdate.py @@ -0,0 +1,9 @@ +import sqlite3 + +with sqlite3.connect("data.sqlite") as _con: + _con.execute('ALTER TABLE threads ADD COLUMN last_author text DEFAULT ""') + _con.commit() + for tid in _con.execute("SELECT thread_id FROM threads"): + author = _con.execute("SELECT author FROM messages WHERE thread_id = ? ORDER BY post_id", tid).fetchall()[-1] + _con.execute("UPDATE threads SET last_author = ? WHERE thread_id = ?", author + tid) + _con.commit() @@ -22,7 +22,8 @@ create table threads ( last_mod real, -- floating point unix timestamp (of last post or post edit) created real, -- floating point unix timestamp (when thread was made) reply_count int, -- integer (incremental, starting with 0) - pinned int -- boolean + pinned int, -- boolean + last_author text -- uuid string ); @@ -87,24 +87,25 @@ def api_method(function): return wrapper -def create_usermap(connection, obj): +def create_usermap(connection, obj, index=False): """ Creates a mapping of all the user_ids that occur in OBJ to their full user objects (names, profile info, etc). Can be a thread_index or a messages object from one. """ - + user_set = {item["author"] for item in obj} + if index: + [user_set.add(item["last_author"]) for item in obj] return { user_id: db.user_resolve( connection, user_id, externalize=True, return_false=False) - for user_id in {item["author"] for item in obj} + for user_id in user_set } - def validate(json, args): """ Ensure the json object contains all the keys needed to satisfy @@ -206,7 +207,7 @@ class API(object): Requires no arguments. """ threads = db.thread_index(database) - cherrypy.thread_data.usermap = create_usermap(database, threads) + cherrypy.thread_data.usermap = create_usermap(database, threads, True) return threads @@ -106,11 +106,12 @@ def thread_create(connection, author_id, body, title, send_raw=False): thread_id = uuid1().hex scheme = schema.thread( thread_id, author_id, title, - now, now, -1, False) # see below for why i set -1 instead of 0 + now, now, -1, # see below for why i set -1 instead of 0 + False, author_id) connection.execute(""" INSERT INTO threads - VALUES (?,?,?,?,?,?,?) + VALUES (?,?,?,?,?,?,?,?) """, schema_values("thread", scheme)) connection.commit() # the thread is initially commited with reply_count -1 so that i can @@ -147,9 +148,10 @@ def thread_reply(connection, author_id, thread_id, body, send_raw=False, time_ov connection.execute(""" UPDATE threads SET reply_count = ?, + last_author = ?, last_mod = ? WHERE thread_id = ? - """, (count, now, thread_id)) + """, (count, author_id, now, thread_id)) connection.commit() return scheme diff --git a/src/schema.py b/src/schema.py index 7044c37..aedb765 100644 --- a/src/schema.py +++ b/src/schema.py @@ -128,7 +128,8 @@ def thread( last_mod, # floating point unix timestamp (of last post or post edit) created, # floating point unix timestamp (when thread was made) reply_count, # integer (incremental, starting with 0) - pinned): # boolean + pinned, # boolean + last_author): # uuid string return { "thread_id": thread_id, @@ -137,7 +138,8 @@ def thread( "last_mod": last_mod, "created": created, "reply_count": reply_count, - "pinned": bool(pinned) + "pinned": bool(pinned), + "last_author": last_author } diff --git a/src/utils.py b/src/utils.py index c533112..dbe4789 100644 --- a/src/utils.py +++ b/src/utils.py @@ -22,7 +22,8 @@ def schema_values(scheme, obj): elif scheme == "thread": return ordered_keys(obj, "thread_id", "author", "title", - "last_mod", "created", "reply_count", "pinned") + "last_mod", "created", "reply_count", + "pinned", "last_author") elif scheme == "message": return ordered_keys(obj, |