add message feeds

pull/4/head
Blake DeMarcy 2017-04-26 14:51:03 -05:00
parent c4f04173c4
commit 33b5912937
3 changed files with 79 additions and 7 deletions

View File

@ -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":

View File

@ -211,6 +211,37 @@ class API(object):
return threads
@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):
"""
@ -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)))

View File

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