From 252da585e391e8299266a64271946aab69eb4554 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:01:49 +0100 Subject: [PATCH] fix: android track list parsing --- lib/mpv/player/player_native.dart | 24 +++++++++++++++++++-- lib/screens/libraries/folder_tree_item.dart | 3 +-- lib/utils/plex_image_helper.dart | 1 - 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/mpv/player/player_native.dart b/lib/mpv/player/player_native.dart index c2b95841..bee08065 100644 --- a/lib/mpv/player/player_native.dart +++ b/lib/mpv/player/player_native.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'dart:io' show Platform; import 'package:flutter/services.dart'; @@ -158,8 +159,24 @@ class PlayerNative implements Player { break; case 'track-list': + List? trackList; if (value is List) { - final tracks = _parseTrackList(value); + trackList = value; + } else if (value is String) { + // Android - JSON string that needs parsing + try { + final decoded = jsonDecode(value); + if (decoded is List) { + trackList = decoded; + } + } catch (e) { + // Invalid JSON, ignore + break; + } + } + + if (trackList != null) { + final tracks = _parseTrackList(trackList); _state = _state.copyWith(tracks: tracks); _tracksController.add(tracks); } @@ -283,7 +300,10 @@ class PlayerNative implements Player { await _observeProperty('duration', 'double'); await _observeProperty('pause', 'flag'); await _observeProperty('paused-for-cache', 'flag'); - await _observeProperty('track-list', 'node'); + await _observeProperty( + 'track-list', + Platform.isAndroid ? 'string' : 'node', + ); await _observeProperty('eof-reached', 'flag'); await _observeProperty('volume', 'double'); await _observeProperty('aid', 'string'); diff --git a/lib/screens/libraries/folder_tree_item.dart b/lib/screens/libraries/folder_tree_item.dart index 61caf51d..97f0bd8a 100644 --- a/lib/screens/libraries/folder_tree_item.dart +++ b/lib/screens/libraries/folder_tree_item.dart @@ -56,8 +56,7 @@ class _FolderTreeItemState extends State { } KeyEventResult _handleKeyEvent(FocusNode node, KeyEvent event) { - if (event is KeyDownEvent && - isKeyboardActivationKey(event.logicalKey)) { + if (event is KeyDownEvent && isKeyboardActivationKey(event.logicalKey)) { _isKeyboardActivation = true; return KeyEventResult.ignored; // Let InkWell handle the activation } diff --git a/lib/utils/plex_image_helper.dart b/lib/utils/plex_image_helper.dart index 434bbd3f..02ef996e 100644 --- a/lib/utils/plex_image_helper.dart +++ b/lib/utils/plex_image_helper.dart @@ -225,5 +225,4 @@ class PlexImageHelper { final serverPrefix = serverId != null ? '${serverId}_' : ''; return '${serverPrefix}transcode_${width}x${height}_${originalPath.hashCode}'; } - }