mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-08 23:18:16 -07:00
fix: Windows media controls (#297)
Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
parent
d47f1e19da
commit
72dde479c8
5 changed files with 40 additions and 9 deletions
|
|
@ -14,6 +14,7 @@ import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:path/path.dart' as path;
|
import 'package:path/path.dart' as path;
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:smtc_windows/smtc_windows.dart' if (dart.library.html) 'package:fladder/stubs/web/smtc_web.dart';
|
||||||
import 'package:universal_html/html.dart' as html;
|
import 'package:universal_html/html.dart' as html;
|
||||||
import 'package:window_manager/window_manager.dart';
|
import 'package:window_manager/window_manager.dart';
|
||||||
|
|
||||||
|
|
@ -33,6 +34,7 @@ import 'package:fladder/theme.dart';
|
||||||
import 'package:fladder/util/adaptive_layout.dart';
|
import 'package:fladder/util/adaptive_layout.dart';
|
||||||
import 'package:fladder/util/application_info.dart';
|
import 'package:fladder/util/application_info.dart';
|
||||||
import 'package:fladder/util/fladder_config.dart';
|
import 'package:fladder/util/fladder_config.dart';
|
||||||
|
import 'package:fladder/util/localization_helper.dart';
|
||||||
import 'package:fladder/util/string_extensions.dart';
|
import 'package:fladder/util/string_extensions.dart';
|
||||||
import 'package:fladder/util/themes_data.dart';
|
import 'package:fladder/util/themes_data.dart';
|
||||||
|
|
||||||
|
|
@ -54,6 +56,10 @@ void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
final crashProvider = CrashLogNotifier();
|
final crashProvider = CrashLogNotifier();
|
||||||
|
|
||||||
|
if (defaultTargetPlatform == TargetPlatform.windows) {
|
||||||
|
await SMTCWindows.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
if (kIsWeb) {
|
if (kIsWeb) {
|
||||||
html.document.onContextMenu.listen((event) => event.preventDefault());
|
html.document.onContextMenu.listen((event) => event.preventDefault());
|
||||||
final result = await loadConfig();
|
final result = await loadConfig();
|
||||||
|
|
@ -288,7 +294,7 @@ class _MainState extends ConsumerState<Main> with WindowListener, WidgetsBinding
|
||||||
(element) => element.languageCode == language.languageCode,
|
(element) => element.languageCode == language.languageCode,
|
||||||
orElse: () => const Locale('en', "GB"),
|
orElse: () => const Locale('en', "GB"),
|
||||||
),
|
),
|
||||||
child: ScaffoldMessenger(child: child ?? Container()),
|
child: LocalizationContextWrapper(child: ScaffoldMessenger(child: child ?? Container())),
|
||||||
),
|
),
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
darkTheme: darkTheme.copyWith(
|
darkTheme: darkTheme.copyWith(
|
||||||
|
|
@ -302,7 +308,6 @@ class _MainState extends ConsumerState<Main> with WindowListener, WidgetsBinding
|
||||||
),
|
),
|
||||||
themeMode: themeMode,
|
themeMode: themeMode,
|
||||||
routerConfig: autoRouter.config(),
|
routerConfig: autoRouter.config(),
|
||||||
// routerConfig: AdaptiveLayout.routerOf(context).config(),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|
@ -310,6 +315,4 @@ class _MainState extends ConsumerState<Main> with WindowListener, WidgetsBinding
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final currentTitleProvider = StateProvider<String>((ref) {
|
final currentTitleProvider = StateProvider<String>((ref) => "Fladder");
|
||||||
return "Fladder";
|
|
||||||
});
|
|
||||||
|
|
|
||||||
|
|
@ -156,10 +156,7 @@ class SeasonPoster extends ConsumerWidget {
|
||||||
alignment: Alignment.bottomRight,
|
alignment: Alignment.bottomRight,
|
||||||
child: PopupMenuButton(
|
child: PopupMenuButton(
|
||||||
tooltip: context.localized.options,
|
tooltip: context.localized.options,
|
||||||
icon: Icon(
|
icon: const Icon(Icons.more_vert, color: Colors.white),
|
||||||
Icons.more_vert,
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
itemBuilder: (context) => season.generateActions(context, ref).popupMenuItems(useIcons: true),
|
itemBuilder: (context) => season.generateActions(context, ref).popupMenuItems(useIcons: true),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ class SMTCWindows {
|
||||||
bool? enabled,
|
bool? enabled,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
static Future<void> initialize() async {}
|
||||||
|
|
||||||
late final Stream<PressedButton> buttonPressStream;
|
late final Stream<PressedButton> buttonPressStream;
|
||||||
|
|
||||||
Future<void> updateConfig(SMTCConfig config) async {}
|
Future<void> updateConfig(SMTCConfig config) async {}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,32 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
|
||||||
|
///Only use for base translations, under normal circumstances ALWAYS use the widgets provided context
|
||||||
|
final localizationContextProvider = StateProvider<BuildContext?>((ref) => null);
|
||||||
|
|
||||||
extension BuildContextExtension on BuildContext {
|
extension BuildContextExtension on BuildContext {
|
||||||
AppLocalizations get localized => AppLocalizations.of(this);
|
AppLocalizations get localized => AppLocalizations.of(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LocalizationContextWrapper extends ConsumerStatefulWidget {
|
||||||
|
final Widget child;
|
||||||
|
const LocalizationContextWrapper({required this.child, super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
ConsumerState<LocalizationContextWrapper> createState() => _LocalizationContextWrapperState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LocalizationContextWrapperState extends ConsumerState<LocalizationContextWrapper> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((event) {
|
||||||
|
ref.read(localizationContextProvider.notifier).update((cb) => context);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => widget.child;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import 'package:fladder/models/settings/video_player_settings.dart';
|
||||||
import 'package:fladder/providers/settings/client_settings_provider.dart';
|
import 'package:fladder/providers/settings/client_settings_provider.dart';
|
||||||
import 'package:fladder/providers/settings/video_player_settings_provider.dart';
|
import 'package:fladder/providers/settings/video_player_settings_provider.dart';
|
||||||
import 'package:fladder/providers/video_player_provider.dart';
|
import 'package:fladder/providers/video_player_provider.dart';
|
||||||
|
import 'package:fladder/util/localization_helper.dart';
|
||||||
import 'package:fladder/wrappers/players/base_player.dart';
|
import 'package:fladder/wrappers/players/base_player.dart';
|
||||||
import 'package:fladder/wrappers/players/lib_mdk.dart'
|
import 'package:fladder/wrappers/players/lib_mdk.dart'
|
||||||
if (dart.library.html) 'package:fladder/stubs/web/lib_mdk_web.dart';
|
if (dart.library.html) 'package:fladder/stubs/web/lib_mdk_web.dart';
|
||||||
|
|
@ -211,10 +212,12 @@ class MediaControlsWrapper extends BaseAudioHandler {
|
||||||
|
|
||||||
Future<void> windowSMTCSetup(ItemBaseModel playBackItem, Duration currentPosition) async {
|
Future<void> windowSMTCSetup(ItemBaseModel playBackItem, Duration currentPosition) async {
|
||||||
final poster = playBackItem.images?.firstOrNull;
|
final poster = playBackItem.images?.firstOrNull;
|
||||||
|
final mainContext = ref.read(localizationContextProvider);
|
||||||
|
|
||||||
//Windows setup
|
//Windows setup
|
||||||
smtc?.updateMetadata(MusicMetadata(
|
smtc?.updateMetadata(MusicMetadata(
|
||||||
title: playBackItem.title,
|
title: playBackItem.title,
|
||||||
|
artist: mainContext != null ? playBackItem.label(mainContext) : null,
|
||||||
thumbnail: poster?.path,
|
thumbnail: poster?.path,
|
||||||
));
|
));
|
||||||
smtc?.updateTimeline(
|
smtc?.updateTimeline(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue