diff --git a/lib/services/track_selection_service.dart b/lib/services/track_selection_service.dart index da557a11..2c6aca92 100644 --- a/lib/services/track_selection_service.dart +++ b/lib/services/track_selection_service.dart @@ -39,9 +39,12 @@ SubtitleTrack? findMpvTrackForPlexSubtitle(PlexSubtitleTrack plexTrack, List for (final mpvTrack in mpvTracks) { int score = 0; - // Language match is most important (+10) + // Language match is most important (+10, +1 bonus for exact code match) if (_languagesMatch(mpvTrack.language, plexTrack.languageCode)) { score += 10; + if (_languageCodesExactMatch(mpvTrack.language, plexTrack.languageCode)) { + score += 1; + } } // Codec match (+5) @@ -176,9 +185,12 @@ PlexAudioTrack? findPlexTrackForMpvAudio(AudioTrack mpvTrack, List= 10 ? bestMatch : null; } +/// Check if two language codes match exactly (after normalizing case and stripping region suffixes) +bool _languageCodesExactMatch(String? a, String? b) { + if (a == null || b == null) return false; + return a.toLowerCase().split('-').first == b.toLowerCase().split('-').first; +} + /// Check if two language codes refer to the same language /// Handles both ISO 639-1 (2-letter) and ISO 639-2 (3-letter) codes bool _languagesMatch(String? mpvLang, String? plexLang) {