💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:47:31
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:47:31
🔗 SHA:
📊 Статистика:
➕ Добавлено: 222 строк
➖ Удалено: 13 строк
📝 Всего изменений: 235
📁 Изменено файлов: 1
✏️
+222 -13
Удалилось:
... и еще 3 строк
Добавилось:
... и еще 157 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:47:31
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:47:31
🔗 SHA:
2a925b5📊 Статистика:
➕ Добавлено: 222 строк
➖ Удалено: 13 строк
📝 Всего изменений: 235
📁 Изменено файлов: 1
✏️
VLESS-localhost-protection-guide.md+222 -13
Удалилось:
| **ClashMeta Android** 2.11.25 | mihomo | 7891 | ✅ Да (YAML). ⚠️ НО `skip-auth-prefixes` по дефо...
| **FlClash** | mihomo | 7891 | ✅ Да (YAML). ⚠️ Тот же дефолт `skip-auth-prefixes` | 🟡 Уязвим по ...
| **v2rayN** 7.19.5 | xray/sing-box | 10808 | ✅ Да (JSON + UI) | 🟢 Можно настроить | Включить aut...
| **Nekoray** | sing-box/xray | ? | ❌ Нет в UI | 🔴 **Заброшен (2026)** | Перейти на v2rayN / Clas...
| **Clash Verge Rev** | mihomo | 7890/7891 | ✅ Да (YAML). ⚠️ `skip-auth-prefixes` | 🟡 Уязвим по д...
| **ClashX Meta** (macOS) | mihomo | 7890/7891 | ✅ Да (YAML). ⚠️ `skip-auth-prefixes` | 🟡 Уязвим ...
| **Happ** | xray | ❌ + API без auth | 🔴 **УДАЛИТЬ** | Удалено из App Store, фикса не будет |
| **Shadowrocket** | — | ✅ **Не применимо** | 🟢 **Не уязвим** | Не создаёт SOCKS5-сервер на local...
"domain": ["geosite:category-gov-ru", "regexp:\\.ru$"],
## 16. Фаерволы на Android: что реально работает
... и еще 3 строк
Добавилось:
| **v2RayTun** 5.20.67 | xray | ? | ❌ Нет в UI. Разработчик обещал фикс (март 2026), пока нет | 🟡...
| **ClashMeta Android** 2.11.25 | mihomo | — | ✅ Да (YAML). По дефолту `socks-port` **выключен** ...
| **FlClash** | mihomo | — | ✅ Да (YAML). Аналогично — дефолт TUN-only | 🟢 **Безопасен по дефолту...
| **Incy** 2.0.8 | xray 26.3.27 | ? | ⚠️ Ядро поддерживает, UI-настройка auth не документирована ...
| **anet** 0.4.2 | Собственный (Rust/ASTP) | — | ✅ **Не применимо** | 🟢 **Не уязвим** | Нет SOCKS...
| **v2rayN** 7.20.2 | xray/sing-box | 10808 | ✅ Да (JSON + UI) | 🟢 Можно настроить | Включить aut...
| **Nekoray** | sing-box/xray | ? | ❌ Нет в UI | 🔴 **Заброшен (2026)** | Перейти на Throne / v2ra...
| **Throne** 1.1.1 (март 2026) | sing-box (основной) + xray (для VLESS) | 2080 | ⚠️ Дефолтный mix...
| **Karing** (Windows) | sing-box | 3067/3066 | ⚠️ Ядро поддерживает, UI-настройка не подтвержден...
| **Clash Verge Rev** | mihomo | — | ✅ Да (YAML). По дефолту TUN-only, `socks-port` выключен | 🟢 ...
... и еще 157 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 20:00:34
👤 Автор: fuckyou
📅 Дата: 07.04.2026 17:00:34
🔗 SHA:
📊 Статистика:
➕ Добавлено: 532 строк
➖ Удалено: 14 строк
📝 Всего изменений: 546
📁 Изменено файлов: 2
✏️
+48 -14
Удалилось:
... и еще 3 строк
Добавилось:
... и еще 30 строк
🆕
+484 -0
Добавилось:
... и еще 359 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 20:00:34
👤 Автор: fuckyou
📅 Дата: 07.04.2026 17:00:34
🔗 SHA:
bd82042📊 Статистика:
➕ Добавлено: 532 строк
➖ Удалено: 14 строк
📝 Всего изменений: 546
📁 Изменено файлов: 2
✏️
VLESS-localhost-protection-guide.md+48 -14
Удалилось:
| Клиент | Ядро | SOCKS5 auth | Статус | Что делать |
|--------|------|-------------|--------|------------|
| **Happ** | xray | ❌ + API без auth | 🔴 **УДАЛИТЬ** | Удалено из **российского** App Store; в др...
| **V2BOX** 5.3.4 | xray | ❌ Нет подтверждения | 🟡 Скорее уязвим | Нет решения |
| **RabbitHole** 1.3.0 | ? (closed-source) | ⚠️ Неизвестно | ❓ Нужна проверка | Closed-source, по...
| **Shadowrocket** | iOS VPN framework | ⚠️ Вероятно не применимо (iOS sandbox) | 🟢/❓ **Скорее не...
> **Shadowrocket** — это VPN-клиент, который **подключается К** прокси-серверам. Он **не создаёт*...
> **Shadowrocket** — использует iOS Network Extension (VPN framework). Основной режим — TUN через...
> **Throne** ([github.com/throneproj/Throne](https://github.com/throneproj/Throne)) — **преемник ...
> ⚠️ **Критично:** убедитесь что Husi использует sing-box версии **1.4.5 или выше** — в более ран...
... и еще 3 строк
Добавилось:
| Клиент | Ядро | Порт | SOCKS5 auth | Статус | Что делать |
|--------|------|------|-------------|--------|------------|
| **Happ** | xray | ? | ❌ + API без auth | 🔴 **УДАЛИТЬ** | Удалено из **российского** App Store; ...
| **V2BOX** 5.3.4 | xray | ? | ❌ Нет подтверждения | 🟡 Скорее уязвим | Нет решения |
| **RabbitHole** 1.3.0 | ? (closed-source) | ? | ⚠️ Неизвестно | ❓ Нужна проверка | Closed-source...
| **Shadowrocket** | iOS VPN framework | — | ⚠️ Вероятно не применимо (iOS sandbox) | 🟢/❓ **Скоре...
> **Shadowrocket** — использует iOS Network Extension (VPN framework). Основной режим — TUN через...
> **Throne** ([github.com/throneproj/Throne](https://github.com/throneproj/Throne)) — **преемник ...
> ⚠️ **Критично:** убедитесь что Husi использует sing-box версии **1.4.5 или выше** — в более ран...
### «Но ведь пароль передаётся открытым текстом — шпион его перехватит?»
... и еще 30 строк
🆕
tunnel-detection-fix-split-ip.md+484 -0
Добавилось:
# Фикс обнаружения и блокировки туннелей: разделение IP + маршрутизация sing-box
**Дата:** 7 апреля 2026
**Источник:** [Dreaght — ntc.party](https://ntc.party/t/фикс-обнаружения-и-блокировки-туннелей-si...
**Контекст:** Шпионские модули в РФ-приложениях сливают входной IP VPN-сервера → РКН блокирует се...
**Связанные заметки:**
- [Уязвимость VLESS-клиентов — SOCKS5 на localhost](VLESS-SOCKS5-vulnerability.md)
- [Защита VPN от localhost-атаки](VLESS-localhost-protection-guide.md)
- [Localhost-трекинг Meta/Яндекс](Localhost-tracking-Meta-Yandex-SOCKS5.md)
---
## Оглавление
... и еще 359 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 20:00:34
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 2 files changed, 532 insertions(+), 14 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 20:00:34
👤 Автор: fuckyou
🔗 SHA:
bd82042📊 Статистика: 2 files changed, 532 insertions(+), 14 deletions(-)
📁 Изменённые файлы:
✏️
VLESS-localhost-protection-guide.md\n🆕 tunnel-detection-fix-split-ip.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 20:03:12
👤 Автор: fuckyou
📅 Дата: 07.04.2026 17:03:12
🔗 SHA:
📊 Статистика:
➕ Добавлено: 148 строк
➖ Удалено: 21 строк
📝 Всего изменений: 169
📁 Изменено файлов: 2
✏️
+57 -5
Удалилось:
Добавилось:
... и еще 44 строк
✏️
+91 -16
Удалилось:
... и еще 6 строк
Добавилось:
... и еще 63 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 20:03:12
👤 Автор: fuckyou
📅 Дата: 07.04.2026 17:03:12
🔗 SHA:
54a656e📊 Статистика:
➕ Добавлено: 148 строк
➖ Удалено: 21 строк
📝 Всего изменений: 169
📁 Изменено файлов: 2
✏️
VLESS-localhost-protection-guide.md+57 -5
Удалилось:
### О Karing
Поддержка аутентификации наследуется от sing-box, но **в UI Karing нет настройки SOCKS5 auth**. Т...
> ⚠️ **Важно:** Karing использует нестандартные порты (3066/3067), которых нет в методичке Минциф...
**A:** Скорее всего **да**. Karing использует ядро sing-box и создаёт mixed inbound на `127.0.0.1...
Порты 3066/3067 нестандартные (не в методичке Минцифры), но скан всех портов — секунды.
Добавилось:
### О Karing (sing-box)
Karing использует sing-box core с тремя mixed-inbound портами: 3065, 3066, 3067. По умолчанию — *...
**Защита**: в настройках каждого профиля необходимо отредактировать блок `inbounds` и добавить `u...
```json
"inbounds": [
{"type": "mixed",
"tag": "mixed_in_direct",
"set_system_proxy": false,
"users": [
... и еще 44 строк
✏️
tunnel-detection-fix-split-ip.md+91 -16
Удалилось:
9. [Шаг 6: SSH через туннель](#9-шаг-6-ssh-через-туннель)
10. [Шаг 7: DNS-разделение RU/Default](#10-шаг-7-dns-разделение-rudefault)
11. [Итоговая архитектура](#11-итоговая-архитектура)
12. [Рекомендация по транспорту](#12-рекомендация-по-транспорту)
13. [Чеклист](#13-чеклист)
## 9. Шаг 6: SSH через туннель
## 10. Шаг 7: DNS-разделение RU/Default
## 11. Итоговая архитектура
└─► SSH
→ к выходному IP Y.Y.Y.Y (через VLESS автоматически)
... и еще 6 строк
Добавилось:
9. [Шаг 6: I2P через VPS](#9-шаг-6-i2p-через-vps)
10. [Шаг 7: SSH через туннель](#10-шаг-7-ssh-через-туннель)
11. [Шаг 8: DNS-разделение RU/Default](#11-шаг-8-dns-разделение-rudefault)
12. [Итоговая архитектура](#12-итоговая-архитектура)
13. [Рекомендация по транспорту](#13-рекомендация-по-транспорту)
14. [Чеклист](#14-чеклист)
## 9. Шаг 6: I2P через VPS
Цепочка: `Me → VLESS → I2P`
I2P-роутер работает на самом VPS. Клиент не знает про I2P — просто гонит трафик через VLESS, а VP...
### Установка I2P на VPS
... и еще 63 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 20:03:12
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 2 files changed, 148 insertions(+), 21 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 20:03:12
👤 Автор: fuckyou
🔗 SHA:
54a656e📊 Статистика: 2 files changed, 148 insertions(+), 21 deletions(-)
📁 Изменённые файлы:
✏️
VLESS-localhost-protection-guide.md\n✏️ tunnel-detection-fix-split-ip.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 20:10:12
👤 Автор: fuckyou
📅 Дата: 07.04.2026 17:10:12
🔗 SHA:
📊 Статистика:
➕ Добавлено: 131 строк
➖ Удалено: 23 строк
📝 Всего изменений: 154
📁 Изменено файлов: 2
✏️
+49 -0
Добавилось:
... и еще 24 строк
✏️
+82 -23
Удалилось:
... и еще 13 строк
Добавилось:
... и еще 53 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 20:10:12
👤 Автор: fuckyou
📅 Дата: 07.04.2026 17:10:12
🔗 SHA:
adaa125📊 Статистика:
➕ Добавлено: 131 строк
➖ Удалено: 23 строк
📝 Всего изменений: 154
📁 Изменено файлов: 2
✏️
VLESS-SOCKS5-vulnerability.md+49 -0
Добавилось:
**Обновление (апрель 2026):** Зафиксированы случаи активного подавления VPN-соединений сервисами ...
### Метод /proc/net/route: IP VPN-сервера раскрыт через таблицу маршрутизации
Помимо сканирования портов, существует ещё более простой метод обнаружения IP VPN-сервера:
Когда VPN активен, Android создаёт **host route** (маска /32 = `255.255.255.255`) для IP VPN-серв...
```
$ cat /proc/net/route
Iface Destination Gateway Flags Mask
tun0 00000000 00000000 ... 00000000 ← default через VPN
wlan0 B9A5C041 0201A8C0 ... FFFFFFFF ← host route к 65.197.165.185 через WiFi
```
... и еще 24 строк
✏️
tunnel-detection-fix-split-ip.md+82 -23
Удалилось:
4. [Шаг 1: Купить второй IPv4 на VPS](#4-шаг-1-купить-второй-ipv4-на-vps)
5. [Шаг 2: Разделить входной/выходной IP в sing-box](#5-шаг-2-разделить-входнойвыходной-ip-в-sing...
6. [Шаг 3: WARP для неизвестного трафика](#6-шаг-3-warp-для-неизвестного-трафика)
7. [Шаг 4: Direct для доверенных CIDR](#7-шаг-4-direct-для-доверенных-cidr)
8. [Шаг 5: Tor для геоблокированных сервисов](#8-шаг-5-tor-для-геоблокированных-сервисов)
9. [Шаг 6: I2P через VPS](#9-шаг-6-i2p-через-vps)
10. [Шаг 7: SSH через туннель](#10-шаг-7-ssh-через-туннель)
11. [Шаг 8: DNS-разделение RU/Default](#11-шаг-8-dns-разделение-rudefault)
12. [Итоговая архитектура](#12-итоговая-архитектура)
13. [Рекомендация по транспорту](#13-рекомендация-по-транспорту)
... и еще 13 строк
Добавилось:
4. [Установка sing-box на сервере](#4-установка-sing-box-на-сервере)
5. [Шаг 1: Купить второй IPv4 на VPS](#5-шаг-1-купить-второй-ipv4-на-vps)
6. [Шаг 2: Разделить входной/выходной IP в sing-box](#6-шаг-2-разделить-входнойвыходной-ip-в-sing...
7. [Шаг 3: WARP для неизвестного трафика](#7-шаг-3-warp-для-неизвестного-трафика)
8. [Шаг 4: Direct для доверенных CIDR](#8-шаг-4-direct-для-доверенных-cidr)
9. [Шаг 5: Tor для геоблокированных сервисов](#9-шаг-5-tor-для-геоблокированных-сервисов)
10. [Шаг 6: I2P через VPS](#10-шаг-6-i2p-через-vps)
11. [Шаг 7: SSH через туннель](#11-шаг-7-ssh-через-туннель)
12. [Шаг 8: DNS-разделение RU/Default](#12-шаг-8-dns-разделение-rudefault)
13. [Итоговая архитектура](#13-итоговая-архитектура)
... и еще 53 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 20:10:12
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 2 files changed, 131 insertions(+), 23 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 20:10:12
👤 Автор: fuckyou
🔗 SHA:
adaa125📊 Статистика: 2 files changed, 131 insertions(+), 23 deletions(-)
📁 Изменённые файлы:
✏️
VLESS-SOCKS5-vulnerability.md\n✏️ tunnel-detection-fix-split-ip.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Исправил корневую причину в логике перезапуска Discord. Проблема была не в самом переключении пресета: по логу видно, что direct-switch проходил успешно, а ломался уже следующий шаг, когда dpi_controller после применения пресета вызывал DiscordManager. Дальше менеджер слишком грубо определял состояние Discord: он смотрел почти только на имя процесса и потом пытался заново найти Discord.exe по нескольким заранее известным путям. Из-за этого нестандартная установка, вроде вашей W:\Users\Privacy\AppData\Local\Discord\app- 1.0.9230\Discord.exe, могла не считаться “живым Discord”, и приложение делало ложный вывод: Discord не запущен, перезапуск не требуется.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 15 files changed, 308 insertions(+), 82 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Исправил корневую причину в логике перезапуска Discord. Проблема была не в самом переключении пресета: по логу видно, что direct-switch проходил успешно, а ломался уже следующий шаг, когда dpi_controller после применения пресета вызывал DiscordManager. Дальше менеджер слишком грубо определял состояние Discord: он смотрел почти только на имя процесса и потом пытался заново найти Discord.exe по нескольким заранее известным путям. Из-за этого нестандартная установка, вроде вашей W:\Users\Privacy\AppData\Local\Discord\app- 1.0.9230\Discord.exe, могла не считаться “живым Discord”, и приложение делало ложный вывод: Discord не запущен, перезапуск не требуется.
👤 Автор: loop-uh
🔗 SHA:
5202dfe📊 Статистика: 15 files changed, 308 insertions(+), 82 deletions(-)
📁 Изменённые файлы:
✏️
src/discord/discord.py✏️
src/ui/main_window_pages.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/connection_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/orchestra/blocked_page.py✏️
src/ui/pages/orchestra/locked_page.py✏️
src/ui/pages/orchestra/ratings_page.py✏️
src/ui/pages/orchestra/whitelist_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2_orchestra_strategies_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Продолжил cutover StrategyScanPage ещё глубже, уже не только по файлам и support-логике, но и по orchestration-слою старта/завершения сканирования. Теперь в контроллере strategy_scan_page_controller.py (line 17) живут уже три больших пласта: target/data-логика: нормализация цели, STUN/UDP-разбор, quick targets, поиск ipset, применение стратегии в пресет; persistence/log/support: resume-state, run log, support bundle; orchestration decisions: план старта plan_scan_start(...) и план завершения finalize_scan_report(...). А страница strategy_scan_page.py (line 139) теперь использует эти планы как экран: _on_start() больше не вычисляет вручную, сохранять ли старые результаты, с какого индекса возобновляться и какой стартовый статус показывать; _on_finished() больше не решает сама, когда очищать или сохранять resume-state, какой итоговый статус формировать и какой тип завершения считать результатом; эти решения теперь приходят из контроллера, а страница только применяет их к UI.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 25 files changed, 3590 insertions(+), 2719 deletions(-)
📁 Изменённые файлы:
🆕
🆕
🆕
🆕
🆕
🆕
🆕
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Продолжил cutover StrategyScanPage ещё глубже, уже не только по файлам и support-логике, но и по orchestration-слою старта/завершения сканирования. Теперь в контроллере strategy_scan_page_controller.py (line 17) живут уже три больших пласта: target/data-логика: нормализация цели, STUN/UDP-разбор, quick targets, поиск ipset, применение стратегии в пресет; persistence/log/support: resume-state, run log, support bundle; orchestration decisions: план старта plan_scan_start(...) и план завершения finalize_scan_report(...). А страница strategy_scan_page.py (line 139) теперь использует эти планы как экран: _on_start() больше не вычисляет вручную, сохранять ли старые результаты, с какого индекса возобновляться и какой стартовый статус показывать; _on_finished() больше не решает сама, когда очищать или сохранять resume-state, какой итоговый статус формировать и какой тип завершения считать результатом; эти решения теперь приходят из контроллера, а страница только применяет их к UI.
👤 Автор: loop-uh
🔗 SHA:
2863c2b📊 Статистика: 25 files changed, 3590 insertions(+), 2719 deletions(-)
📁 Изменённые файлы:
🆕
src/blockcheck/page_controller.py🆕
src/blockcheck/strategy_scan_page_controller.py🆕
src/core/hostlist_page_controller.py🆕
src/dns/network_page_controller.py🆕
src/dpi/dpi_settings_page_controller.py🆕
src/log/logs_page_controller.py🆕
src/telegram_proxy/diagnostics_controller.py🆕
src/telegram_proxy/page_settings_controller.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/blockcheck_page.py✏️
src/ui/pages/connection_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra/blocked_page.py✏️
src/ui/pages/orchestra/locked_page.py✏️
src/ui/pages/orchestra/ratings_page.py✏️
src/ui/pages/orchestra/whitelist_page.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2_orchestra_strategies_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Сделал ещё одну уже совсем тонкую добивку StrategyScanPage: вынес из страницы оставшийся слой локальных UI-сообщений и текста кнопки разворота лога в controller-планы. Что именно теперь ушло в strategy_scan_page_controller.py (line 1): build_log_expand_plan(...) теперь возвращает не только видимость карточек и размеры лога, но и текст кнопки Свернуть / Развернуть с учётом языка; build_apply_success_plan(...) и build_apply_error_plan(...) собирают текст для сообщений после применения стратегии; build_support_success_plan(...) и build_support_error_plan(...) собирают текст и status-label для подготовки обращения; появился StrategyScanUiMessagePlan, чтобы все такие сообщения были оформлены как отдельный план, а не как разрозненные строки в странице.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 3 files changed, 668 insertions(+), 355 deletions(-)
📁 Изменённые файлы:
✏️
🆕
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Сделал ещё одну уже совсем тонкую добивку StrategyScanPage: вынес из страницы оставшийся слой локальных UI-сообщений и текста кнопки разворота лога в controller-планы. Что именно теперь ушло в strategy_scan_page_controller.py (line 1): build_log_expand_plan(...) теперь возвращает не только видимость карточек и размеры лога, но и текст кнопки Свернуть / Развернуть с учётом языка; build_apply_success_plan(...) и build_apply_error_plan(...) собирают текст для сообщений после применения стратегии; build_support_success_plan(...) и build_support_error_plan(...) собирают текст и status-label для подготовки обращения; появился StrategyScanUiMessagePlan, чтобы все такие сообщения были оформлены как отдельный план, а не как разрозненные строки в странице.
👤 Автор: loop-uh
🔗 SHA:
a2342ef📊 Статистика: 3 files changed, 668 insertions(+), 355 deletions(-)
📁 Изменённые файлы:
✏️
src/blockcheck/strategy_scan_page_controller.py🆕
src/blockcheck/strategy_scan_worker.py✏️
src/ui/pages/strategy_scan_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 HostsRuntimeState — нормализованное текущее состояние hosts: активные домены, доступность файла, активность Adobe, текст ошибки чтения; HostsOperationCompletionPlan — решение о том, что делать после завершения операции: нужно ли сбрасывать профили, нужно ли очищать ошибку, какой итоговый текст ошибки показать; read_runtime_state(...) — чтение состояния из hosts_manager; build_operation_completion_plan(...) — единое решение по завершению apply/clear/adobe операций.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 4 files changed, 341 insertions(+), 147 deletions(-)
📁 Изменённые файлы:
✏️
🆕
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 HostsRuntimeState — нормализованное текущее состояние hosts: активные домены, доступность файла, активность Adobe, текст ошибки чтения; HostsOperationCompletionPlan — решение о том, что делать после завершения операции: нужно ли сбрасывать профили, нужно ли очищать ошибку, какой итоговый текст ошибки показать; read_runtime_state(...) — чтение состояния из hosts_manager; build_operation_completion_plan(...) — единое решение по завершению apply/clear/adobe операций.
👤 Автор: loop-uh
🔗 SHA:
d772fcb📊 Статистика: 4 files changed, 341 insertions(+), 147 deletions(-)
📁 Изменённые файлы:
✏️
src/blockcheck/strategy_scan_page_controller.py🆕
src/hosts/page_controller.py✏️
src/ui/pages/hosts_page.py✏️
src/ui/pages/strategy_scan_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 PremiumPage теперь: больше не должна сама напрямую собирать checker/storage bundle; больше не должна сама напрямую создавать worker-thread для: pair_start check_device_activation test_connection
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 5 files changed, 1099 insertions(+), 627 deletions(-)
📁 Изменённые файлы:
🆕
🆕
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 PremiumPage теперь: больше не должна сама напрямую собирать checker/storage bundle; больше не должна сама напрямую создавать worker-thread для: pair_start check_device_activation test_connection
👤 Автор: loop-uh
🔗 SHA:
0f9c1f6📊 Статистика: 5 files changed, 1099 insertions(+), 627 deletions(-)
📁 Изменённые файлы:
🆕
src/donater/premium_page_controller.py🆕
src/donater/premium_worker.py✏️
src/hosts/page_controller.py✏️
src/ui/pages/hosts_page.py✏️
src/ui/pages/premium_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 добавлено в premium_page_controller.py (line 1): PremiumDeviceInfoPlan read_device_storage_snapshot(...) build_device_info_plan(...) Это значит, что controller теперь уже сам отвечает за то, как интерпретировать локальное Premium-storage состояние: есть ли device_token; есть ли ещё живой pair_code; не протух ли он; что показывать в строке device token / pair; как показывать last_check.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 2 files changed, 624 insertions(+), 239 deletions(-)
📁 Изменённые файлы:
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 добавлено в premium_page_controller.py (line 1): PremiumDeviceInfoPlan read_device_storage_snapshot(...) build_device_info_plan(...) Это значит, что controller теперь уже сам отвечает за то, как интерпретировать локальное Premium-storage состояние: есть ли device_token; есть ли ещё живой pair_code; не протух ли он; что показывать в строке device token / pair; как показывать last_check.
👤 Автор: loop-uh
🔗 SHA:
dff0cf3📊 Статистика: 2 files changed, 624 insertions(+), 239 deletions(-)
📁 Изменённые файлы:
✏️
src/donater/premium_page_controller.py✏️
src/ui/pages/premium_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 премиум
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 2 files changed, 80 insertions(+), 18 deletions(-)
📁 Изменённые файлы:
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 премиум
👤 Автор: loop-uh
🔗 SHA:
824ad74📊 Статистика: 2 files changed, 80 insertions(+), 18 deletions(-)
📁 Изменённые файлы:
✏️
src/donater/premium_page_controller.py✏️
src/ui/pages/premium_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 AutostartPage
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 2 files changed, 308 insertions(+), 221 deletions(-)
📁 Изменённые файлы:
🆕
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 AutostartPage
👤 Автор: loop-uh
🔗 SHA:
990b4a1📊 Статистика: 2 files changed, 308 insertions(+), 221 deletions(-)
📁 Изменённые файлы:
🆕
src/autostart/page_controller.py✏️
src/ui/pages/autostart_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Сделан общий контур обновления локальных стилей темы по всему GUI, чтобы оформление больше не жило разными разрозненными путями. Базовый механизм теперь вынесен в theme_refresh.py, а BasePage переведён на один канонический hook: _apply_page_theme(tokens=None, force=False). Это значит, что теперь одна и та же схема покрывает: смену темы и акцентного цвета через qfluentwidgets StyleChange и PaletteChange от Qt позднюю сборку страницы через deferred-build повторный показ скрытого виджета или страницы Заодно я специально перевёл проблемный экран direct_control_page.py, где у вас затирался блок “Дополнительные настройки”, и старую страницу dpi_settings_page.py, чтобы у них больше не было разных локальных схем восстановления стилей.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 41 files changed, 1485 insertions(+), 1204 deletions(-)
📁 Изменённые файлы:
✏️
🆕
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Сделан общий контур обновления локальных стилей темы по всему GUI, чтобы оформление больше не жило разными разрозненными путями. Базовый механизм теперь вынесен в theme_refresh.py, а BasePage переведён на один канонический hook: _apply_page_theme(tokens=None, force=False). Это значит, что теперь одна и та же схема покрывает: смену темы и акцентного цвета через qfluentwidgets StyleChange и PaletteChange от Qt позднюю сборку страницы через deferred-build повторный показ скрытого виджета или страницы Заодно я специально перевёл проблемный экран direct_control_page.py, где у вас затирался блок “Дополнительные настройки”, и старую страницу dpi_settings_page.py, чтобы у них больше не было разных локальных схем восстановления стилей.
👤 Автор: loop-uh
🔗 SHA:
5397339📊 Статистика: 41 files changed, 1485 insertions(+), 1204 deletions(-)
📁 Изменённые файлы:
✏️
src/autostart/page_controller.py🆕
src/orchestra/page_controller.py✏️
src/strategy_menu/args_preview_dialog.py✏️
src/strategy_menu/hover_tooltip.py✏️
src/strategy_menu/widgets.py✏️
src/strategy_menu/widgets_favorites.py🆕
src/ui/appearance_page_controller.py✏️
src/ui/main_window_pages.py✏️
src/ui/pages/about_page.py✏️
src/ui/pages/appearance_page.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/blockcheck_page.py✏️
src/ui/pages/custom_domains_page.py✏️
src/ui/pages/dns_check_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/hosts_page.py✏️
src/ui/pages/ipset_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra/blocked_page.py✏️
src/ui/pages/orchestra/locked_page.py✏️
src/ui/pages/orchestra/ratings_page.py✏️
src/ui/pages/orchestra/whitelist_page.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/servers_page.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/support_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py🆕
src/ui/theme_refresh.py✏️
src/ui/widgets/collapsible_group.py✏️
src/ui/widgets/direct_zapret2_strategies_tree.py✏️
src/ui/widgets/notification_banner.py✏️
src/ui/widgets/strategy_radio_item.py✏️
src/ui/widgets/win11_controls.py✏️
src/widgets/progress_bar.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 ереписал базовый виджет win11_controls.py так, чтобы Win11ToggleRow больше не был самодельной строкой на QHBoxLayout + QLabel + Win11ToggleSwitch, а стал совместимой обёрткой над stock fluent-компонентом SwitchSettingCard.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 40 files changed, 1036 insertions(+), 428 deletions(-)
📁 Изменённые файлы:
✏️
🆕
✏️
🆕
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 ереписал базовый виджет win11_controls.py так, чтобы Win11ToggleRow больше не был самодельной строкой на QHBoxLayout + QLabel + Win11ToggleSwitch, а стал совместимой обёрткой над stock fluent-компонентом SwitchSettingCard.
👤 Автор: loop-uh
🔗 SHA:
443b1c4📊 Статистика: 40 files changed, 1036 insertions(+), 428 deletions(-)
📁 Изменённые файлы:
✏️
src/orchestra/page_controller.py🆕
src/ui/about_page_controller.py✏️
src/ui/main_window_pages.py🆕
src/ui/page_performance.py✏️
src/ui/page_registry.py🆕
src/ui/page_runtime.py✏️
src/ui/pages/about_page.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/custom_domains_page.py✏️
src/ui/pages/custom_ipset_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/hosts_page.py✏️
src/ui/pages/ipset_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/netrogat_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra/blocked_page.py✏️
src/ui/pages/orchestra/locked_page.py✏️
src/ui/pages/orchestra/orchestra_settings_page.py✏️
src/ui/pages/orchestra/ratings_page.py✏️
src/ui/pages/orchestra/whitelist_page.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/orchestra_zapret2/strategy_detail_page.py✏️
src/ui/pages/premium_page.py✏️
src/ui/pages/servers_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret1/strategy_detail_page_v1.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py✏️
src/ui/pages/zapret2_orchestra_strategies_page.py✏️
src/ui/widgets/win11_controls.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 оптимизация гуи
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 44 files changed, 4536 insertions(+), 2386 deletions(-)
📁 Изменённые файлы:
✏️
✏️
🆕
🆕
✏️
✏️
✏️
✏️
✏️
🆕
🆕
🆕
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🆕
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 оптимизация гуи
👤 Автор: loop-uh
🔗 SHA:
27edb19📊 Статистика: 44 files changed, 4536 insertions(+), 2386 deletions(-)
📁 Изменённые файлы:
✏️
src/config/reg.py✏️
src/core/hostlist_page_controller.py🆕
src/dns/dns_check_page_controller.py🆕
src/dns/dns_check_worker.py✏️
src/donater/premium_page_controller.py✏️
src/orchestra/page_controller.py✏️
src/strategy_menu/args_preview_dialog.py✏️
src/ui/appearance_page_controller.py✏️
src/ui/compat_widgets.py🆕
src/ui/connection_page_controller.py🆕
src/ui/control_page_controller.py🆕
src/ui/home_autostart_worker.py🆕
src/ui/home_page_controller.py✏️
src/ui/main_window.py✏️
src/ui/main_window_pages.py✏️
src/ui/main_window_signals.py✏️
src/ui/page_registry.py✏️
src/ui/pages/about_page.py✏️
src/ui/pages/appearance_page.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/connection_page.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/custom_domains_page.py✏️
src/ui/pages/custom_ipset_page.py✏️
src/ui/pages/dns_check_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/netrogat_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra/ratings_page.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/premium_page.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/support_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/strategy_detail_page_v1.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py🆕
src/ui/smooth_scroll.py🆕
src/ui/support_page_controller.py✏️
src/ui/text_catalog.py✏️
src/ui/widgets/win11_controls.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 перевёл telegram_proxy_page.py на один fluent-путь без старого слоя ActionButton и условных fallback-веток. Что сделал В этой странице раньше одновременно жили: stock fluent-карточки SettingCardGroup, PushSettingCard, PrimaryPushSettingCard старые ActionButton условные ветки _HAS_FLUENT и if SegmentedWidget is not None, из-за которых страница фактически строилась двумя разными способами
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 32 files changed, 5238 insertions(+), 2717 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
🆕
🆕
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 перевёл telegram_proxy_page.py на один fluent-путь без старого слоя ActionButton и условных fallback-веток. Что сделал В этой странице раньше одновременно жили: stock fluent-карточки SettingCardGroup, PushSettingCard, PrimaryPushSettingCard старые ActionButton условные ветки _HAS_FLUENT и if SegmentedWidget is not None, из-за которых страница фактически строилась двумя разными способами
👤 Автор: loop-uh
🔗 SHA:
218f3de📊 Статистика: 32 files changed, 5238 insertions(+), 2717 deletions(-)
📁 Изменённые файлы:
✏️
src/autostart/page_controller.py✏️
src/donater/premium_page_controller.py✏️
src/log/logs_page_controller.py🆕
src/log/winws_output_worker.py🆕
src/telegram_proxy/page_actions_controller.py🆕
src/telegram_proxy/page_runtime_controller.py✏️
src/ui/compat_widgets.py✏️
src/ui/pages/about_page.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/blockcheck_page.py✏️
src/ui/pages/connection_page.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/custom_domains_page.py✏️
src/ui/pages/custom_ipset_page.py✏️
src/ui/pages/dns_check_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/ipset_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/netrogat_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/premium_page.py✏️
src/ui/pages/servers_page.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py🆕
src/updater/update_page_view_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 home страница полностью удалена
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 21 files changed, 777 insertions(+), 2306 deletions(-)
📁 Изменённые файлы:
✏️
✏️
🗑️
🗑️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🗑️
✏️
✏️
📝
✏️
✏️
🆕
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 home страница полностью удалена
👤 Автор: loop-uh
🔗 SHA:
f81ee9b📊 Статистика: 21 files changed, 777 insertions(+), 2306 deletions(-)
📁 Изменённые файлы:
✏️
docs/DIAGRAMS.md✏️
docs/project.md🗑️
src/ui/home_autostart_worker.py🗑️
src/ui/home_page_controller.py✏️
src/ui/main_window.py✏️
src/ui/main_window_navigation_build.py✏️
src/ui/main_window_pages.py✏️
src/ui/mode_page_scope.py✏️
src/ui/nav_mode_config.py✏️
src/ui/page_names.py✏️
src/ui/page_registry.py✏️
src/ui/pages/__init__.py🗑️
src/ui/pages/home_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/orchestra/__init__.py📝
src/ui/pages/orchestra_page.py src/ui/pages/orchestra/orchestra_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret2/direct_control_page.py🆕
src/ui/pages/zapret2/direct_control_page_controller.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/text_catalog.py🔗 Открыть на GitHub