Compare commits

...

2 Commits

Author SHA1 Message Date
312a006312 еще 1 2026-04-23 20:55:27 +03:00
58e36ac55c добавил info
Co-authored-by: Copilot <copilot@github.com>
2026-04-23 20:53:54 +03:00
13 changed files with 154 additions and 53 deletions

1
app.py
View File

@@ -129,6 +129,7 @@ def start_scheduler():
thread = threading.Thread(
target=run_scheduler,
kwargs={"with_signal_handlers": False},
daemon=True
)
thread.start()

View File

@@ -495,8 +495,9 @@ def install_signal_handlers() -> None:
# СТАРТ
# =========================================================
def run_scheduler() -> None:
install_signal_handlers()
def run_scheduler(with_signal_handlers: bool = False) -> None:
if with_signal_handlers:
install_signal_handlers()
log("[scheduler] started")
@@ -523,6 +524,5 @@ def run_scheduler() -> None:
standings_thread.join(timeout=5)
log("[scheduler] fully stopped")
if __name__ == "__main__":
run_scheduler()

BIN
static/docs/agent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
static/docs/formation.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
static/docs/formation2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
static/docs/login.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

BIN
static/docs/main window.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
static/docs/matches.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
static/docs/path photo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

BIN
static/docs/path vmix.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
static/docs/referee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -2,7 +2,9 @@
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Инструкция | System Info</title>
<title>Инструкция</title>
<link rel="icon" href="/static/smith.ico" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="{{ request.url_for('static', path='smith.ico') }}?v=2" type="image/x-icon">
@@ -211,6 +213,69 @@
text-decoration: underline;
}
.link-list {
list-style: none;
padding: 0;
margin-top: 10px;
}
.link-list li {
margin-bottom: 10px;
}
.link-list a {
display: block;
padding: 10px 12px;
border: 1px solid #00ff88;
color: #00ff88;
text-decoration: none;
background: rgba(0,255,100,0.05);
transition: 0.2s;
}
.link-list a:hover {
background: rgba(0,255,100,0.15);
box-shadow: 0 0 10px #00ff88;
}
.note {
position: relative;
padding: 20px;
border: 1px solid #ff3b3b;
background: rgba(255, 50, 50, 0.05);
margin-top: 20px;
}
.note-title {
position: absolute;
top: -12px;
left: 15px;
background: #000;
padding: 4px 12px;
font-size: 14px; /* больше */
font-weight: bold;
color: #ff3b3b;
border: 1px solid #ff3b3b;
text-shadow: 0 0 8px #ff3b3b;
letter-spacing: 1px;
box-shadow: 0 0 10px #ff3b3b;
}
.code {
background: #001a0f;
border: 1px solid #00ff88;
padding: 10px;
margin: 10px 0;
font-size: 14px;
}
.image-caption {
font-size: 12px;
color: #00ffaa;
opacity: 0.8;
margin-top: -5px;
}
@media (max-width: 980px) {
.page {
grid-template-columns: 1fr;
@@ -252,91 +317,126 @@
<div class="nav-title">Разделы</div>
<nav class="nav">
<a href="#intro">Введение</a>
<a href="#login">Вход в систему</a>
<a href="#matches">Список матчей</a>
<a href="#workspace">Матч-центр</a>
<a href="#live">Live обновления</a>
<a href="#standings">Турнирная таблица</a>
<a href="#login">Запуск проекта</a>
<a href="#auto">Загрузка данных с сайта</a>
<a href="#manual">Ручная загрузка данных</a>
<a href="#formation">Расстановка команд</a>
<!-- <a href="#standings">Турнирная таблица</a>
<a href="#vmix">vMix</a>
<a href="#faq">FAQ</a>
<a href="#faq">FAQ</a> -->
</nav>
<div class="status-box">
<!-- <div class="status-box">
[ SYSTEM ONLINE ]<br>
[ GUIDE LINKED ]<br>
[ MATRIX ACTIVE ]
</div>
</div> -->
</aside>
<main class="content">
<section class="hero">
<h1>Инструкция по работе с системой</h1>
<p>
Слева — быстрые переходы по разделам. Справа — полное описание,
скриншоты и пошаговые действия.
</p>
</section>
<section class="section" id="intro">
<h2>Введение</h2>
<p>
Здесь можешь написать общее описание проекта, для кого он нужен и как им пользоваться.
</p>
<p class="note">
В этот блок удобно поместить краткое вступление и логику работы всей системы.
</p>
<p>Ссылки на скачивание необходимых файлов:</p>
<ul class="link-list">
<li><a href="https://piglet.tvstart.ru/sharing/OzrArKD7H" target="_blank">Проект vMix</a></li>
<li><a href="https://piglet.tvstart.ru/sharing/2SbJfVTIV" target="_blank">Фотографии игроков</a></li>
<li><a href="https://piglet.tvstart.ru/sharing/4wqeGhkIR" target="_blank">Шторка</a></li>
</ul>
<p>Проект должен лежать по следующему пути:</p>
<div class="code">D:\Графика\ФУТБОЛ\Женская Суперлига 2026</div>
<img src="/static/docs/path vmix.png" alt="Скриншот пути к проекту">
<p>Нужно установить шрифты в папке:</p>
<div class="code">D:\Графика\ФУТБОЛ\Женская Суперлига 2026\Fonts</div>
<p>Фотографии игроков нужно распоковать в папку:</p>
<div class="code">D:\Графика\ФУТБОЛ\Женская Суперлига 2026\Photo</div>
<img src="/static/docs/path photo.png" alt="Скриншот пути к фотографиям">
<div class="note">
<div class="note-title">ВАЖНО</div>
<p>Обновлять проект vMix и фотографии игроков нужно перед каждым туром, чтобы в трансляции были актуальные данные. Ссылки ведут на облако, откуда можно скачать свежие версии файлов.</p>
</div>
<a class="top-link" href="#top">↑ Наверх</a>
</section>
<section class="section" id="login">
<h2>Вход в систему</h2>
<h2>Запуск проекта</h2>
<p>
Здесь будет инструкция по авторизации.
Заходим на страницу входа, вводим логин и пароль, нажимаем Enter и попадаем на страницу со списком матчей.
</p>
<ul class="link-list"><li><a href="https://wfl.tvstart.ru" target="_blank">https://wfl.tvstart.ru</a></li></ul>
<img src="/static/docs/login.png" alt="Скриншот входа">
<img src="/static/docs/matches.png" alt="Скриншот списка матчей">
<p>
Добавь сюда шаги входа, особенности логина и типичные ошибки.
У нас тут есть сортировки по сегодня, по турам. Находим наш матч и нажимаем на кнопку Выбрать матч. Открывается рабочая страница матча, откуда уже можно управлять составами, событиями и готовить данные для трансляции.
</p>
<img src="/static/docs/main window.png" alt="Скриншот главного окна">
<p>Теперь нам нужно скачать проект vMix с нужными данными и запустить agent.exe. Проект скачивается второй кнопке на скриншоте выше (маленький значок vMix).</p>
<div class="code">D:\Графика\ФУТБОЛ\Женская Суперлига 2026\agent.exe</div>
<img src="/static/docs/agent.png" alt="Скриншот агента">
<a class="top-link" href="#top">↑ Наверх</a>
</section>
<section class="section" id="matches">
<h2>Список матчей</h2>
<section class="section" id="auto">
<h2>Автоматическая загрузка данных с сайта wfl.rfs.ru</h2>
<p>
Здесь опиши, как выбирать матч, как работают фильтры и как открыть нужную игру.
Если на странице матча на сайте есть составы команд, то нам достаточно нажать первую кнопку (синий шар) на рабочей странице матча, и система сама загрузит составы, тренеров и судей.
</p>
<img src="/static/docs/matches.png" alt="Список матчей">
<img src="/static/docs/main window.png" alt="Скриншот главного окна">
<a class="top-link" href="#top">↑ Наверх</a>
</section>
<section class="section" id="workspace">
<h2>Матч-центр</h2>
<section class="section" id="manual">
<h2>Ручная загрузка данных</h2>
<p>
Здесь можно подробно описать рабочую страницу матча: составы, события, судей и остальные вкладки.
Для добавление игроков в состав нужно нажать на кнопку "Редактировать" (значок карандаша) и заполнить данные по игрокам и тренерам.
</p>
<img src="/static/docs/workspace.png" alt="Матч-центр">
<h3>Что здесь можно делать</h3>
<ul>
<li>управлять составами;</li>
<li>редактировать данные матча;</li>
<li>работать с событиями;</li>
<li>готовить данные для трансляции.</li>
</ul>
<img src="/static/docs/main window.png" alt="Скриншот главного окна">
<p>Откроется форма, в которой мы выбираем игроков и заполняем их в основной состав или в запас. Там же у каждого игрока есть возможно перекинуть его в старт/запас и сделать капитаном. Чуть ниже выбираем тренеров и далее нажимаем кнопку "Сохранить изменения". Если автоматически в браузере не обновились составы в форме, то просто нажмите F5 или обновите страницу.</p>
<img src="/static/docs/manual roster.png" alt="Скриншот редактирования состава">
<p>Переходим на вкладку Судьи и опять нажимаем на кнопку "Редактировать" (значок карандаша). В поиске судьи вбиваем нашу фамилию или имя, выбираем судью, ниже выбираем роль ему и нажимаем кнопку "Добавить судью", добавляем таким же образом всех остальных, а уже далее нажимаем кнопку "Сохранить".</p>
<img src="/static/docs/referee.png" alt="Скриншот редактирования судей">
<a class="top-link" href="#top">↑ Наверх</a>
</section>
<section class="section" id="formation">
<h2>Расстановка команд</h2>
<p>
Для того, чтобы сделать расстановку нужно перейти во вкладку "Расстановки команд" и нажать на кнопку "Редактировать".
</p>
<img src="/static/docs/formation.png" alt="Скриншот расстановок команд">
<p>
Выбираем нашу расстановку, далее жмём кнопку "Применить расстановку". Открывается форма, где мы последовательно начиная с вратаря заполнять слева направо наши номера игроков. Нажимаем кнопку "Применить игроков" и далее нажимаем кнопку "Сохранить". В проекте vMix начнёться расставление координат в титре Расстановки.
</p>
<img src="/static/docs/formation2.png" alt="Скриншот редактирования расстановок команд">
<div class="note">
<div class="note-title">ВАЖНО</div>
<p>При повторном обновлении данных с сайта расстановка слетит в браузере, и если вам нужно внести изменения, например капитан поменялся или игрок заменился в основном составе, то расстановку нужно заного пробить.</p>
<p>Если видим, что на расстановке у кого нибудь пишется неверная фамилия или плашка вообще пустая или фотография неверно подтянулась, можно у своей команды нажать еще раз кнопку "Сохранить" и тогда данные должны обновиться, если не произойдет, нужно еще раз попробовать до момента пока не получиться (у меня получалось три раза так прожать).</p>
</div>
<a class="top-link" href="#top">↑ Наверх</a>
</section>
<section class="section" id="live">
<h2>Live обновления</h2>
<p>
Здесь можешь описать работу scheduler, auto-update и обновление счета.
</p>
<p class="note">
Хорошее место для объяснения, как матч переходит в live, как обновляется статус и когда останавливается watcher.
</p>
<a class="top-link" href="#top">↑ Наверх</a>
</section>
<section class="section" id="standings">
<!-- <section class="section" id="standings">
<h2>Турнирная таблица</h2>
<p>
Здесь опиши, как обновляется таблица и где она используется.
@@ -360,7 +460,7 @@
Здесь можешь собрать частые вопросы, типичные ошибки и быстрые решения.
</p>
<a class="top-link" href="#top">↑ Наверх</a>
</section>
</section> -->
</main>
</div>