12 Commits

Author SHA1 Message Date
d62a3f79c1 feat: hide AVPlayerView default controls, use custom toolbar only 2026-06-23 08:44:34 +08:00
ad1be14a0c refactor: restore Bricks .ui for video player + native overlay controls
- miniplayer.ui: VideoPlayer 100% fullscreen (Bricks renders video)
- BricksAppView: loads .ui via BricksView, ZStack overlays native controls
- ControlToolbar: semi-transparent (0.6 opacity), slides from bottom
- 30-second auto-hide timer with mouse-hover reset
- Left-top icon toggles toolbar visibility
2026-06-23 08:36:27 +08:00
e7bca7269e feat: add i18n support and app icon in top-left corner
- Added i18n JSON files (zh.json, en.json) with auto language detection
- Updated miniplayer.ui to use i18n keys for all button labels
- Added MiniPlayerIcon overlay in top-left corner of main window
- Load i18n translations on app startup based on system locale
2026-06-22 20:43:13 +08:00
49bc681cf7 chore: rename miniplayer.json to miniplayer.ui 2026-06-22 20:16:32 +08:00
bdf834012a feat: SwiftBricks UI integration with shared AVPlayer
- Inject PlayerBridge AVPlayer into BricksStore for VideoPlayer widget
- Load miniplayer.json from SPM bundle resources
- Fix infinite render loop: pass JSON string instead of schema object
- Fix async closure mismatch in setupBridgeEvents
- Enhanced JSON: URL input, load/play/pause buttons, title bar
- Remove duplicate Resources/miniplayer.json (keep SPM-compliant path)
2026-06-22 09:52:28 +08:00
aa19ab9799 feat: i18n support, tri-color icon, fix crash
- Add i18n: Localization.swift + zh-Hans/en Localizable.strings
- Add MiniPlayerIcon SwiftUI view (tri-color play button + ring)
- Fix crash: isInteracting/lastInteraction no longer @Published
- Fix crash: ExitFullscreen notification wrapped in DispatchQueue.main.async
- Auto-hide toolbar uses local @State + Timer (not @Published)
- Replace emoji logo with MiniPlayerIcon
- Move icon sets out of Resources/ to avoid SPM conflicts
- Package.swift: add defaultLocalization, process Resources
2026-06-22 00:40:20 +08:00
3e3a990f5e fix: replace Combine KVO with NSKeyValueObservation to prevent autorelease crash
- Remove Combine import and cancellables
- Use NSKeyValueObservation for timeControlStatus (controlled teardown)
- Invalidate itemStatusObserver before replacing playerItem
- Store endObserver token for proper removal
- Add cleanup() method called on view disappear
- Proper deinit with direct property cleanup (nonisolated-safe)
2026-06-22 00:36:18 +08:00
2fd6db3a4e chore: remove unused player.ui resource (SwiftBricks schema no longer needed) 2026-06-22 00:10:51 +08:00
4b94f11664 feat: hidden toolbar with logo toggle, semi-transparent controls, playlist popup window 2026-06-21 23:43:20 +08:00
2a5e3b8ad7 feat: video fills entire window, compact control bar, single-tap play/pause 2026-06-21 23:27:17 +08:00
Hermes Agent
bc9a732809 rename player.json to player.ui to match bricks convention 2026-06-21 17:58:12 +08:00
Hermes Agent
c69ec38dc3 refactor: rewrite MiniPlayer using SwiftBricks framework
- UI defined in player.json (Bricks JSON schema)
- Custom widgets: VideoPlayer (AVPlayer layer), ProgressSlider (seek bar)
- PlayerBridge connects AVPlayer to BricksEngine event bus
- All interactions via binds/events (no imperative UI code)
- Depends on SwiftBricks SPM package
2026-06-21 17:48:06 +08:00