Compare commits

...

2 Commits

2 changed files with 74 additions and 16 deletions

18
app.py
View File

@@ -646,22 +646,28 @@ def load_match_data(request: Request, session_token: str):
match_external_id = session_row[8]
try:
run_parser_game(str(match_external_id))
# сброс ручного состава и тренеров, чтобы подтянулись свежие данные парсера
from db import get_connection
# Сначала очищаем ручные данные матча,
# чтобы парсер потом записал свежие составы и тренеров
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute(
"DELETE FROM match_lineup_players WHERE match_id = %s", (match_id,)
"DELETE FROM match_lineup_players WHERE match_id = %s",
(match_id,),
)
cur.execute(
"DELETE FROM match_coaches WHERE match_id = %s",
(match_id,),
)
cur.execute("DELETE FROM match_coaches WHERE match_id = %s", (match_id,))
conn.commit()
finally:
conn.close()
# Потом загружаем свежие данные с сайта
run_parser_game(str(match_external_id))
except Exception as e:
error_text = str(e) or "Ошибка загрузки данных с сайта"
@@ -692,7 +698,7 @@ def load_match_data(request: Request, session_token: str):
return RedirectResponse(
url=f"/admin/session/{session_token}?tab=game",
status_code=303,
)
)
@app.post("/admin/session/{session_token}/close")

View File

@@ -143,16 +143,21 @@
href="/admin/session/{{ session[3] }}?tab=referees"
>Судьи</a
>
<a
class="tab-link {% if tab == 'tour_schedule' %}active{% endif %}"
href="/admin/session/{{ session[3] }}?tab=tour_schedule"
>Расписание тура</a
>
<a
class="tab-link {% if tab == 'standings' %}active{% endif %}"
href="/admin/session/{{ session[3] }}?tab=standings"
>Турнирная таблица</a
>
<a
class="tab-link {% if tab == 'tour_schedule' %}active{% endif %}"
href="/admin/session/{{ session[3] }}?tab=tour_schedule"
data-vmix-title="РАСПИСАНИЕ ТУРА"
>
Расписание тура
</a>
<a
class="tab-link {% if tab == 'standings' %}active{% endif %}"
href="/admin/session/{{ session[3] }}?tab=standings"
data-vmix-title="ТУРНИРНАЯ ТАБЛИЦА"
>
Турнирная таблица
</a>
</div>
{% if tab == 'game' %}
@@ -1173,6 +1178,53 @@
}, 15000);
})();
</script>
<script>
(function () {
const matchId = window.MATCH_DATA?.matchId;
const sessionToken = window.MATCH_DATA?.sessionToken;
if (!matchId || !sessionToken) {
return;
}
async function sendVmixTitle(titleText) {
if (!titleText) return;
try {
await fetch("/api/vmix/publish-command", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest"
},
credentials: "same-origin",
body: JSON.stringify({
match_id: matchId,
session_token: sessionToken,
commands: [
`TITLE_PREVIEW:${titleText}`
],
meta: {
source: "tab_click",
title: titleText
}
})
});
} catch (error) {
console.error("Не удалось отправить команду в vMix:", error);
}
}
document.addEventListener("click", function (event) {
const link = event.target.closest(".tab-link[data-vmix-title]");
if (!link) return;
const titleText = link.dataset.vmixTitle;
sendVmixTitle(titleText);
});
})();
</script>
<script src="/static/script.js"></script>
<div id="matrixLoader" class="matrix-loader" aria-hidden="true">
<canvas id="matrixCanvas" class="matrix-canvas"></canvas>