feat(dsi): paginate Creator's Room uploads

Page through creator uploads while displaying the full total and safely rendering names.
This commit is contained in:
rekushi committed 2026-10-29 04:32:21 +00:00
1 parent 1fa962f868
commit cb689e6ef9
1 file changed
+9 -4
+9 -4
View File
@@ -3,7 +3,7 @@ from twisted.web import resource
from DB import Database from DB import Database
from hatena import NotFound, as_text from hatena import NotFound, as_text
from reximemo import dsi_url, flipnote_buttons, html_page, make_menu from reximemo import dsi_text_html, dsi_url, flipnote_buttons, html_page, make_menu, page_number, pagination_buttons
class PyResource(resource.Resource): class PyResource(resource.Resource):
@@ -38,12 +38,17 @@ class CreatorLeaf(resource.Resource):
room = Database.get_creator_room(self.room_id) room = Database.get_creator_room(self.room_id)
if not room: if not room:
return NotFound.render(request) return NotFound.render(request)
notes = Database.list_creator_flipnotes(self.room_id, limit=50) total = Database.count_flipnotes(room_id=self.room_id)
page = page_number(request, total)
notes = Database.list_creator_flipnotes(self.room_id, limit=50, offset=(page - 1) * 50)
if self.action in {"room.uls", "movies.uls"}: if self.action in {"room.uls", "movies.uls"}:
pager = pagination_buttons(request, f"creator/{self.room_id}/movies.uls", page, total)
prev = [item for item in pager if item["label"].startswith("Previous")]
nxt = [item for item in pager if item["label"].startswith("Next")]
request.setHeader(b"content-type", b"text/plain") request.setHeader(b"content-type", b"text/plain")
return make_menu( return make_menu(
layout=(2,1), title=room["display_name"], subtitle_top="Creator's Room", layout=(2,1), title=room["display_name"], subtitle_top="Creator's Room",
left="Flipnotes", right=str(len(notes)), buttons=flipnote_buttons(request, notes), left="Flipnotes", right=str(total), buttons=prev + flipnote_buttons(request, notes) + nxt,
corner={"label":"Post", "url":dsi_url(request, "ch/1.post")}, corner={"label":"Post", "url":dsi_url(request, "ch/1.post")},
) )
profile = ( profile = (
@@ -54,7 +59,7 @@ class CreatorLeaf(resource.Resource):
'<tr><th>Identity</th><td>%s</td></tr>' '<tr><th>Identity</th><td>%s</td></tr>'
'</table><p><a href="%s">View Flipnotes</a></p>' '</table><p><a href="%s">View Flipnotes</a></p>'
) % ( ) % (
html.escape(room["display_name"]), len(notes), dsi_text_html(room["display_name"]), total,
"Account" if room.get("account_id") else "Guest/IP", "Account" if room.get("account_id") else "Guest/IP",
html.escape(dsi_url(request, f"creator/{self.room_id}/movies.uls"), quote=True), html.escape(dsi_url(request, f"creator/{self.room_id}/movies.uls"), quote=True),
) )