diff --git a/app.py b/app.py index 8558427..44ececf 100644 --- a/app.py +++ b/app.py @@ -14,6 +14,7 @@ from fastapi.responses import ( JSONResponse, RedirectResponse, StreamingResponse, + PlainTextResponse, ) from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles @@ -2011,6 +2012,49 @@ def vmix_match_events(session_token: str): return new_events +def _build_goal_authors_text(match_id: int) -> str: + """Возвращает авторов голов в 2 строки для текстового Data Source vMix. + + 1-я строка — голы первой команды, 2-я строка — голы второй команды. + Авторы внутри строки разделяются символом |. + """ + events = get_vmix_players_goal(match_id) + + home_authors = [] + away_authors = [] + + for home_goal, away_goal in events: + home_goal = (home_goal or "").strip() + away_goal = (away_goal or "").strip() + + if home_goal: + home_authors.append(home_goal) + if away_goal: + away_authors.append(away_goal) + + return "|".join(home_authors) + "\n" + "|".join(away_authors) + + +@app.get("/vmix/session/{session_token}/goal-authors.txt", response_class=PlainTextResponse) +def vmix_goal_authors_txt(session_token: str): + session_row = get_match_session_by_token(session_token) + if not session_row: + return PlainTextResponse("session_not_found", status_code=404) + + text = _build_goal_authors_text(session_row[1]) + return PlainTextResponse( + text, + media_type="text/plain; charset=utf-8", + headers={ + "Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", + "Pragma": "no-cache", + }, + ) + + +@app.get("/vmix/session/{session_token}/goal-authors", response_class=PlainTextResponse) +def vmix_goal_authors_text(session_token: str): + return vmix_goal_authors_txt(session_token) @app.get("/vmix/session/{session_token}/penalties")