Вынос общей логики трея в utils/ и ui/, добавление отображения состояния прокси (иконка с бейджем, диагностика TCP, lock второго экземпляра) и секцию статуса в окне настроек с обновлением README.
Детально
Общая логика трея (пути, lock, конфиг, прокси, IPv6, обновления) вынесена в utils/tray_* и ui/tray_*; точки входа windows.py / linux.py / macos.py упрощены.
Добавлены .editorconfig и .gitattributes (в т.ч. нормализация окончаний строк).
В README кратко описана структура исходников.
ProxyRuntimeState и tray_diagnostics: фазы работы прокси, форматирование отчёта по TCP; в tg_ws_proxy — колбэк on_listening.
Иконка трея: цветной бейдж (зелёный — слушает, красный — ошибка, жёлтый — прочие состояния); подсказка к иконке с краткой легендой.
Меню: один пункт «Статус и проверка TCP…»; проверка порта до запуска; WinError 10013 трактуется как конфликт порта.
SingleInstanceLock: не снимать lock, если PID в lock-файле всё ещё жив; более устойчивое сопоставление «своего» процесса.
Windows: диалоги MessageBox с родительским HWND трея и флагами SYSTEMMODAL / SETFOREGROUND (корректный фокус и модальность).
Обновления: last_check_at, подписи в офлайне; при verbose обновления логируются в INFO.
Первый запуск: подсказки по типичным проблемам; macOS: PNG с бейджем для rumps.
В форме настроек (CustomTkinter) добавлена секция «Статус»: индикатор фазы, текст состояния и uptime при прослушивании, периодическое обновление.
ctk_theme: цвета для «таблетки» статуса (status_pill_bg, status_pill_border).
tray_proxy_state / tray_icons: упрощение подсказок и отображения (без лишней второй строки легенды в tooltip там, где это убрано в пользу минимального UI).
README и точки входа (windows / linux) синхронизированы с новым поведением.
Важно
Изменения были протестированы только на windows, перед мерджем обязательно протестировать на linux, macos так как изменения глобально влияют на подход к работе программы
Часть кода была написана с использованием ИИ
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/Flowseal/tg-ws-proxy/pull/449
**Author:** [@deexsed](https://github.com/deexsed)
**Created:** 3/27/2026
**Status:** ❌ Closed
**Base:** `main` ← **Head:** `refactor/dry_in_tray`
---
### 📝 Commits (5)
- [`7db2691`](https://github.com/Flowseal/tg-ws-proxy/commit/7db2691ae1f990540b5c1502395eb34942a561f8) refactor(tray): общие модули utils/ui, README, LF в репозитории
- [`bd5056a`](https://github.com/Flowseal/tg-ws-proxy/commit/bd5056a64ce821305e33eb6920a2c4df3d8156f6) feat(tray): статус прокси, бейдж на иконке, lock и диагностика
- [`a11b634`](https://github.com/Flowseal/tg-ws-proxy/commit/a11b634ba7f0239192dbb74652b8c55ece6b224b) feat(tray): добавлен статус прокси в GUI и обновлены настройки
- [`85005d0`](https://github.com/Flowseal/tg-ws-proxy/commit/85005d00537b1a0f46081e2e4e3fff06b3079079) Update ctk_tray_ui.py
- [`415079e`](https://github.com/Flowseal/tg-ws-proxy/commit/415079e54bd6d9c581b24f051fd110d0c2ad37b0) Update README.md
### 📊 Changes
**21 files changed** (+1703 additions, -1053 deletions)
<details>
<summary>View changed files</summary>
➕ `.editorconfig` (+11 -0)
➕ `.gitattributes` (+9 -0)
📝 `README.md` (+16 -1)
📝 `linux.py` (+176 -359)
📝 `macos.py` (+255 -341)
📝 `proxy/tg_ws_proxy.py` (+9 -2)
📝 `ui/__init__.py` (+2 -2)
📝 `ui/ctk_theme.py` (+3 -1)
📝 `ui/ctk_tray_ui.py` (+115 -3)
➕ `ui/tray_ctk.py` (+12 -0)
➕ `ui/tray_icons.py` (+114 -0)
➕ `utils/tray_diagnostics.py` (+71 -0)
➕ `utils/tray_io.py` (+76 -0)
➕ `utils/tray_ipv6.py` (+79 -0)
➕ `utils/tray_lock.py` (+181 -0)
➕ `utils/tray_paths.py` (+44 -0)
➕ `utils/tray_proxy_runner.py` (+177 -0)
➕ `utils/tray_proxy_state.py` (+106 -0)
➕ `utils/tray_updates.py` (+47 -0)
📝 `utils/update_check.py` (+9 -0)
_...and 1 more files_
</details>
### 📄 Description
## Кратко
Вынос общей логики трея в `utils/` и `ui/`, добавление отображения состояния прокси (иконка с бейджем, диагностика TCP, lock второго экземпляра) и секцию статуса в окне настроек с обновлением README.
## Детально
- Общая логика трея (пути, lock, конфиг, прокси, IPv6, обновления) вынесена в `utils/tray_*` и `ui/tray_*`; точки входа `windows.py` / `linux.py` / `macos.py` упрощены.
- Добавлены `.editorconfig` и `.gitattributes` (в т.ч. нормализация окончаний строк).
- В README кратко описана структура исходников.
- **`ProxyRuntimeState`** и **`tray_diagnostics`**: фазы работы прокси, форматирование отчёта по TCP; в **`tg_ws_proxy`** — колбэк **`on_listening`**.
- **Иконка трея**: цветной бейдж (зелёный — слушает, красный — ошибка, жёлтый — прочие состояния); подсказка к иконке с краткой легендой.
- **Меню**: один пункт «Статус и проверка TCP…»; проверка порта до запуска; **WinError 10013** трактуется как конфликт порта.
- **`SingleInstanceLock`**: не снимать lock, если PID в lock-файле всё ещё жив; более устойчивое сопоставление «своего» процесса.
- **Windows**: диалоги **MessageBox** с родительским HWND трея и флагами **SYSTEMMODAL** / **SETFOREGROUND** (корректный фокус и модальность).
- **Обновления**: `last_check_at`, подписи в офлайне; при verbose обновления логируются в **INFO**.
- **Первый запуск**: подсказки по типичным проблемам; **macOS**: PNG с бейджем для **rumps**.
- В форме настроек (CustomTkinter) добавлена секция **«Статус»**: индикатор фазы, текст состояния и uptime при прослушивании, периодическое обновление.
- **`ctk_theme`**: цвета для «таблетки» статуса (`status_pill_bg`, `status_pill_border`).
- **`tray_proxy_state` / `tray_icons`**: упрощение подсказок и отображения (без лишней второй строки легенды в tooltip там, где это убрано в пользу минимального UI).
- **README** и точки входа (`windows` / `linux`) синхронизированы с новым поведением.
# **Важно**
Изменения были протестированы только на `windows`, перед мерджем обязательно протестировать на `linux`, `macos` так как изменения глобально влияют на подход к работе программы
Часть кода была написана с использованием ИИ
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot
changed title from [PR #449] [CLOSED] Трей, состояние прокси и рефакторинг модулей to [PR #449] Трей, состояние прокси и рефакторинг модулей2026-07-20 04:09:23 +03:00
mirror-bot
changed title from [PR #449] Трей, состояние прокси и рефакторинг модулей to [PR #449] [CLOSED] Трей, состояние прокси и рефакторинг модулей2026-07-20 23:14:21 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/Flowseal/tg-ws-proxy/pull/449
Author: @deexsed
Created: 3/27/2026
Status: ❌ Closed
Base:
main← Head:refactor/dry_in_tray📝 Commits (5)
7db2691refactor(tray): общие модули utils/ui, README, LF в репозиторииbd5056afeat(tray): статус прокси, бейдж на иконке, lock и диагностикаa11b634feat(tray): добавлен статус прокси в GUI и обновлены настройки85005d0Update ctk_tray_ui.py415079eUpdate README.md📊 Changes
21 files changed (+1703 additions, -1053 deletions)
View changed files
➕
.editorconfig(+11 -0)➕
.gitattributes(+9 -0)📝
README.md(+16 -1)📝
linux.py(+176 -359)📝
macos.py(+255 -341)📝
proxy/tg_ws_proxy.py(+9 -2)📝
ui/__init__.py(+2 -2)📝
ui/ctk_theme.py(+3 -1)📝
ui/ctk_tray_ui.py(+115 -3)➕
ui/tray_ctk.py(+12 -0)➕
ui/tray_icons.py(+114 -0)➕
utils/tray_diagnostics.py(+71 -0)➕
utils/tray_io.py(+76 -0)➕
utils/tray_ipv6.py(+79 -0)➕
utils/tray_lock.py(+181 -0)➕
utils/tray_paths.py(+44 -0)➕
utils/tray_proxy_runner.py(+177 -0)➕
utils/tray_proxy_state.py(+106 -0)➕
utils/tray_updates.py(+47 -0)📝
utils/update_check.py(+9 -0)...and 1 more files
📄 Description
Кратко
Вынос общей логики трея в
utils/иui/, добавление отображения состояния прокси (иконка с бейджем, диагностика TCP, lock второго экземпляра) и секцию статуса в окне настроек с обновлением README.Детально
utils/tray_*иui/tray_*; точки входаwindows.py/linux.py/macos.pyупрощены..editorconfigи.gitattributes(в т.ч. нормализация окончаний строк).ProxyRuntimeStateиtray_diagnostics: фазы работы прокси, форматирование отчёта по TCP; вtg_ws_proxy— колбэкon_listening.SingleInstanceLock: не снимать lock, если PID в lock-файле всё ещё жив; более устойчивое сопоставление «своего» процесса.last_check_at, подписи в офлайне; при verbose обновления логируются в INFO.ctk_theme: цвета для «таблетки» статуса (status_pill_bg,status_pill_border).tray_proxy_state/tray_icons: упрощение подсказок и отображения (без лишней второй строки легенды в tooltip там, где это убрано в пользу минимального UI).windows/linux) синхронизированы с новым поведением.Важно
Изменения были протестированы только на
windows, перед мерджем обязательно протестировать наlinux,macosтак как изменения глобально влияют на подход к работе программыЧасть кода была написана с использованием ИИ
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
[PR #449] [CLOSED] Трей, состояние прокси и рефакторинг модулейto [PR #449] Трей, состояние прокси и рефакторинг модулей[PR #449] Трей, состояние прокси и рефакторинг модулейto [PR #449] [CLOSED] Трей, состояние прокси и рефакторинг модулей