diff --git a/client/server.py b/client/server.py index a6a8163a..35025e51 100644 --- a/client/server.py +++ b/client/server.py @@ -31,13 +31,17 @@ def user_embed(username: str) -> Metadata: user = requests.get(BACKEND_BASE_URL + "/api/user/" + username).json() yield "og:image:url", urllib.parse.join(PUBLIC_BASE_URL, user["avatarUrl"]) -def _image_embed(post: Dict[str, Any]) -> Metadata: +def _image_embed(post: Dict[str, Any], skip_twitter_player=False) -> Metadata: url = PUBLIC_BASE_URL + post["contentUrl"] if post["type"] == "video": prefix = "og:video" yield "og:image", PUBLIC_BASE_URL + post["thumbnailUrl"] - yield "twitter:card", "player" + if not skip_twitter_player: + yield "twitter:card", "player" + yield "twitter:player", PUBLIC_BASE_URL + f"/player/{post['id']}" + yield "twitter:player:width", str(post["canvasWidth"]) + yield "twitter:player:height", str(post["canvasHeight"]) else: prefix = "og:image" yield "twitter:card", "summary_large_image" @@ -52,7 +56,7 @@ def _image_embed(post: Dict[str, Any]) -> Metadata: def _author_embed(user: Dict[str, Any]) -> Metadata: yield "article:author", PUBLIC_BASE_URL + "/user/" + user["name"] -def post_embed(post_id: int) -> Metadata: +def post_embed(post_id: int, *, skip_twitter_player=False) -> Metadata: post = requests.get(BACKEND_BASE_URL + f"/api/post/{post_id}").json() yield "og:type", "article" yield from _author_embed(post["user"]) @@ -61,14 +65,14 @@ def post_embed(post_id: int) -> Metadata: value = "Tags: " + ", ".join(tag["names"][0] for tag in post["tags"]) yield "og:description", value yield "description", value - yield from _image_embed(post) + yield from _image_embed(post, skip_twitter_player) -def homepage_embed(server_info: Dict[str, Any]) -> Metadata: +def homepage_embed(server_info: Dict[str, Any], *, skip_twitter_player=False) -> Metadata: yield "og:title", server_info["config"]["name"] yield "og:type", "website" post = server_info["featuredPost"] if post is not None: - yield from _image_embed(post) + yield from _image_embed(post, skip_twitter_player) def render_embed(metadata: Metadata) -> str: out = [] @@ -77,6 +81,28 @@ def render_embed(metadata: Metadata) -> str: out.append(f'') return ''.join(out) +def serve_twitter_video_player(start_response, post_id: int): + r = requests.get(BACKEND_BASE_URL + f"/api/post/{post_id}") + data = r.json() + if r.status_code != HTTPStatus.OK: + start_response(r.status_code, [("Content-Type", "text/html; charset=utf-8")]) + yield f"
{html.escape(data['description'])}
".encode("utf-8"), + + start_response(http_status.OK, [("Content-Type", "text/html; charset=utf-8")]) + post = data + yield b"