Анализ Windows и очистка кешей, мусора и остатков разработки. Ядро: - каталог правил: 228 правил путей (496 шаблонов) + 43 правила артефактов проектов — Windows, браузеры, кеши сборки, IDE, приложения, пакетные менеджеры; - рекурсивный поиск node_modules, target, build, __pycache__, .venv и т.п. с проверкой маркеров проекта, чтобы не ловить ложные срабатывания; - поиск крупных файлов и дубликатов (хеш по началу/середине/концу и полная сверка), инвентаризация установленных программ через реестр; - ограничение области сканирования по дискам; - рекомендации и текстовый отчёт. Безопасность: - четыре уровня риска, автоматически отмечается только «Безопасно»; - список защищённых путей проверяется и при выборе, и перед удалением; - для каталогов вроде %TEMP% удаляется содержимое, а не сам каталог; - удаление в Корзину по умолчанию, пробный запуск, журнал очисток. Интерфейс на Dear PyGui: - JetBrains Mono Nerd Font: кириллица и иконки в одном шрифте; - тёмная и светлая темы, адаптивная раскладка; - заголовок окна ставится через SetWindowTextW — Dear PyGui отдаёт его в ANSI-функцию как UTF-8 и портит кириллицу; - запуск всегда с правами администратора: манифест UAC в exe и самоперезапуск через ShellExecuteW при работе из исходников. Сборка в один exe через PyInstaller со вшитым шрифтом и значком. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
"""Иконки Nerd Font (JetBrains Mono NF).
|
||
|
||
Nerd Font добавляет к обычному шрифту иконочные глифы в зонах частного
|
||
использования Unicode. Мы берём только глифы из BMP (U+E000–U+F8FF):
|
||
набор Material Design Icons в Nerd Font лежит выше U+FFFF, а Dear ImGui
|
||
по умолчанию собран с 16-битным ``ImWchar`` и такие символы не покажет.
|
||
|
||
Используемые наборы:
|
||
* Font Awesome 4 — U+F000…U+F2E0
|
||
* Devicons — U+E700…U+E7C5
|
||
* Codicons — U+EA60…U+EBEB
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from ..core.model import Category
|
||
|
||
# --- общие ---------------------------------------------------------------
|
||
SEARCH = "" # лупа
|
||
STOP = "" # стоп
|
||
REFRESH = "" # обновить
|
||
TRASH = "" # корзина
|
||
BROOM = "" # магия/очистка
|
||
SAVE = "" # дискета
|
||
FOLDER_OPEN = "" # открытая папка
|
||
FOLDER = "" # папка
|
||
COPY = "" # копия
|
||
FILTER = "" # фильтр
|
||
GEAR = "" # шестерёнка
|
||
INFO = "" # инфо
|
||
WARNING = "" # треугольник с восклицательным знаком
|
||
CHECK = "" # галочка
|
||
CLOSE = "" # крестик
|
||
LIGHTBULB = "" # лампочка — рекомендация
|
||
BOLT = "" # молния — быстрое действие
|
||
SHIELD = "" # щит — безопасность
|
||
HISTORY = "" # история
|
||
CHART = "" # столбики
|
||
HDD = "" # диск
|
||
LIST = "" # список
|
||
PLUS = ""
|
||
MINUS = ""
|
||
UNDO = ""
|
||
SUN = ""
|
||
MOON = ""
|
||
EXPAND = ""
|
||
COLLAPSE = ""
|
||
CHEVRON_RIGHT = ""
|
||
CUBE = ""
|
||
ARCHIVE = ""
|
||
WRENCH = ""
|
||
FILE_TEXT = ""
|
||
GLOBE = ""
|
||
GAMEPAD = ""
|
||
WINDOWS = ""
|
||
COGS = ""
|
||
ELEPHANT = "" # архивный файл — «тяжёлые файлы»
|
||
CLOCK = ""
|
||
DATABASE = ""
|
||
POWER = ""
|
||
|
||
# --- иконки категорий ----------------------------------------------------
|
||
CATEGORY: dict[Category, str] = {
|
||
Category.WINDOWS: WINDOWS,
|
||
Category.BROWSERS: GLOBE,
|
||
Category.DEV_CACHE: COGS,
|
||
Category.DEV_PROJECT: CUBE,
|
||
Category.APPS: GAMEPAD,
|
||
Category.LOGS: FILE_TEXT,
|
||
Category.PACKAGE_MANAGERS: ARCHIVE,
|
||
Category.BIG_FILES: ELEPHANT,
|
||
Category.DUPLICATES: COPY,
|
||
Category.PROGRAMS: FOLDER,
|
||
}
|
||
|
||
|
||
def cat(category: Category) -> str:
|
||
"""Иконка категории с отступом, готовая к подстановке в подпись."""
|
||
return CATEGORY.get(category, LIST) + " "
|
||
|
||
|
||
def btn(icon: str, label: str) -> str:
|
||
"""Подпись кнопки: иконка, два пробела, текст."""
|
||
return f"{icon} {label}"
|