import html from twisted.web import resource from DB import Database from hatena import NotFound, as_text from reximemo import dsi_text_html, dsi_url, flipnote_buttons, html_page, make_menu, page_number, pagination_buttons class PyResource(resource.Resource): isLeaf = False def getChild(self, name, request): try: room_id = int(as_text(name)) except ValueError: return NotFound return CreatorNode(room_id) if Database.get_creator_room(room_id) else NotFound class CreatorNode(resource.Resource): isLeaf = False def __init__(self, room_id): super().__init__(); self.room_id = room_id def getChild(self, name, request): text = as_text(name) aliases = {"room.ugo":"room.uls", "movies.ugo":"movies.uls"} text = aliases.get(text, text) if text in {"profile.htm", "room.uls", "movies.uls"}: return CreatorLeaf(self.room_id, text) return NotFound class CreatorLeaf(resource.Resource): isLeaf = True def __init__(self, room_id, action): super().__init__(); self.room_id = room_id; self.action = action def render_GET(self, request): room = Database.get_creator_room(self.room_id) if not room: return NotFound.render(request) 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"}: 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") return make_menu( layout=(2,1), title=room["display_name"], subtitle_top="Creator's Room", left="Flipnotes", right=str(total), buttons=prev + flipnote_buttons(request, notes) + nxt, corner={"label":"Post", "url":dsi_url(request, "ch/1.post")}, ) profile = ( '
| Flipnotes | %d |
|---|---|
| Identity | %s |