Skip to content

L-MPV v2.5.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 23:04

L-MPV v2.5.0 — Большое обновление: Real-Time AI Upscaling, Улучшенный Дизайн

L-MPV - Banner Watercolor -  07  v2

🎨 Редизайн настроек и эргономики интерфейса

  • Унифицированный дизайн селекторов: Все активные элементы (чипы хоткеев, плитки моделей нейросетей, пресеты, вкладки, темы, кнопки визуализатора) приведены к единому стандарту. Добавлена рамка 1.5px solid var(--accent), внутреннее и внешнее свечение box-shadow inset 1.5px, фоновая тонировка rgba(var(--accent-rgb), 0.16) и контрастный текст
  • Глубина и объем: Карточкам внешнего вида, палитрам и сворачиваемым аккордеонам добавлена парящая тень (box-shadow: 0 4px 14px) и полупрозрачная тематическая подложка rgba(255, 255, 255, 0.025), просвечивающая цвет выбранной темы. Раскрытые заголовки секций получили выразительную тень и аккуратный нижний разделитель
  • Эргономика сетки: Блок настроек интерфейса разделен на 3 колонки (Скругление, Масштаб, Шрифты) со строгим стандартом высоты заголовков — 22px. Карточки выбора стиля панели управления избавлены от круглых радио-индикаторов, а интерактивное мини-превью плеера увеличено до 148x64 px.
  • Премиальные ползунки:
    • Внедрен тонкий слайдер прозрачности (ui-premium-slider) с высотой трека 3px, свечением и динамической заливкой акцентным цветом. Отступы (от надписи до слайдера и до процентов) идеально отцентрированы — строго по 14px.
    • Разработан кастомный компонент VerticalSlider для масштаба и скругления. Он предотвращает вылезание бегунка за границы, изолирован в центрированном flex-контейнере 20px и имеет плавную интерактивную анимацию (scale 1.25 с неоновым акцентом), синхронизированную с горизонтальными слайдерами. Текущие числовые значения теперь вынесены прямо в шапку карточек.
  • Zero Layout Shift: Полностью устранен сдвиг макета при выборе опций в настройках. Появление и скрытие кнопок сброса переведено на плавную CSS-анимацию (opacity, scale, visibility) без пересборки DOM. Под кнопку сброса зарезервировано постоянное место (26x22px).

🖱️ Продвинутый редактор контекстного меню (ПКМ)

  • Drag-and-Drop конфигуратор (ContextMenuSettingsTab): Внедрен стек @dnd-kit (core, sortable, utilities) для создания визуального двухколоночного редактора меню с поддержкой тач-событий, добавлением/удалением разделителей и сбросом к дефолту.
  • Новые разделы в меню:
    • Пресеты: динамический список пользовательских и встроенных пресетов с переключением в реальном времени.
    • Апскейлинг: список доступных моделей с переключением режимов и слотов.
    • Кнопки панели: быстрое управление видимостью отдельных кнопок нижней панели.
  • Портативность бэкенда: Конфигурация меню (contextMenuLayout) сохраняется строго локально в config/context_menu.json без использования системного реестра. Добавлены команды get_context_menu_layout и save_context_menu_layout в Tauri.
  • Архитектура: Создан модульный реестр MENU_ITEM_REGISTRY, добавлена валидация схемы раскладки. Динамическая сборка меню теперь работает за O(1) благодаря поиску через структуру Map.

⏱️ Элементы управления и вкладка «Общие»

  • Новые позиции времени воспроизведения: Добавлены 3 новых стиля позиционирования (оформлены в компактную сетку 3x2 в настройках):
    1. Плавающий стеклянный бейдж по центру над таймлайном (timeline_floating_center).
    2. Справа в тулбаре перед служебными кнопками (toolbar_right).
    3. В верхнем заголовке окна (Titlebar) слева от кнопок окна (titlebar)
    • Фича: При выборе позиций вне полосы, таймлайн автоматически раскрывается на 100% ширины.
  • Генеральная уборка вкладки «Общие» (GeneralSettingsTab): 7 мелких разрозненных аккордеонов заменены на 3 крупные логические категории, которые теперь стилизованы под единый дизайн карточек и открыты по умолчанию:
    1. Воспроизведение и окна: сегментный селектор окончания видео, Multi-instance, авто-скрытие UI сверху в полном экране.
    2. Аудиодорожки и субтитры: автоподхват из папки, авто-переключение, Drag & Drop загрузка (хотлоад), сохранение извлеченных дорожек.
    3. Скриншоты и медиатека: выбор папки сохранения через проводник, подсказки по горячим клавишам (S / Shift+S), сброс к дефолту.

⚙️ Глубокая оптимизация и багфиксы

  • Тотальный аудит утечек памяти: Обеспечена строгая очистка всех таймеров (clearTimeout), слушателей событий (removeEventListener), IPC-подписок Tauri (unlisten), а также циклов cancelAnimationFrame Canvas и ResizeObserver. Константа SETTINGS_TABS вынесена на уровень модуля, наборы данных мемоизированы через useMemo.
  • Безопасность VerticalSlider: Компонент обернут в React.memo с useCallback. Добавлена защита от деления на ноль, точный расчет дробного шага (0.05) и поддержка клавиатурной навигации стрелками (a11y).
  • Защита localStorage: В слайдерах добавлена фильтрация избыточных вызовов onChange при микро-движениях курсора, что предотвращает лавину сохранений в локальное хранилище.
  • Исправление багов Drag-and-Drop: Внедрен компонент ScrollSync для мгновенного обновления геометрии dnd-kit через requestAnimationFrame при автоскролле вверх/вниз. Разработана прецизионная 1D-стратегия коллизий на базе getClientRect (ignoreTransform: true) для исключения искажений от временных CSS-анимаций.
  • Фиксы интерфейса:
    • Исправлены приплюснутые карточки пресетов: удалены пустые распорки и заданы правильные minHeight.
    • Исправлена утечка таймера подменю, гарантирована уникальность ключей генерации и защита от саморерендеров через isSelfUpdateRef.
    • Устранен визуальный выход скроллбара за границы карточек (margin трека 4px).
    • В редакторе контекстного меню заголовки колонок очищены от затемнений, текст переведен на var(--text-primary).
    • Устранен дублирующий блок стилей settings-accordion в CSS-модуле modals.css.
    • Устранена утечка состояния захвата перетаскивания через onLostPointerCapture и безопасную проверку hasPointerCapture.