From b24fad0f3b6ae610ced1b44108d7fa32ca759dd9 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Wed, 15 Dec 2021 18:44:01 +0700 Subject: [PATCH] better platform check --- lib/src/support/platform.dart | 15 +++++++++++ lib/src/support/platform/io.dart | 11 ++++++++ lib/src/support/platform/web.dart | 3 +++ lib/src/support/websocket.dart | 2 +- .../support/{platforms => websocket}/io.dart | 0 .../support/{platforms => websocket}/web.dart | 0 lib/src/track/audio_management.dart | 8 ++---- lib/src/track/local.dart | 25 +++++++++++++------ 8 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 lib/src/support/platform.dart create mode 100644 lib/src/support/platform/io.dart create mode 100644 lib/src/support/platform/web.dart rename lib/src/support/{platforms => websocket}/io.dart (100%) rename lib/src/support/{platforms => websocket}/web.dart (100%) diff --git a/lib/src/support/platform.dart b/lib/src/support/platform.dart new file mode 100644 index 0000000..de68a8d --- /dev/null +++ b/lib/src/support/platform.dart @@ -0,0 +1,15 @@ +import 'platform/io.dart' if (dart.library.html) 'platform/web.dart'; + +// Returns the current platform which works for both web and devices. +PlatformType lkPlatform() => lkPlatformImplementation(); +bool lkPlatformIs(PlatformType type) => lkPlatform() == type; + +enum PlatformType { + web, + windows, + linux, + macOS, + android, + fuchsia, + iOS, +} diff --git a/lib/src/support/platform/io.dart b/lib/src/support/platform/io.dart new file mode 100644 index 0000000..59ef81d --- /dev/null +++ b/lib/src/support/platform/io.dart @@ -0,0 +1,11 @@ +import '../platform.dart'; +import 'dart:io'; + +PlatformType lkPlatformImplementation() { + if (Platform.isWindows) return PlatformType.windows; + if (Platform.isFuchsia) return PlatformType.fuchsia; + if (Platform.isMacOS) return PlatformType.macOS; + if (Platform.isLinux) return PlatformType.linux; + if (Platform.isIOS) return PlatformType.iOS; + return PlatformType.android; +} diff --git a/lib/src/support/platform/web.dart b/lib/src/support/platform/web.dart new file mode 100644 index 0000000..ff54692 --- /dev/null +++ b/lib/src/support/platform/web.dart @@ -0,0 +1,3 @@ +import '../platform.dart'; + +PlatformType lkPlatformImplementation() => PlatformType.web; diff --git a/lib/src/support/websocket.dart b/lib/src/support/websocket.dart index 8021abf..525d974 100644 --- a/lib/src/support/websocket.dart +++ b/lib/src/support/websocket.dart @@ -1,4 +1,4 @@ -import 'platforms/io.dart' if (dart.library.html) 'platforms/web.dart'; +import 'websocket/io.dart' if (dart.library.html) 'websocket/web.dart'; class WebSocketException implements Exception { final int code; diff --git a/lib/src/support/platforms/io.dart b/lib/src/support/websocket/io.dart similarity index 100% rename from lib/src/support/platforms/io.dart rename to lib/src/support/websocket/io.dart diff --git a/lib/src/support/platforms/web.dart b/lib/src/support/websocket/web.dart similarity index 100% rename from lib/src/support/platforms/web.dart rename to lib/src/support/websocket/web.dart diff --git a/lib/src/track/audio_management.dart b/lib/src/track/audio_management.dart index 4f5e91e..a442aea 100644 --- a/lib/src/track/audio_management.dart +++ b/lib/src/track/audio_management.dart @@ -1,8 +1,4 @@ -// import 'package:audio_session/audio_session.dart' as _as; - -import 'dart:io'; - -import 'package:flutter/foundation.dart'; +import '../support/platform.dart'; import 'package:synchronized/synchronized.dart' as sync; @@ -78,7 +74,7 @@ mixin AudioManagementMixin on AudioTrack { logger.fine('[$runtimeType] didUpdateSate: $audioTrackState'); NativeAudioConfiguration? config; - if (!kIsWeb && Platform.isIOS) { + if (!lkPlatformIs(PlatformType.iOS)) { // Only iOS for now... config = await nativeAudioConfigurationForAudioTrackState .call(audioTrackState); diff --git a/lib/src/track/local.dart b/lib/src/track/local.dart index 1a67acf..9f47403 100644 --- a/lib/src/track/local.dart +++ b/lib/src/track/local.dart @@ -1,6 +1,5 @@ -import 'dart:io' show Platform; - import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc; +import '../support/platform.dart'; import 'package:meta/meta.dart'; import '../exceptions.dart'; @@ -48,7 +47,7 @@ abstract class LocalTrack extends Track { logger.fine('LocalTrack.mute() muted: $muted'); if (muted) return false; // already muted await disable(); - if (!Platform.isWindows) { + if (!lkPlatformIs(PlatformType.windows)) { await stop(); } updateMuted(true, shouldSendSignal: true); @@ -61,7 +60,7 @@ abstract class LocalTrack extends Track { Future unmute() async { logger.fine('LocalTrack.unmute() muted: $muted'); if (!muted) return false; // already un-muted - if (!Platform.isWindows) { + if (!lkPlatformIs(PlatformType.windows)) { await restartTrack(); } await enable(); @@ -74,8 +73,16 @@ abstract class LocalTrack extends Track { final didStop = await super.stop(); if (didStop) { logger.fine('Stopping mediaStreamTrack...'); - await mediaStreamTrack.stop(); - await mediaStream.dispose(); + try { + await mediaStreamTrack.stop(); + } catch (error) { + logger.severe('MediaStreamTrack.stop() did throw $error'); + } + try { + await mediaStream.dispose(); + } catch (error) { + logger.severe('MediaStreamTrack.dispose() did throw $error'); + } } return didStop; } @@ -131,7 +138,11 @@ abstract class LocalTrack extends Track { final newTrack = newStream.getTracks().first; // replace track on sender - await sender?.replaceTrack(newTrack); + try { + await sender?.replaceTrack(newTrack); + } catch (error) { + logger.severe('RTCRtpSender.replaceTrack() did throw $error'); + } // set new stream & track to this object updateMediaStreamAndTrack(newStream, newTrack);