Skip to content

Commit

Permalink
fix(desktop): Initializing players at startup no longer block
Browse files Browse the repository at this point in the history
  • Loading branch information
bdlukaa committed Feb 6, 2024
1 parent 0eda07d commit 8bdee7a
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 33 deletions.
8 changes: 4 additions & 4 deletions lib/api/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ class API {
debugPrint(body);
server.online = false;
}
} catch (exception, stacktrace) {
debugPrint('Failed to checkServerCredentials on server $server');
debugPrint(exception.toString());
debugPrint(stacktrace.toString());
} catch (exception, stack) {
debugPrint(
'Failed to checkServerCredentials on server $server : $exception\n$stack',
);

server.online = false;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ Future<void> main(List<String> args) async {
UpdateManager.ensureInitialized(),
]);

/// Firebase messaging isn't available on windows nor linux
/// Firebase messaging isn't available on Windows nor Linux
if (kIsWeb || isMobilePlatform || Platform.isMacOS) {
FirebaseConfiguration.ensureInitialized();
}
Expand Down
29 changes: 16 additions & 13 deletions lib/providers/desktop_view_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import 'package:bluecherry_client/utils/constants.dart';
import 'package:bluecherry_client/utils/storage.dart';
import 'package:bluecherry_client/utils/video_player.dart';
import 'package:flutter/foundation.dart';
import 'package:unity_video_player/unity_video_player.dart';

class DesktopViewProvider extends UnityProvider {
DesktopViewProvider._();
Expand Down Expand Up @@ -59,19 +60,21 @@ class DesktopViewProvider extends UnityProvider {
@override
Future<void> initialize() async {
await initializeStorage(desktopView, kHiveDesktopLayouts);
for (final device in currentLayout.devices) {
final completer = Completer();
UnityPlayers.players[device.uuid] ??= UnityPlayers.forDevice(
device,
() async {
if (Platform.isLinux) {
await Future.delayed(const Duration(milliseconds: 250));
}
completer.complete();
},
);
await completer.future;
}
await Future.wait(
currentLayout.devices.map<Future>((device) {
final completer = Completer<UnityVideoPlayer>();
UnityPlayers.players[device.uuid] ??= UnityPlayers.forDevice(
device,
() async {
if (Platform.isLinux) {
await Future.delayed(const Duration(milliseconds: 250));
}
completer.complete(UnityPlayers.players[device.uuid]);
},
);
return completer.future;
}),
);
}

/// Saves current layout/order of [Device]s to cache using `package:hive`.
Expand Down
24 changes: 11 additions & 13 deletions lib/providers/server_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -159,20 +159,18 @@ class ServersProvider extends UnityProvider {
notifyListeners();
}

await API.instance.checkServerCredentials(server).then((server) {
return API.instance.getDevices(server).then((devices) {
if (devices != null) {
server.devices
..clear()
..addAll(devices);
}
server = await API.instance.checkServerCredentials(server);
final devices = await API.instance.getDevices(server);
if (devices != null) {
server.devices
..clear()
..addAll(devices);
}

if (loadingServer.contains(server.id)) {
loadingServer.remove(server.id);
notifyListeners();
}
});
});
if (loadingServer.contains(server.id)) {
loadingServer.remove(server.id);
notifyListeners();
}
}));
await save();

Expand Down
4 changes: 2 additions & 2 deletions lib/utils/video_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class UnityPlayers with ChangeNotifier {

Future<void> setSource() async {
if (device.url != null) {
debugPrint(device.url);
debugPrint('Initializing ${device.url}');
await controller.setDataSource(device.url!);
} else {
final (String source, Future<String> fallback) = switch (
Expand All @@ -92,7 +92,7 @@ class UnityPlayers with ChangeNotifier {
),
StreamingType.mjpeg => (device.mjpegURL, Future.value(device.hlsURL)),
};
debugPrint(source);
debugPrint('Initializing $source');
controller.fallbackUrl = fallback;
await controller.setDataSource(source);

Expand Down

0 comments on commit 8bdee7a

Please sign in to comment.