diff --git a/lib/models/items/episode_model.dart b/lib/models/items/episode_model.dart index 6ac17ea46..5825282e5 100644 --- a/lib/models/items/episode_model.dart +++ b/lib/models/items/episode_model.dart @@ -86,7 +86,7 @@ class EpisodeModel extends ItemStreamModel with EpisodeModelMappable { String windowTitle(AppLocalizations l10n) { final s = season.toString().padLeft(2, '0'); final e = episodeRange.padLeft(2, '0'); - final prefix = seriesName != null ? '$seriesName • ' : ''; + final prefix = seriesName != null ? '$seriesName - ' : ''; return '$prefix${l10n.season(1)[0]}$s${l10n.episode(1)[0]}$e $name'; } diff --git a/lib/models/items/season_model.dart b/lib/models/items/season_model.dart index cd7d2480f..88e6f8b76 100644 --- a/lib/models/items/season_model.dart +++ b/lib/models/items/season_model.dart @@ -80,7 +80,7 @@ class SeasonModel extends ItemBaseModel with SeasonModelMappable { @override String windowTitle(AppLocalizations l10n) { - final prefix = seriesName.isNotEmpty ? '$seriesName • ' : ''; + final prefix = seriesName.isNotEmpty ? '$seriesName - ' : ''; return '$prefix${localizedName(l10n)}'; } diff --git a/lib/providers/window_title_provider.dart b/lib/providers/window_title_provider.dart index a7528feb7..917db1293 100644 --- a/lib/providers/window_title_provider.dart +++ b/lib/providers/window_title_provider.dart @@ -56,16 +56,18 @@ class WindowTitleNotifier extends StateNotifier { void _update() { final nav = _stackKeys.isNotEmpty ? _titles[_stackKeys.last] : null; final playerState = ref.read(mediaPlaybackProvider).state; - final appName = ref.read(musicDashboardModeProvider) ? 'Tjilp' : 'Fladder'; - final isPlayerActive = playerState != VideoPlayerState.disposed; final isPlayerMinimized = playerState == VideoPlayerState.minimized; + final isMusicMode = ref.read(musicDashboardModeProvider); + final appName = isMusicMode ? 'Tjilp' : 'Fladder'; // Use playTitle if player is active and expanded/fullscreen. // If player is minimized or inactive, prefer navigation title. final title = (isPlayerActive && !isPlayerMinimized) ? (_playTitle ?? nav) : (nav ?? _playTitle); - final newState = title != null && title.isNotEmpty ? '$appName - $title' : appName; + // Avoid repeating Fladder in Linux panels; keep music windows identifiable. + final includeAppName = kIsWeb || !Platform.isLinux || isMusicMode; + final newState = title != null && title.isNotEmpty ? (includeAppName ? '$appName - $title' : title) : appName; if (state == newState) return; diff --git a/macos/Podfile b/macos/Podfile index 2b67784a7..159b0d618 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -1,4 +1,5 @@ -platform :osx, '12.0' +macos_deployment_target = '12.0' +platform :osx, macos_deployment_target # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -39,8 +40,12 @@ end post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_macos_build_settings(target) + # Apply the app's minimum to plugins and their privacy resource bundles. target.build_configurations.each do |config| - config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '12.0' + deployment_target = config.build_settings['MACOSX_DEPLOYMENT_TARGET'] + if deployment_target.nil? || Gem::Version.new(deployment_target) < Gem::Version.new(macos_deployment_target) + config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = macos_deployment_target + end end end end diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 3fb3e558f..7235d890e 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -188,38 +188,38 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: - audio_service: cab6c1a0eaf01b5a35b567e11fa67d3cc1956910 - audio_session: 728ae3823d914f809c485d390274861a24b0904e - connectivity_plus: 0a976dfd033b59192912fa3c6c7b54aab5093802 - desktop_drop: e52397f93b3daec9fe1d504f1d5a21b76403d8ae - desktop_multi_window: 566489c048b501134f9d7fb6a2354c60a9126486 - dynamic_color: 5fdff3953fb3457311091863f72914fc76ea3209 - file_picker: e716a70a9fe5fd9e09ebc922d7541464289443af - flutter_local_notifications: 4ccab5b7a22835214a6672e3f9c5e8ae207dab36 + audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd + audio_session: eaca2512cf2b39212d724f35d11f46180ad3a33e + connectivity_plus: 4adf20a405e25b42b9c9f87feff8f4b6fde18a4e + desktop_drop: 248706031734554504f939cab1ad4c5fbc9c9c72 + desktop_multi_window: 93667594ccc4b88d91a97972fd3b1b89667fa80a + dynamic_color: cb7c2a300ee67ed3bd96c3e852df3af0300bf610 + file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a + flutter_local_notifications: 4bf37a31afde695b56091b4ae3e4d9c7a7e6cda0 FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 - fvp: f4fdb89279e863eb09869bde7ba7fce9e81a16ab - just_audio: a42c63806f16995daf5b219ae1d679deb76e6a79 - local_auth_darwin: 63c73d6d28cc3e239be2b6aa460ea6e317cd5100 - macos_window_utils: 721df4da91cb4bde7b2b7b6ae93cdead4851118f + fvp: ecee65308dd86ae46e3c6d5d42cd2aad48095ef5 + just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed + local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb + macos_window_utils: 23f54331a0fd51eea9e0ed347253bf48fd379d1d mdk: baa616b93f696c7066df0e5ebe057badfa9c462b - media_kit_libs_macos_video: b3e2bbec2eef97c285f2b1baa7963c67c753fb82 - media_kit_video: c75b07f14d59706c775778e4dd47dd027de8d1e5 - package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b - path_provider_foundation: 0b743cbb62d8e47eab856f09262bb8c1ddcfe6ba - screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda - screen_retriever_macos: 776e0fa5d42c6163d2bf772d22478df4b302b161 - share_plus: 1fa619de8392a4398bfaf176d441853922614e89 - shared_preferences_foundation: 5086985c1d43c5ba4d5e69a4e8083a389e2909e6 - sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d + media_kit_libs_macos_video: 85a23e549b5f480e72cae3e5634b5514bc692f65 + media_kit_video: fa6564e3799a0a28bff39442334817088b7ca758 + package_info_plus: f0052d280d17aa382b932f399edf32507174e870 + path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880 + screen_brightness_macos: 2a3ee243f8051c340381e8e51bcedced8360f421 + screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f + share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc + shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b - sqlite3_flutter_libs: 86f82662868ee26ff3451f73cac9c5fc2a1f57fa - url_launcher_macos: 175a54c831f4375a6cf895875f716ee5af3888ce - video_player_avfoundation: 7993f492ae0bd77edaea24d9dc051d8bb2cd7c86 - volume_controller: 90a5978956cf18ebb7739bf5382fc1b0cfef66d0 - wakelock_plus: 9d63063ffb7af1c215209769067c57103bde719d - webview_flutter_wkwebview: 29eb20d43355b48fe7d07113835b9128f84e3af4 - window_manager: e25faf20d88283a0d46e7b1a759d07261ca27575 + sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1 + url_launcher_macos: f87a979182d112f911de6820aefddaf56ee9fbfd + video_player_avfoundation: dd410b52df6d2466a42d28550e33e4146928280a + volume_controller: 5c068e6d085c80dadd33fc2c918d2114b775b3dd + wakelock_plus: 917609be14d812ddd9e9528876538b2263aaa03b + webview_flutter_wkwebview: 8ebf4fded22593026f7dbff1fbff31ea98573c8d + window_manager: b729e31d38fb04905235df9ea896128991cad99e -PODFILE CHECKSUM: 32cd93bea4a742aadfebbcf392d60035c34780e6 +PODFILE CHECKSUM: 332e2379c9ab90bb11197e7b3b9074b709dfb554 -COCOAPODS: 1.16.2 +COCOAPODS: 1.17.0