Files
media-player-server/RELEASE_NOTES.md
T
alexei.dolgolyov fe82836f4d
Lint & Test / test (push) Has been skipped
Release / create-release (push) Successful in 3s
Release / build-linux (push) Successful in 30s
Release / build-windows (push) Successful in 55s
chore: release v0.2.6
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-18 03:19:07 +03:00

3.5 KiB

v0.2.6 (2026-05-18)

Features

  • Foreground-window tracker (cross-platform): New /api/foreground endpoint plus live foreground / foreground_update messages on the existing WebSocket feed. Windows uses a ctypes GetForegroundWindow probe with HANDLE-correct argtypes so 64-bit window handles aren't truncated; macOS uses AppKit's NSWorkspace.frontmostApplication; Linux uses Xlib's _NET_ACTIVE_WINDOW (Wayland sessions return a structured "unavailable" so the UI can render gracefully). Each platform has a TTL cache and per-platform fallbacks. (61cdce9)
  • Browser page-title surfacing: When the foreground process is a recognised browser, the window title is stripped of the trailing browser-name suffix and exposed as browser_page_title alongside is_browser. Optional UIA-based URL extraction sits behind the MEDIA_SERVER_BROWSER_UIA env flag (off by default — Chromium browsers keep their accessibility tree dormant unless something asks, and enabling it has a measurable cost). (61cdce9)
  • Foreground card in the Web UI: New editorial card under the monitor list on the Display tab renders process name, window title, fullscreen / minimized / monitor chips, the browser block when applicable, exe path, PID, started-ago, geometry, and platform. 16px inter-section gap matches the Settings cadence. 25 new i18n keys added to both en.json and ru.json. (61cdce9)
  • WebSocket integration: The existing 1s status loop now polls foreground every tick, broadcasts foreground on connect, and emits foreground_update only when user-visible fields actually change — geometry deltas alone don't spam the channel. (61cdce9)

Security

  • Loopback-by-default in the shipped config: config.example.yaml now defaults host: 127.0.0.1. The server still refuses to bind a non-loopback interface without either api_tokens configured or an explicit allow_lan_without_auth: true opt-in — this hardens fresh installs where a user copies the example config verbatim. (0cf49de)

Reliability

  • Diagnosable silent boot failures: Pre-uvicorn fatal errors (config parse failures, port conflicts, missing dependencies on Windows) are now mirrored to startup-errors.log in the config directory. Previously, launches via wscript/pythonw (the hidden Startup-folder shortcut path) had no console attached, so any startup crash was effectively invisible — the user just saw "nothing happened". (0cf49de)

Development / Internal

  • Lint cleanup: Sorted the Xlib import in foreground_service.py so ruff check is clean. Same module, no behaviour change.

All Commits
Hash Message Author
61cdce9 feat(foreground): track topmost process + browser page title alexei.dolgolyov
0cf49de fix(config): secure-by-default loopback bind and startup-error logging alexei.dolgolyov