diff --git a/lib/screens/metadata_edit_screen.dart b/lib/screens/metadata_edit_screen.dart index 12bac7df..b5dfbbb4 100644 --- a/lib/screens/metadata_edit_screen.dart +++ b/lib/screens/metadata_edit_screen.dart @@ -219,8 +219,22 @@ class _MetadataEditScreenState extends State { ); if (result == true && mounted) { - // Reload metadata to get updated artwork paths - _loadMetadata(); + // Re-fetch metadata to get updated artwork paths without resetting + // any text field edits the user may have made. + await _reloadArtwork(); + } + } + + Future _reloadArtwork() async { + try { + final meta = await _client.getMetadataWithImages(widget.metadata.ratingKey); + if (!mounted) return; + if (meta != null) { + setState(() => _fullMetadata = meta); + } + } catch (_) { + // Artwork was already saved by the picker; display will refresh next + // time the editor is opened. } } diff --git a/lib/widgets/artwork_picker_dialog.dart b/lib/widgets/artwork_picker_dialog.dart index af9cbd5a..ac881eb3 100644 --- a/lib/widgets/artwork_picker_dialog.dart +++ b/lib/widgets/artwork_picker_dialog.dart @@ -49,12 +49,16 @@ class _ArtworkPickerDialogState extends State { } Future _selectArtwork(Map artwork) async { - final key = artwork['key'] as String?; - if (key == null || _isApplying) return; + // Use ratingKey (the artwork provider identifier) rather than key (a + // file-serving path that is already percent-encoded). Passing key through + // Dio's query-parameter encoding double-encodes it, causing Plex to + // silently ignore the selection despite returning 200. + final url = artwork['ratingKey'] as String? ?? artwork['key'] as String?; + if (url == null || _isApplying) return; setState(() => _isApplying = true); - final success = await widget.client.setArtworkFromUrl(widget.ratingKey, widget.element, key); + final success = await widget.client.setArtworkFromUrl(widget.ratingKey, widget.element, url); if (!mounted) return; setState(() => _isApplying = false);