Merge branch 'main' into Barabanov_TEST

This commit is contained in:
2025-10-22 09:52:20 +00:00
8 changed files with 0 additions and 3120 deletions

View File

@@ -1,302 +0,0 @@
[
{
"PlayTypeID": 0,
"PlayInfoSite": "-",
"PlayInfo": "Пустое событие"
},
{
"PlayTypeID": 1,
"PlayInfoSite": "1 очко",
"PlayInfo": "Штрафной бросок - попадание"
},
{
"PlayTypeID": 2,
"PlayInfoSite": "2 очка",
"PlayInfo": "2х очковый бросок - попадание"
},
{
"PlayTypeID": 3,
"PlayInfoSite": "3 очка",
"PlayInfo": "3х очковый бросок - попадание"
},
{
"PlayTypeID": 4,
"PlayInfoSite": "Мимо 1 очко",
"PlayInfo": "Штрафной бросок - промах"
},
{
"PlayTypeID": 5,
"PlayInfoSite": "Мимо 2 очка",
"PlayInfo": "2х очковый бросок - промах"
},
{
"PlayTypeID": 6,
"PlayInfoSite": "Мимо 3 очка",
"PlayInfo": "3х очковый бросок - промах"
},
{
"PlayTypeID": 7,
"PlayInfoSite": "Замена",
"PlayInfo": "Замена игроков"
},
{
"PlayTypeID": 8,
"PlayInfoSite": "Выход",
"PlayInfo": "Выход на площадку"
},
{
"PlayTypeID": 9,
"PlayInfoSite": "Уход",
"PlayInfo": "Ушел с площадки"
},
{
"PlayTypeID": 10,
"PlayInfoSite": "Потеря",
"PlayInfo": "Потеря"
},
{
"PlayTypeID": 11,
"PlayInfoSite": "Пас-потеря",
"PlayInfo": "Потеря мяча при передаче"
},
{
"PlayTypeID": 12,
"PlayInfoSite": "Пробежка",
"PlayInfo": "Пробежка"
},
{
"PlayTypeID": 13,
"PlayInfoSite": "Заступ в аут",
"PlayInfo": "Заступ в аут"
},
{
"PlayTypeID": 14,
"PlayInfoSite": "Зона",
"PlayInfo": "Зона"
},
{
"PlayTypeID": 15,
"PlayInfoSite": "Двойное ведение",
"PlayInfo": "Двойное ведение"
},
{
"PlayTypeID": 16,
"PlayInfoSite": "3 секунды",
"PlayInfo": "3 секунды"
},
{
"PlayTypeID": 17,
"PlayInfoSite": "5 секунд",
"PlayInfo": "5 секунд"
},
{
"PlayTypeID": 18,
"PlayInfoSite": "8 секунд",
"PlayInfo": "8 секунд"
},
{
"PlayTypeID": 19,
"PlayInfoSite": "24 секунды",
"PlayInfo": "24 секунды"
},
{
"PlayTypeID": 20,
"PlayInfoSite": "Потеря мяча",
"PlayInfo": "Потеря мяча"
},
{
"PlayTypeID": 21,
"PlayInfoSite": "Начало четверти",
"PlayInfo": "Начало четверти?"
},
{
"PlayTypeID": 22,
"PlayInfoSite": "",
"PlayInfo": "Окончание четверти?"
},
{
"PlayTypeID": 23,
"PlayInfoSite": "Тайм-аут",
"PlayInfo": "Тайм-аут"
},
{
"PlayTypeID": 24,
"PlayInfoSite": "",
"PlayInfo": "неизвестно"
},
{
"PlayTypeID": 25,
"PlayInfoSite": "Пас",
"PlayInfo": "Передача"
},
{
"PlayTypeID": 26,
"PlayInfoSite": "Перехват",
"PlayInfo": "Перехват"
},
{
"PlayTypeID": 27,
"PlayInfoSite": "Блокшот",
"PlayInfo": "Блокшот"
},
{
"PlayTypeID": 28,
"PlayInfoSite": "Подбор",
"PlayInfo": "Подбор"
},
{
"PlayTypeID": 29,
"PlayInfoSite": "Быстрый отрыв",
"PlayInfo": "Быстрый отрыв"
},
{
"PlayTypeID": 30,
"PlayInfoSite": "Бросок сверху",
"PlayInfo": "Тип броска"
},
{
"PlayTypeID": 31,
"PlayInfoSite": "В прыжке",
"PlayInfo": "Тип броска"
},
{
"PlayTypeID": 32,
"PlayInfoSite": "В проходе",
"PlayInfo": "Тип броска"
},
{
"PlayTypeID": 33,
"PlayInfoSite": "Добивание",
"PlayInfo": "Тип броска"
},
{
"PlayTypeID": 34,
"PlayInfoSite": "Навес",
"PlayInfo": "Тип броска"
},
{
"PlayTypeID": 35,
"PlayInfoSite": "Бросок крюком",
"PlayInfo": "Тип броска"
},
{
"PlayTypeID": 40,
"PlayInfoSite": "Фол P",
"PlayInfo": "Фол персональный"
},
{
"PlayTypeID": 41,
"PlayInfoSite": "Фол U",
"PlayInfo": "Фол неспортивный"
},
{
"PlayTypeID": 42,
"PlayInfoSite": "Фол T",
"PlayInfo": "Фол технический"
},
{
"PlayTypeID": 43,
"PlayInfoSite": "Фол D",
"PlayInfo": "Фол дисквалифицирующий"
},
{
"PlayTypeID": 44,
"PlayInfoSite": "Фол C",
"PlayInfo": "Фол технический главному тренеру за его личное неспортивное поведение"
},
{
"PlayTypeID": 45,
"PlayInfoSite": "Фол В",
"PlayInfo": "Фол технический главному тренеру по любой другой причине"
},
{
"PlayTypeID": 47,
"PlayInfoSite": "В нападении",
"PlayInfo": "Тип фола"
},
{
"PlayTypeID": 50,
"PlayInfoSite": "Вбрасывание",
"PlayInfo": "Тип фола"
},
{
"PlayTypeID": 51,
"PlayInfoSite": "1 бросок",
"PlayInfo": "Назначение 1го штрафного броска"
},
{
"PlayTypeID": 52,
"PlayInfoSite": "2 броска",
"PlayInfo": "Назначение 2х штрафных бросков"
},
{
"PlayTypeID": 53,
"PlayInfoSite": "3 броска",
"PlayInfo": "Назначение 3х штрафных бросков"
},
{
"PlayTypeID": 54,
"PlayInfoSite": "Компенсация",
"PlayInfo": "Обоюдное пробивание штрафных"
},
{
"PlayTypeID": 59,
"PlayInfoSite": "",
"PlayInfo": "пробел для сайта"
},
{
"PlayTypeID": 60,
"PlayInfoSite": "Разминка команд",
"PlayInfo": "Разминка команд"
},
{
"PlayTypeID": 61,
"PlayInfoSite": "Представление команд",
"PlayInfo": "Представление команд"
},
{
"PlayTypeID": 62,
"PlayInfoSite": "Менее 3 минут до начала игры",
"PlayInfo": "Менее 3 минут до начала игры"
},
{
"PlayTypeID": 63,
"PlayInfoSite": "Игра сейчас начнется",
"PlayInfo": "Игра сейчас начнется"
},
{
"PlayTypeID": 69,
"PlayInfoSite": "Видеопросмотр",
"PlayInfo": "Видеопросмотр?"
},
{
"PlayTypeID": 70,
"PlayInfoSite": "",
"PlayInfo": "Возможно остановка игры?"
},
{
"PlayTypeID": 71,
"PlayInfoSite": "",
"PlayInfo": "Возможно возобновление игры?"
},
{
"PlayTypeID": 72,
"PlayInfoSite": "Видеопросмотр",
"PlayInfo": "Видеопросмотр?"
},
{
"PlayTypeID": 73,
"PlayInfoSite": "Старт видеотрансляции",
"PlayInfo": "Старт видеотрансляции"
},
{
"PlayTypeID": 74,
"PlayInfoSite": "Конец видеотрансляции",
"PlayInfo": "Конец видеотрансляции"
},
{
"PlayTypeID": 100,
"PlayInfoSite": "Матч завершен",
"PlayInfo": "Матч завершен"
}
]

View File

@@ -1,6 +0,0 @@
@echo off
REM 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vmix_url_replace.exe <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
"%~dp0vmix_url_replace.exe" --file "D:\extGFX\VTB.vmix" --url "https://per.tvstart.ru/app/static/per_"
REM 2. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> vMix
start "" "D:\extGFX\VTB.vmix"

View File

@@ -1,6 +0,0 @@
@echo off
REM 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vmix_url_replace.exe <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
"%~dp0vmix_url_replace.exe" --file "D:\extGFX\VTB.vmix" --url "https://kaz.tvstart.ru/app/static/kaz_"
REM 2. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> vMix
start "" "D:\extGFX\VTB.vmix"

View File

@@ -1,13 +0,0 @@
{
"10.10.1.180": {"host": "", "tag": "vtb", "root": 1, "team": "cska"},
"10.10.35.21": {"host": "gfx", "tag": "vtb", "root": 1, "team": "Lokomotiv Kuban"},
"10.10.35.22": {"host": "krd", "tag": "vtb", "root": 1, "team": "Lokomotiv Kuban1"},
"10.10.35.23": {"host": "ekb", "tag": "vtb", "root": 1, "team": "uralmash1"},
"10.10.35.24": {"host": "per", "tag": "vtb", "root": 1, "team": "betcity parma1"},
"10.10.35.25": {"host": "sar", "tag": "vtb", "root": 1, "team": "avtodor1"},
"10.10.35.26": {"host": "spb", "tag": "vtb", "root": 1, "team": "zenit1"},
"10.10.35.27": {"host": "sam", "tag": "vtb", "root": 1, "team": "samara1"},
"10.10.35.28": {"host": "msk1", "tag": "vtb", "root": 1, "team": "mba-mai1"},
"10.10.35.29": {"host": "msk2", "tag": "vtb", "root": 1, "team": "Pari Nizhny Novgorod1"},
"10.10.35.30": {"host": "kaz", "tag": "vtb", "root": 1, "team": "unics1"}
}

View File

@@ -1,7 +0,0 @@
::Скрипт запуска отображения данных в RFB
chcp 65001
@echo off >nul
echo запускаю софт
streamlit run visual.py

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,79 +0,0 @@
import os
import shutil
import argparse
import xml.etree.ElementTree as ET
from urllib.parse import urlparse, unquote
def localname(tag: str) -> str:
return tag.split('}', 1)[-1].lower()
def extract_filename(u: str) -> str:
s = (u or "").strip()
if not s:
return ""
p = urlparse(s)
path = p.path if p.scheme else s
path = path.replace("\\", "/")
name = path.split("/")[-1]
return unquote(name)
def replace_urls_in_vmix(xml_path: str, prefix_url: str) -> int:
if not os.path.isfile(xml_path):
raise FileNotFoundError(f"Файл не найден: {xml_path}")
backup_path = xml_path + ".bak"
shutil.copy2(xml_path, backup_path)
tree = ET.parse(xml_path)
root = tree.getroot()
replaced = 0
for node in root.iter():
if localname(node.tag).startswith("datasource") and node.get("friendlyName") == "JSON":
for sub in node.iter():
if localname(sub.tag) == "url":
old = (sub.text or "").strip()
# ✅ проверка: если уже новый URL — пропускаем
if old.startswith(prefix_url):
print(f"Пропускаем — уже новый URL: {old}")
continue
tail = extract_filename(old)
if not tail:
continue
new_full = prefix_url + tail
if old != new_full:
print(f"{old} -> {new_full}")
sub.text = new_full
replaced += 1
# сохраняем без XML декларации
tree.write(xml_path, encoding="utf-8", xml_declaration=False)
return replaced
def main():
parser = argparse.ArgumentParser(
description="Заменяет <url> в datasource[friendlyName=JSON] на PREFIX + имя файла."
)
parser.add_argument("--file", "-f", required=True, help="Путь к .vmix файлу")
parser.add_argument("--url", "-u", required=False, help="Префикс нового URL (например, https://gfx.tvstart.ru/app/static/gfx_)")
parser.add_argument("--pause", action="store_true", help="Ожидать Enter в конце (удобно при запуске двойным кликом)")
args = parser.parse_args()
prefix = args.url or input("Введите префикс нового URL (например, https://gfx.tvstart.ru/app/static/gfx_): ").strip()
if not prefix:
print("Префикс пустой — ничего не сделано.")
return
try:
count = replace_urls_in_vmix(args.file, prefix)
print(f"Готово. Заменено тегов <url>: {count}")
print(f"Резервная копия: {args.file}.bak")
except Exception as e:
print("Ошибка:", e)
if args.pause:
input("Нажмите Enter для выхода...")
if __name__ == "__main__":
main()