💥 ВСЕ НАШИ ССЫЛКИ: 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
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 удалены лишние карточки
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 30 files changed, 2674 insertions(+), 2202 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 удалены лишние карточки
👤 Автор: loop-uh
🔗 SHA:
4d8948d📊 Статистика: 30 files changed, 2674 insertions(+), 2202 deletions(-)
📁 Изменённые файлы:
✏️
src/ui/compat_widgets.py✏️
src/ui/pages/appearance_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/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/premium_page.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/user_presets_toolbar.py✏️
src/ui/pages/zapret1/direct_control_page.py🆕
src/ui/pages/zapret1/direct_control_page_controller.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_control_page_controller.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/user_presets_page.py🆕
src/ui/pages/zapret2/user_presets_page_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 гуи
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 22 files changed, 2197 insertions(+), 1416 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🗑️
🆕
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 гуи
👤 Автор: loop-uh
🔗 SHA:
d1bc330📊 Статистика: 22 files changed, 2197 insertions(+), 1416 deletions(-)
📁 Изменённые файлы:
✏️
src/donater/__init__.py✏️
src/donater/premium_page_controller.py✏️
src/managers/subscription_manager.py✏️
src/orchestra/__init__.py✏️
src/ui/main_window_pages.py✏️
src/ui/page_registry.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra_zapret2/direct_control_page.py✏️
src/ui/pages/orchestra_zapret2/user_presets_page.py🆕
src/ui/pages/orchestra_zapret2/user_presets_page_controller.py🗑️
src/ui/pages/user_presets_runtime.py🆕
src/ui/pages/user_presets_runtime_controller.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/direct_control_page_controller.py✏️
src/ui/pages/zapret1/user_presets_page.py🆕
src/ui/pages/zapret1/user_presets_page_controller.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_control_page_controller.py✏️
src/ui/pages/zapret2/user_presets_page.py✏️
src/ui/pages/zapret2/user_presets_page_controller.py✏️
src/ui/widgets/__init__.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 очистка
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 14 files changed, 227 insertions(+), 311 deletions(-)
📁 Изменённые файлы:
🗑️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 очистка
👤 Автор: loop-uh
🔗 SHA:
6cb0fc1📊 Статистика: 14 files changed, 227 insertions(+), 311 deletions(-)
📁 Изменённые файлы:
🗑️
src/autostart/page_controller.py✏️
src/connection_test.py✏️
src/launcher_common/builder_factory.py✏️
src/legacy_registry_launch/strategies_registry.py✏️
src/legacy_registry_launch/strategy_loader.py✏️
src/ui/control_page_controller.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/logs_page.py🆕
src/ui/pages/logs_page_support_workflow.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/text_catalog.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 удалены старые компоненты
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 48 files changed, 4314 insertions(+), 6313 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🗑️
🆕
🆕
🆕
🆕
🆕
🆕
🆕
🆕
✏️
✏️
✏️
✏️
✏️
🆕
✏️
✏️
🆕
✏️
🆕
🆕
✏️
🆕
🆕
🆕
🗑️
✏️
✏️
🆕
🆕
🆕
🆕
🆕
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 удалены старые компоненты
👤 Автор: loop-uh
🔗 SHA:
0c43ab8📊 Статистика: 48 files changed, 4314 insertions(+), 6313 deletions(-)
📁 Изменённые файлы:
✏️
src/blockcheck/strategy_scanner.py✏️
src/connection_test.py✏️
src/launcher_common/__init__.py🗑️
src/launcher_common/builder_factory.py🗑️
src/launcher_common/orchestra_legacy_bridge.py🗑️
src/legacy_registry_launch/__init__.py🗑️
src/legacy_registry_launch/builder_common.py🗑️
src/legacy_registry_launch/port_filters.py🗑️
src/legacy_registry_launch/selection_store.py🗑️
src/legacy_registry_launch/strategies_registry.py🗑️
src/legacy_registry_launch/strategy_loader.py🗑️
src/legacy_registry_launch/zapret1_strategy_builder.py🗑️
src/legacy_registry_launch/zapret2_strategy_builder.py🗑️
src/orchestra_zapret2/http80_orchestra.txt🗑️
src/orchestra_zapret2/tcp_orchestra.txt🆕
src/preset_zapret2/builtin_presets/Default (circular) v2.txt🆕
src/preset_zapret2/builtin_presets/custom (circular).txt🆕
src/preset_zapret2/builtin_presets/fake (circular).txt🆕
src/preset_zapret2/builtin_presets/multidisorder (circular).txt🆕
src/preset_zapret2/builtin_presets/multisplit (circular).txt🆕
src/preset_zapret2/builtin_presets/syndata (circular).txt🆕
src/strategy_catalog/__init__.py🆕
src/strategy_catalog/reader.py✏️
src/strategy_menu/launch_method_store.py✏️
src/strategy_menu/strategy_set_resolver.py✏️
src/ui/connection_page_controller.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/blockcheck_page.py🆕
src/ui/pages/blockcheck_page_summary_content.py✏️
src/ui/pages/connection_page.py✏️
src/ui/pages/logs_page.py🆕
src/ui/pages/logs_page_worker_workflow.py✏️
src/ui/pages/premium_page.py🆕
src/ui/pages/premium_page_pairing_workflow.py🆕
src/ui/pages/premium_status_card.py✏️
src/ui/pages/servers_page.py🆕
src/ui/pages/servers_page_changelog_card.py🆕
src/ui/pages/servers_page_settings_build.py🆕
src/ui/pages/servers_page_update_card.py🗑️
src/ui/pages/user_presets_components.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/user_presets_page.py🆕
src/ui/presets_menu/__init__.py🆕
src/ui/presets_menu/common.py🆕
src/ui/presets_menu/delegate.py🆕
src/ui/presets_menu/model.py🆕
src/ui/presets_menu/toolbar.py🆕
src/ui/presets_menu/view.py🔗 Открыть на GitHub