aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBlake DeMarcy <ofunknowndescent@gmail.com>2017-04-26 14:51:03 -0500
committerBlake DeMarcy <ofunknowndescent@gmail.com>2017-04-26 14:51:03 -0500
commit33b591293750db1de93c2c372706cf2e3b134dee (patch)
tree6114beb9dbabe7495885fb57adf7c2cb92947aed
parentc4f04173c44ec79c80de1eed47892e28fde2d704 (diff)
downloadbbj-33b591293750db1de93c2c372706cf2e3b134dee.tar.gz
add message feeds
-rw-r--r--clients/urwid/main.py1
-rw-r--r--server.py37
-rw-r--r--src/db.py48
3 files changed, 79 insertions, 7 deletions
diff --git a/clients/urwid/main.py b/clients/urwid/main.py
index 57bb119..0d7b977 100644
--- a/clients/urwid/main.py
+++ b/clients/urwid/main.py
@@ -1532,7 +1532,6 @@ class JumpPrompt(Prompt, urwid.IntEdit):
self.set_edit_pos(len(value))
-
def keypress(self, size, key):
keyl = key.lower()
if key == "enter":
diff --git a/server.py b/server.py
index d20432f..cb9a4f8 100644
--- a/server.py
+++ b/server.py
@@ -212,6 +212,37 @@ class API(object):
@api_method
+ def message_feed(self, args, database, user, **kwargs):
+ """
+ Returns a special object representing all activity on the board since
+ the argument `time`, a unix/epoch timestamp.
+
+ {
+ "threads": {
+ "thread_id": {
+ ...thread object
+ },
+ ...more thread_id/object pairs
+ },
+ "messages": [...standard message object array sorted by date]
+ }
+
+ The message objects in "messages" are the same objects returned
+ in threads normally. They each have a thread_id parameter, and
+ you can access metadata for these threads by the "threads" object
+ which is also provided.
+
+ The "messages" array is already sorted by submission time, newest
+ first. The order in the threads object is undefined and you should
+ instead use their `last_mod` attribute if you intend to list them
+ out visually.
+ """
+ validate(args, ["time"])
+ return db.message_feed(database, args["time"])
+
+
+
+ @api_method
def thread_create(self, args, database, user, **kwargs):
"""
Creates a new thread and returns it. Requires the non-empty
@@ -435,12 +466,6 @@ class API(object):
return response
- def test(self, **kwargs):
- print(cherrypy.request.body.read())
- return "{\"wow\": \"jolly good show!\"}"
- test.exposed = True
-
-
def api_http_error(status, message, traceback, version):
return json.dumps(schema.error(2, "HTTP error {}: {}".format(status, message)))
diff --git a/src/db.py b/src/db.py
index 1050e6a..ebb205d 100644
--- a/src/db.py
+++ b/src/db.py
@@ -30,6 +30,54 @@ import os
anon = None
+
+def message_feed(connection, time):
+ """
+ Returns a special object representing all activity on the board since
+ the argument `time`, a unix/epoch timestamp.
+
+ {
+ "threads": {
+ "thread_id": {
+ ...thread object
+ },
+ ...more thread_id/object pairs
+ },
+ "messages": [...standard message object array sorted by date]
+ }
+
+ The message objects in "messages" are the same objects returned
+ in threads normally. They each have a thread_id parameter, and
+ you can access metadata for these threads by the "threads" object
+ which is also provided.
+
+ The "messages" array is already sorted by submission time, newest
+ first. The order in the threads object is undefined and you should
+ instead use their `last_mod` attribute if you intend to list them
+ out visually.
+ """
+ threads = {
+ obj[0]: schema.thread(*obj) for obj in
+ connection.execute(
+ "SELECT * FROM threads WHERE last_mod > ?", (time,))
+ }
+
+ messages = list()
+ for thread in threads.values():
+ messages += [
+ schema.message(*obj) for obj in
+ connection.execute("""
+ SELECT * FROM messages WHERE thread_id = ?
+ AND created > ? """, (thread["thread_id"], time))
+ ]
+
+ return {
+ "threads": threads,
+ "messages": sorted(messages, key=lambda m: m["created"])
+ }
+
+
+
### THREADS ###
def thread_get(connection, thread_id, messages=True):
Un proyecto texto-plano.xyz