Zapret | Дорожная карта
2.37K subscribers
28 photos
24 files
3.56K links
Дорожная карта обновлений.

Узнайте что я буду редактировать в Запрет для обхода блокировок Дискорда и Ютуба в первую очередь

И ужаснуться моим техническим непонятным запискам без контекста.
Download Telegram
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 234

👤 Автор: loop-uh
📅 Дата: 17.05.2026 13:50:17
🔗 SHA: 2855353

📊 Статистика:
➕ Добавлено: 3 строк
➖ Удалено: 158 строк
📝 Всего изменений: 161

📁 Изменено файлов: 2

✏️ .gitignore
+3 -0

Добавилось:
# Runtime user state

/settings/


🗑️ settings/settings.json
+0 -158

Удалилось:
{

"version": 1,

"program": {

"dpi_autostart": true,

"gui_autostart_enabled": false,

"strategy_launch_method": "zapret2_mode",

"profile_ui_mode": "basic",

"selected_source_preset_file_name_winws1": "",

"selected_source_preset_file_name_winws2": "",

"auto_update_enabled": true,

... и еще 148 строк

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Merge pull request #473 from youtubediscord/codex/remove-template-origin-preset-legacy

👤 Автор: loop-uh
📅 Дата: 17.05.2026 13:50:39
🔗 SHA: 6b0bf34

📊 Статистика:
➕ Добавлено: 34930 строк
➖ Удалено: 32732 строк
📝 Всего изменений: 67662

📁 Изменено файлов: 769

✏️ .gitignore
+4 -0

Добавилось:
# Runtime user state

/settings/

/logs


🗑️ docs/gui_architecture_contract.md
+0 -73

Удалилось:
# GUI Architecture Contract

Дата фиксации: 2026-04-10

Этот документ описывает не пожелания, а архитектурный контракт GUI, который надо поддерживать при...

## Direct preset flow

- `direct_zapret1` использует выбранный source preset как единственный источник истины.

- `direct_zapret2` использует выбранный source preset как единственный источник истины.

- Канонический путь выбора direct-пресета: `PresetSelectionService` -> `DirectFlowCoordinator` ->...

- Канонический корень пресетов: `presets/` рядом с программой.

- Пользовательские direct-пресеты лежат только в `presets/presets_v1` и `presets/presets_v2`.

- Встроенные direct-пресеты лежат только в `presets/presets_v1_builtin` и `presets/presets_v2_bui...

... и еще 47 строк

🗑️ docs/gui_controller_rename_plan.md
+0 -352

Удалилось:
# GUI Controller Rename Plan

Дата фиксации: 2026-04-11

Этот документ описывает не конечный архитектурный контракт, а безопасный план миграции для слоя `...

Обновление состояния: 2026-04-12

На дату обновления план остаётся актуальным по стратегии, но уже не полностью совпадает со старой...

- naming-first стратегия остаётся канонической;

- часть folder-move этапа уже фактически произошла;

- дальше нельзя опираться на старую картину `src/ui/pages/...` как на единственный живой UI-слой;

- план нужно читать как живой маршрут миграции, а не как замороженный список старых путей.

## Зачем нужен план

... и еще 224 строк

🗑️ docs/gui_fluent_cutover_plan.md
+0 -1206

Удалилось:
# GUI Fluent Cutover Plan

Дата фиксации: 2026-04-12

Этот документ описывает не абстрактные идеи, а целевой план полной замены текущего `main_window*`...

Документ нужен как передаваемый контекст для следующего ИИ или следующей сессии. Его задача:

- зафиксировать, что именно мы считаем проблемой;

- зафиксировать, что именно мы сохраняем;

- зафиксировать, что именно подлежит полному удалению;

- дать один непротиворечивый план cutover без fallback и без второго источника истины.

## 1. Зачем вообще нужен этот cutover

Проблема проекта не в том, что GUI "не на Fluent". Наоборот, проект уже глубоко использует `qflue...

... и еще 784 строк

🆕 src/about/__init__.py
+1 -0

Добавилось:
"""Функции и планы страниц About/Support."""


🆕 src/about/plans.py
+132 -0

Добавилось:
from __future__ import annotations

import os

import subprocess

import webbrowser

from dataclasses import dataclass

from log.log import log

@dataclass(slots=True)

class AboutActionResult:

ok: bool

message: str

... и еще 99 строк

... и еще 763 файлов

... и еще 759 файлов

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Сделал. Ветка осталась `main`, чужие уже существовавшие изменения не трогал. Что изменил: - Добавил общий ограничитель строк: [src/ui/log_limits.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/ui/log_limits.py:7). - Поставил лимиты на поля логов: обычные логи, ошибки, вывод `winws`, диагностика, BlockCheck, Telegram Proxy, Orchestra. - Ограничил очередь логов Telegram Proxy: [proxy_logger.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/telegram_proxy/proxy_logger.py:81). - Ограничил очередь логов Orchestra до обработки интерфейсом: [page.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/orchestra/ui/page.py:414). - Добавил тесты: [test_ui_log_limits.py](/mnt/g/Privacy/zapretgui/public_zapretgui/tests/test_ui_log_limits.py:1). Проверил: - `PYTHONPATH=src python -m unittest discover -s tests` — 28 тестов прошли. - `PYTHONPATH=src python -m app.architecture_checks` — проверка архитектуры прошла. - `py_compile` по изменённым файлам — без ошибок. Теперь старые строки в логовых окнах будут автоматически выкидываться, а в памяти останется только последний ограниченный хвост.

👤 Автор: loop-uh
📅 Дата: 17.05.2026 14:35:03
🔗 SHA: b05e720

📊 Статистика:
➕ Добавлено: 857 строк
➖ Удалено: 152 строк
📝 Всего изменений: 1009

📁 Изменено файлов: 33

✏️ src/app/ARCHITECTURE.md
+5 -1

Удалилось:
-> ApplicationController создаёт AppRuntime


Добавилось:
-> ApplicationController создаёт AppRuntime

WindowPageActions создаётся только после `window_notifications_setup.py`.

Причина простая: действия страниц используют `window_notification_center.notify`,

а центр уведомлений появляется именно на этапе `window_notifications_setup.py`.


✏️ src/app/architecture_checks.py
+2 -1

Удалилось:
r"removed_placeholder_profiles|_OUT_RANGE_UNSIGNED_SIMPLE_RE)\b"


Добавилось:
r"removed_placeholder_profiles|_OUT_RANGE_UNSIGNED_SIMPLE_RE|"

r"sanitize_presets_before_launch|_ensure_lua_init_lines|strip_strategy_tags)\b"


✏️ src/blockcheck/ui/log_build.py
+2 -0

Добавилось:
from ui.log_limits import BLOCKCHECK_LOG_VIEW_MAX_LINES, apply_text_line_limit

apply_text_line_limit(log_edit, BLOCKCHECK_LOG_VIEW_MAX_LINES)


✏️ src/blockcheck/ui/strategy_scan_page_build.py
+2 -0

Добавилось:
from ui.log_limits import BLOCKCHECK_LOG_VIEW_MAX_LINES, apply_text_line_limit

apply_text_line_limit(log_edit, BLOCKCHECK_LOG_VIEW_MAX_LINES)


✏️ src/diagnostics/ui/build.py
+2 -0

Добавилось:
from ui.log_limits import DIAGNOSTICS_LOG_VIEW_MAX_LINES, apply_text_line_limit

apply_text_line_limit(result_text, DIAGNOSTICS_LOG_VIEW_MAX_LINES)


✏️ src/log/log.py
+2 -0

Добавилось:
from ui.log_limits import MAIN_LOG_VIEW_MAX_LINES, apply_text_line_limit

apply_text_line_limit(self.log_text, MAIN_LOG_VIEW_MAX_LINES)


✏️ src/log/ui/logs_build.py
+9 -0

Добавилось:
from ui.log_limits import (

ERROR_LOG_VIEW_MAX_LINES,

MAIN_LOG_VIEW_MAX_LINES,

WINWS_OUTPUT_MAX_LINES,

apply_text_line_limit,

)

apply_text_line_limit(log_text, MAIN_LOG_VIEW_MAX_LINES)

apply_text_line_limit(errors_text, ERROR_LOG_VIEW_MAX_LINES)

apply_text_line_limit(winws_text, WINWS_OUTPUT_MAX_LINES)


... и еще 26 файлов

... и еще 23 файлов

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Причина: post-startup слой после запуска вызывает DNS-задачу через: application_post_startup.py (line 20) python features.dns.apply_dns_on_startup_async Но в DnsFeature такого поля не было. Сам DNS-метод уже существовал в dns.public, просто фасад DNS его не отдавал наружу. Поэтому exe падал с: text AttributeError: 'DnsFeature' object has no attribute 'apply_dns_on_startup_async' Исправил в dns.py (line 8): добавил apply_dns_on_startup_async в DnsFeature и связал его с dns_public.apply_dns_on_startup_async.

👤 Автор: loop-uh
📅 Дата: 17.05.2026 14:40:51
🔗 SHA: dc35db1

📊 Статистика:
➕ Добавлено: 9 строк
➖ Удалено: 0 строк
📝 Всего изменений: 9

📁 Изменено файлов: 2

✏️ src/app/feature_facades/dns.py
+2 -0

Добавилось:
apply_dns_on_startup_async: Callable

apply_dns_on_startup_async=dns_public.apply_dns_on_startup_async,


✏️ tests/test_main_startup_contract.py
+7 -0

Добавилось:
def test_dns_feature_exposes_startup_dns_entrypoint(self) -> None:

from app.feature_facades.dns import build_dns_feature

dns_feature = build_dns_feature()

self.assertTrue(callable(dns_feature.apply_dns_on_startup_async))


🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Причина: post-startup слой после запуска вызывает DNS-задачу через: application_post_startup.py (line 20) python features.dns.apply_dns_on_startup_async Но в DnsFeature такого поля не было. Сам DNS-метод уже существовал в dns.public, просто фасад DNS его не отдавал наружу. Поэтому exe падал с: text AttributeError: 'DnsFeature' object has no attribute 'apply_dns_on_startup_async' Исправил в dns.py (line 8): добавил apply_dns_on_startup_async в DnsFeature и связал его с dns_public.apply_dns_on_startup_async.

👤 Автор: loop-uh
🔗 SHA: dc35db1

📊 Статистика: 2 files changed, 9 insertions(+)

📁 Изменённые файлы:
✏️ src/app/feature_facades/dns.py
✏️ tests/test_main_startup_contract.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 В profile_setup_page.py (line 44) теперь главное место экрана — большой список готовых стратегий. Выпадающий список убран. Большие блоки “выбранная стратегия” и “что записано в профиль” убраны с главного экрана. Как теперь устроено: в главном окне profile сверху только компактные настройки; ниже вкладка Готовые стратегии с большим списком; активная стратегия выделяется строкой как в “Мои пресеты”: мягкая акцентная подложка + маркер слева; при наведении строка подсвечивается; жирного текста нет; границ между строками нет; строки компактные, высота 34px; при клике по уже активной стратегии открывается её подстраница; внутри подстраницы стратегии есть “Оценка стратегии”; “Что записано в профиль” и аргументы стратегии теперь живут на подстранице стратегии, а не в главном окне.

👤 Автор: loop-uh
🔗 SHA: 4921bc0

📊 Статистика: 10 files changed, 560 insertions(+), 50 deletions(-)

📁 Изменённые файлы:
✏️ src/main/window_notifications_setup.py
✏️ src/main/window_page_actions.py
✏️ src/main/window_startup.py
✏️ src/main/window_startup_setup.py
✏️ src/presets/builtin/winws2/Default v1 (game filter).txt
✏️ src/profile/service.py
✏️ src/profile/state.py
✏️ src/profile/ui/profile_setup_page.py
✏️ src/ui/widgets/win11_controls.py
✏️ tests/test_main_startup_contract.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 профиль

👤 Автор: loop-uh
🔗 SHA: 90d0260

📊 Статистика: 15 files changed, 635 insertions(+), 557 deletions(-)

📁 Изменённые файлы:
✏️ src/app/feature_facades/profile.py
✏️ src/profile/commands.py
✏️ src/profile/models.py
✏️ src/profile/service.py
✏️ src/profile/state.py
🗑️ src/profile/templates/all_profiles.txt
✏️ src/profile/ui/preset_setup_page.py
🆕 src/profile/ui/profile_display_items.py
✏️ src/profile/ui/profile_item.py
✏️ src/profile/ui/profiles_list.py
🆕 tests/test_build_resource_layout.py
🆕 tests/test_profile_display_items.py
🆕 tests/test_profile_filter_kind_switch.py
🆕 tests/test_profile_list_payload.py
🆕 tests/test_profile_strategy_resolution.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Сделал большую проверку и поправил основное. Причина “всё выключено” была не одна: в живой установке выбран preset , там реально есть только 2 общих profile, а YouTube/Discord строки идут из каталога возможных profile и поэтому показывались выключенными. Плюс эти реальные profile попадали в группу «Прочее» внизу, поэтому сверху казалось, что выключено вообще всё. Что поправил: - добавил верхнюю группу , туда теперь попадают реальные profile выбранного preset; - открытие страницы profile больше не строит весь список заново; - оценки готовых стратегий теперь читаются из одним проходом, а не сотни раз; - убрал лишнюю передачу , она нигде не использовалась; - добавил тесты на первый запуск: пустые настройки и битый выбранный preset оба выбирают настроенный default preset. Основные файлы: - [service.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/profile/service.py) - [strategy_state.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/profile/strategy_state.py) - [profile_display_items.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/profile/ui/profile_display_items.py) - [profiles_list.py](/mnt/g/Privacy/zapretgui/public_zapretgui/src/profile/ui/profiles_list.py) - [test_preset_selection_defaults.py](/mnt/g/Privacy/zapretgui/public_zapretgui/tests/test_preset_selection_defaults.py) Проверил: - теста прошли; - прошёл; - прошёл; - прошёл; - на живом сборка detail-данных для profile с стратегиями заняла примерно . В On branch main

👤 Автор: loop-uh
🔗 SHA: 1c62a68

📊 Статистика: 16 files changed, 613 insertions(+), 58 deletions(-)

📁 Изменённые файлы:
✏️ src/hosts/page_controller.py
✏️ src/main/startup_coordinator.py
🆕 src/profile/list_interpreter.py
✏️ src/profile/models.py
✏️ src/profile/service.py
✏️ src/profile/state.py
✏️ src/profile/strategy_state.py
✏️ src/profile/ui/profile_display_items.py
✏️ src/profile/ui/profiles_list.py
✏️ src/winws_runtime/runtime/autostart.py
🆕 tests/test_hosts_page_runtime.py
✏️ tests/test_main_startup_contract.py
🆕 tests/test_preset_selection_defaults.py
✏️ tests/test_profile_display_items.py
✏️ tests/test_profile_list_payload.py
🆕 tests/test_startup_autostart.py

🔗 Открыть на GitHub
🐳1
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 иконки

👤 Автор: loop-uh
🔗 SHA: 2c19204

📊 Статистика: 19 files changed, 250 insertions(+), 67 deletions(-)

📁 Изменённые файлы:
✏️ requirements.txt
✏️ src/blockcheck/ui/domains_build.py
✏️ src/blockcheck/ui/log_build.py
✏️ src/blockcheck/ui/sections_build.py
✏️ src/blockcheck/ui/strategy_scan_page_build.py
✏️ src/blockcheck/ui/strategy_scan_page_results_workflow.py
✏️ src/diagnostics/ui/build.py
✏️ src/donater/ui/build.py
✏️ src/hosts/ui/sections_build.py
✏️ src/log/commands.py
✏️ src/profile/icons.py
✏️ src/profile/ui/profile_icon.py
✏️ src/profile/ui/profile_setup_page.py
✏️ src/profile/ui/shell.py
✏️ src/telegram_proxy/ui/proxy_runtime_workflow.py
✏️ src/telegram_proxy/ui/settings_build.py
✏️ src/ui/fluent_widgets.py
🆕 tests/test_log_page_runtime.py
✏️ tests/test_profile_icons.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Keep interactive readiness outside startup coordinator

👤 Автор: loop-uh
🔗 SHA: 4481a91

📊 Статистика: 4 files changed, 3 insertions(+), 16 deletions(-)

📁 Изменённые файлы:
✏️ src/main/startup_contract.md
✏️ src/main/startup_coordinator.py
✏️ src/main/window_startup_setup.py
✏️ tests/test_main_startup_contract.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Keep hidden mode sidebar items cached

👤 Автор: loop-uh
🔗 SHA: 8ebb949

📊 Статистика: 3 files changed, 59 insertions(+), 14 deletions(-)

📁 Изменённые файлы:
✏️ src/ui/navigation/layout_plan.py
✏️ src/ui/navigation/schema.py
✏️ tests/test_preset_sidebar_navigation.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Improve profile icon resolution

👤 Автор: loop-uh
🔗 SHA: 4ae8332

📊 Статистика: 2 files changed, 155 insertions(+), 28 deletions(-)

📁 Изменённые файлы:
✏️ src/profile/icons.py
✏️ tests/test_profile_icons.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Исправить перетаскивание профилей по папкам

👤 Автор: loop-uh
🔗 SHA: 335b3f2

📊 Статистика: 11 files changed, 378 insertions(+), 21 deletions(-)

📁 Изменённые файлы:
✏️ src/app/feature_facades/profile.py
✏️ src/profile/commands.py
✏️ src/profile/folders.py
✏️ src/profile/service.py
✏️ src/profile/ui/preset_setup_page.py
✏️ src/profile/ui/profile_list_delegate.py
✏️ src/profile/ui/profile_list_view.py
✏️ src/profile/ui/profiles_list.py
🆕 tests/test_profile_drag_indicator.py
✏️ tests/test_profile_folder_actions.py
✏️ tests/test_profile_list_payload.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 presets

👤 Автор: loop-uh
🔗 SHA: 46f69e1

📊 Статистика: 36 files changed, 73 insertions(+), 53 deletions(-)

📁 Изменённые файлы:
✏️ src/presets/builtin/winws2/Dead by Daylight (game filter).txt
✏️ src/presets/builtin/winws2/Dead by Daylight v2 (game filter).txt
✏️ src/presets/builtin/winws2/Default multisplit_sni.txt
✏️ src/presets/builtin/winws2/Default multisplit_stun.txt
✏️ src/presets/builtin/winws2/Default v1 (game filter).txt
✏️ src/presets/builtin/winws2/Default v2 (game filter).txt
✏️ src/presets/builtin/winws2/Gaming (game filter).txt
✏️ src/presets/builtin/winws2/Send + Syndata (game filter).txt
✏️ src/presets/builtin/winws2/Syndata + MultiDisorder legacy (game filter).txt
✏️ src/presets/builtin/winws2/Syndata + MultiDisorder legacy WoW (game filter).txt
✏️ src/presets/builtin/winws2/Ultimate Main Riot + Valorant (game filter).txt
✏️ src/presets/builtin/winws2/general ALT (game filter).txt
✏️ src/presets/builtin/winws2/general ALT10 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT11 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT2 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT3 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT4 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT6 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT6.txt
✏️ src/presets/builtin/winws2/general ALT7 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT8 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT9 1.9.4 (game filter).txt
✏️ src/presets/builtin/winws2/general ALT9 1.9.5 (game filter).txt
✏️ src/presets/builtin/winws2/general FAKE TLS AUTO (game filter).txt
✏️ src/presets/builtin/winws2/general FAKE TLS AUTO ALT (game filter).txt
✏️ src/presets/builtin/winws2/general FAKE TLS AUTO ALT2 (game filter).txt
✏️ src/presets/builtin/winws2/general FAKE TLS AUTO ALT3 (game filter).txt
✏️ src/presets/builtin/winws2/general FAKE TLS AUTO v2 (game filter).txt
✏️ src/presets/builtin/winws2/general SIMPLE FAKE (game filter).txt
✏️ src/presets/builtin/winws2/general SIMPLE FAKE ALT (game filter).txt
✏️ src/presets/builtin/winws2/general SIMPLE FAKE ALT2 (game filter).txt
✏️ "src/presets/builtin/winws2/\320\240\320\276\321\201\321\202\320\265\320\273\320\265\320\272\320\276\320\274.txt"
✏️ src/profile/service.py
✏️ src/profile/state.py
✏️ src/profile/ui/profile_display_items.py
✏️ tests/test_profile_display_items.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 clean

👤 Автор: loop-uh
🔗 SHA: e7f947b

📊 Статистика: 9 files changed, 51 insertions(+), 40 deletions(-)

📁 Изменённые файлы:
✏️ src/folders/defaults.py
✏️ src/presets/builtin/winws1/alt3_181.txt
✏️ src/presets/builtin/winws1/alt3_182.txt
✏️ src/presets/builtin/winws2/Default v1 (game filter).txt
✏️ src/presets/builtin/winws2/Preset X v3 (game filter).txt
✏️ src/profile/strategy_catalogs/winws2/tcp.txt
✏️ src/profile/strategy_catalogs/winws2/udp.txt
✏️ src/profile/strategy_catalogs/winws2/voice.txt
✏️ tests/test_folders_library.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Не перезагружать списки при drag профилей

👤 Автор: loop-uh
🔗 SHA: b9803e3

📊 Статистика: 13 files changed, 456 insertions(+), 28 deletions(-)

📁 Изменённые файлы:
✏️ src/app/feature_facades/profile.py
✏️ src/presets/ui/common/user_presets_item_actions_workflow.py
✏️ src/presets/ui/common/user_presets_page.py
✏️ src/profile/commands.py
✏️ src/profile/service.py
✏️ src/profile/ui/preset_setup_page.py
✏️ src/profile/ui/profile_list_model.py
✏️ src/profile/ui/profile_list_view.py
✏️ src/profile/ui/profiles_list.py
✏️ src/ui/presets_menu/model.py
✏️ tests/test_preset_drag_indicator.py
✏️ tests/test_profile_drag_indicator.py
✏️ tests/test_profile_setup_page_contract.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Fix external actions Qt signal weakrefs

👤 Автор: loop-uh
🔗 SHA: 019c7d9

📊 Статистика: 2 files changed, 9 insertions(+), 1 deletion(-)

📁 Изменённые файлы:
✏️ src/app/feature_facades/external.py
✏️ tests/test_main_startup_contract.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Update Default v1 (game filter).txt

👤 Автор: loop-uh
🔗 SHA: 87d7911

📊 Статистика: 1 file changed, 6 insertions(+), 5 deletions(-)

📁 Изменённые файлы:
✏️ src/presets/builtin/winws2/Default v1 (game filter).txt

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Update Default v1 (game filter).txt

👤 Автор: loop-uh
🔗 SHA: f8f520a

📊 Статистика: 1 file changed, 11 insertions(+), 11 deletions(-)

📁 Изменённые файлы:
✏️ src/presets/builtin/winws2/Default v1 (game filter).txt

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Cache preset profile icons

👤 Автор: loop-uh
🔗 SHA: c853880

📊 Статистика: 2 files changed, 51 insertions(+), 5 deletions(-)

📁 Изменённые файлы:
✏️ src/profile/ui/profile_icon.py
✏️ tests/test_profile_setup_page_contract.py

🔗 Открыть на GitHub