Compare commits

...

2 Commits

2 changed files with 74 additions and 16 deletions

16
app.py
View File

@@ -646,22 +646,28 @@ def load_match_data(request: Request, session_token: str):
match_external_id = session_row[8] match_external_id = session_row[8]
try: try:
run_parser_game(str(match_external_id))
# сброс ручного состава и тренеров, чтобы подтянулись свежие данные парсера
from db import get_connection from db import get_connection
# Сначала очищаем ручные данные матча,
# чтобы парсер потом записал свежие составы и тренеров
conn = get_connection() conn = get_connection()
try: try:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute( 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() conn.commit()
finally: finally:
conn.close() conn.close()
# Потом загружаем свежие данные с сайта
run_parser_game(str(match_external_id))
except Exception as e: except Exception as e:
error_text = str(e) or "Ошибка загрузки данных с сайта" error_text = str(e) or "Ошибка загрузки данных с сайта"

View File

@@ -143,16 +143,21 @@
href="/admin/session/{{ session[3] }}?tab=referees" href="/admin/session/{{ session[3] }}?tab=referees"
>Судьи</a >Судьи</a
> >
<a <a
class="tab-link {% if tab == 'tour_schedule' %}active{% endif %}" class="tab-link {% if tab == 'tour_schedule' %}active{% endif %}"
href="/admin/session/{{ session[3] }}?tab=tour_schedule" href="/admin/session/{{ session[3] }}?tab=tour_schedule"
>Расписание тура</a data-vmix-title="РАСПИСАНИЕ ТУРА"
> >
<a Расписание тура
class="tab-link {% if tab == 'standings' %}active{% endif %}" </a>
href="/admin/session/{{ session[3] }}?tab=standings"
>Турнирная таблица</a <a
> class="tab-link {% if tab == 'standings' %}active{% endif %}"
href="/admin/session/{{ session[3] }}?tab=standings"
data-vmix-title="ТУРНИРНАЯ ТАБЛИЦА"
>
Турнирная таблица
</a>
</div> </div>
{% if tab == 'game' %} {% if tab == 'game' %}
@@ -1173,6 +1178,53 @@
}, 15000); }, 15000);
})(); })();
</script> </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> <script src="/static/script.js"></script>
<div id="matrixLoader" class="matrix-loader" aria-hidden="true"> <div id="matrixLoader" class="matrix-loader" aria-hidden="true">
<canvas id="matrixCanvas" class="matrix-canvas"></canvas> <canvas id="matrixCanvas" class="matrix-canvas"></canvas>