Skip to content

Commit e29c4a4

Browse files
remove js_util
1 parent 83bd28a commit e29c4a4

11 files changed

+133
-126
lines changed

lib/src/factory_impl.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import 'dart:async';
22
import 'dart:convert';
33

4-
import 'package:js/js.dart';
5-
import 'package:js/js_util.dart';
4+
import 'dart:js_interop';
65
import 'package:web/web.dart' as web;
76
import 'package:webrtc_interface/webrtc_interface.dart';
87

@@ -13,16 +12,18 @@ import 'navigator_impl.dart';
1312
import 'rtc_peerconnection_impl.dart';
1413
import 'rtc_rtp_capailities_imp.dart';
1514

15+
import 'package:web/web.dart' as web;
16+
1617
@JS('RTCRtpSender')
17-
@anonymous
18+
@staticInterop
1819
class RTCRtpSenderJs {
19-
external static Object getCapabilities(String kind);
20+
external static web.RTCRtpCapabilities getCapabilities(String kind);
2021
}
2122

2223
@JS('RTCRtpReceiver')
23-
@anonymous
24+
@staticInterop
2425
class RTCRtpReceiverJs {
25-
external static Object getCapabilities(String kind);
26+
external static web.RTCRtpCapabilities getCapabilities(String kind);
2627
}
2728

2829
class RTCFactoryWeb extends RTCFactory {
@@ -42,7 +43,7 @@ class RTCFactoryWeb extends RTCFactory {
4243
],
4344
};
4445
final jsRtcPc = web.RTCPeerConnection(
45-
jsify({...constr, ...configuration}) as web.RTCConfiguration);
46+
{...constr, ...configuration}.jsify() as web.RTCConfiguration);
4647
final _peerConnectionId = base64Encode(jsRtcPc.toString().codeUnits);
4748
return RTCPeerConnectionWeb(_peerConnectionId, jsRtcPc);
4849
}

lib/src/frame_cryptor_impl.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'dart:js_interop_unsafe';
55
import 'dart:typed_data';
66

77
import 'package:collection/collection.dart';
8-
import 'package:js/js_util.dart';
98
import 'package:web/web.dart' as web;
109
import 'package:webrtc_interface/webrtc_interface.dart';
1110

@@ -377,7 +376,7 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
377376
worker.addEventListener(
378377
'message',
379378
(web.MessageEvent msg) {
380-
final data = dartify(msg.data) as Map;
379+
final data = msg.data.dartify() as Map;
381380
//print('master got $data');
382381
var type = data['type'];
383382
var msgId = data['msgId'];

lib/src/media_recorder_impl.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:async';
2-
import 'dart:js' as js;
32
import 'dart:js_interop';
3+
import 'dart:js_interop_unsafe';
44

55
import 'package:web/web.dart' as web;
66
import 'package:webrtc_interface/webrtc_interface.dart';
@@ -38,7 +38,7 @@ class MediaRecorderWeb extends MediaRecorder {
3838
_recorder.addEventListener(
3939
'dataavailable',
4040
(web.Event event) {
41-
final web.Blob blob = js.JsObject.fromBrowserObject(event)['data'];
41+
final web.Blob blob = event.getProperty('data'.toJS) as web.Blob;
4242
if (blob.size > 0) {
4343
_chunks.add(blob);
4444
}
@@ -58,7 +58,7 @@ class MediaRecorderWeb extends MediaRecorder {
5858
'dataavailable',
5959
(web.Event event) {
6060
onDataChunk(
61-
js.JsObject.fromBrowserObject(event)['data'],
61+
event.getProperty('data'.toJS),
6262
_recorder.state == 'inactive',
6363
);
6464
}.toJS);

lib/src/media_stream_track_impl.dart

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'dart:async';
22
import 'dart:js_interop';
3-
import 'dart:js_util' as js;
43
import 'dart:typed_data';
54

65
import 'package:web/web.dart' as web;
@@ -48,12 +47,9 @@ class MediaStreamTrackWeb extends MediaStreamTrack {
4847
Future<void> applyConstraints([Map<String, dynamic>? constraints]) async {
4948
// TODO(wermathurin): Wait for: https://github.com/dart-lang/sdk/commit/1a861435579a37c297f3be0cf69735d5b492bc6c
5049
// to be merged to use jsTrack.applyConstraints() directly
51-
final arg = js.jsify(constraints ?? {});
50+
final arg = (constraints ?? {}).jsify();
5251

53-
final _val = await js.promiseToFuture<void>(
54-
js.callMethod(jsTrack, 'applyConstraints', [arg]),
55-
);
56-
return _val;
52+
await jsTrack.applyConstraints(arg as web.MediaTrackConstraints).toDart;
5753
}
5854

5955
// TODO(wermathurin): https://github.com/dart-lang/sdk/issues/44319
@@ -100,7 +96,7 @@ class MediaStreamTrackWeb extends MediaStreamTrack {
10096
canvas.height = bitmap.height;
10197
final renderer =
10298
canvas.getContext('bitmaprenderer') as web.ImageBitmapRenderingContext;
103-
js.callMethod(renderer, 'transferFromImageBitmap', [bitmap]);
99+
renderer.transferFromImageBitmap(bitmap);
104100

105101
final blobCompleter = Completer<web.Blob>();
106102
canvas.toBlob((web.Blob blob) {

lib/src/mediadevices_impl.dart

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'dart:async';
2-
import 'dart:js' as js;
32
import 'dart:js_interop';
4-
import 'dart:js_util' as jsutil;
3+
import 'dart:js_interop_unsafe';
54

5+
import 'package:dart_webrtc/src/frame_cryptor_impl.dart';
66
import 'package:web/web.dart' as web;
77
import 'package:webrtc_interface/webrtc_interface.dart';
88

@@ -52,10 +52,11 @@ class MediaDevicesWeb extends MediaDevices {
5252

5353
final mediaDevices = web.window.navigator.mediaDevices;
5454

55-
if (jsutil.hasProperty(mediaDevices, 'getUserMedia')) {
56-
var args = jsutil.jsify(mediaConstraints);
57-
final jsStream = await jsutil.promiseToFuture<web.MediaStream>(
58-
jsutil.callMethod(mediaDevices, 'getUserMedia', [args]));
55+
if (mediaDevices.getProperty('getUserMedia'.toJS).isDefinedAndNotNull) {
56+
var args = mediaConstraints.jsify();
57+
final jsStream = await mediaDevices
58+
.getUserMedia(args as web.MediaStreamConstraints)
59+
.toDart;
5960

6061
return MediaStreamWeb(jsStream, 'local');
6162
} else {
@@ -78,15 +79,18 @@ class MediaDevicesWeb extends MediaDevices {
7879
try {
7980
final mediaDevices = web.window.navigator.mediaDevices;
8081

81-
if (jsutil.hasProperty(mediaDevices, 'getDisplayMedia')) {
82-
final arg = jsutil.jsify(mediaConstraints);
83-
final jsStream = await jsutil.promiseToFuture<web.MediaStream>(
84-
jsutil.callMethod(mediaDevices, 'getDisplayMedia', [arg]));
82+
if (mediaDevices
83+
.getProperty('getDisplayMedia'.toJS)
84+
.isDefinedAndNotNull) {
85+
final arg = mediaConstraints.jsify();
86+
final jsStream = await mediaDevices
87+
.getDisplayMedia(arg as web.DisplayMediaStreamOptions)
88+
.toDart;
8589
return MediaStreamWeb(jsStream, 'local');
8690
} else {
8791
final jsStream = await web.window.navigator.mediaDevices
8892
.getUserMedia(web.MediaStreamConstraints(
89-
video: jsutil.jsify({'mediaSource': 'screen'}),
93+
video: {'mediaSource': 'screen'}.jsify()!,
9094
audio: mediaConstraints['audio'] ?? false))
9195
.toDart;
9296
return MediaStreamWeb(jsStream, 'local');
@@ -165,20 +169,26 @@ class MediaDevicesWeb extends MediaDevices {
165169
try {
166170
final mediaDevices = web.window.navigator.mediaDevices;
167171

168-
if (jsutil.hasProperty(mediaDevices, 'selectAudioOutput')) {
172+
if (mediaDevices
173+
.getProperty('selectAudioOutput'.toJS)
174+
.isDefinedAndNotNull) {
169175
if (options != null) {
170-
final arg = jsutil.jsify(options);
171-
final deviceInfo = await jsutil.promiseToFuture<web.MediaDeviceInfo>(
172-
jsutil.callMethod(mediaDevices, 'selectAudioOutput', [arg]));
176+
final arg = options.jsify();
177+
final deviceInfo =
178+
await (mediaDevices.callMethod('selectAudioOutput'.toJS, arg)
179+
as JSPromise<web.MediaDeviceInfo>)
180+
.toDart;
173181
return MediaDeviceInfo(
174182
kind: deviceInfo.kind,
175183
label: deviceInfo.label,
176184
deviceId: deviceInfo.deviceId,
177185
groupId: deviceInfo.groupId,
178186
);
179187
} else {
180-
final deviceInfo = await jsutil.promiseToFuture<web.MediaDeviceInfo>(
181-
jsutil.callMethod(mediaDevices, 'selectAudioOutput', []));
188+
final deviceInfo =
189+
await (mediaDevices.callMethod('selectAudioOutput'.toJS)
190+
as JSPromise<web.MediaDeviceInfo>)
191+
.toDart;
182192
return MediaDeviceInfo(
183193
kind: deviceInfo.kind,
184194
label: deviceInfo.label,
@@ -199,8 +209,9 @@ class MediaDevicesWeb extends MediaDevices {
199209
try {
200210
final mediaDevices = web.window.navigator.mediaDevices;
201211

202-
jsutil.setProperty(mediaDevices, 'ondevicechange',
203-
js.allowInterop((evt) => listener?.call(evt)));
212+
mediaDevices.ondevicechange = ((JSObject evt) {
213+
listener?.call(evt);
214+
}).toJS;
204215
} catch (e) {
205216
throw 'Unable to set ondevicechange: ${e.toString()}';
206217
}
@@ -211,7 +222,11 @@ class MediaDevicesWeb extends MediaDevices {
211222
try {
212223
final mediaDevices = web.window.navigator.mediaDevices;
213224

214-
jsutil.getProperty(mediaDevices, 'ondevicechange');
225+
final fn = mediaDevices.ondevicechange;
226+
if (fn.isUndefinedOrNull) {
227+
return null;
228+
}
229+
return (dynamic event) => fn!.callAsFunction(event);
215230
} catch (e) {
216231
throw 'Unable to get ondevicechange: ${e.toString()}';
217232
}

lib/src/rtc_data_channel_impl.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:async';
22
import 'dart:js_interop';
33

4-
import 'package:js/js_util.dart' as jsutil;
54
import 'package:web/web.dart' as web;
65
import 'package:webrtc_interface/webrtc_interface.dart';
76

@@ -74,8 +73,7 @@ class RTCDataChannelWeb extends RTCDataChannel {
7473
if (data is JSArrayBuffer) {
7574
arrayBuffer = data.toDart;
7675
} else if (data is web.Blob) {
77-
arrayBuffer = await jsutil
78-
.promiseToFuture(jsutil.callMethod(data, 'arrayBuffer', []));
76+
arrayBuffer = await data.arrayBuffer().toDart;
7977
} else {
8078
arrayBuffer = data.toDart;
8179
}

lib/src/rtc_peerconnection_impl.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,8 @@ class RTCPeerConnectionWeb extends RTCPeerConnection {
467467
assert(trackOrKind != null, 'track or kind must not be null');
468468

469469
final transceiver = init != null
470-
? _jsPc.addTransceiver(trackOrKind.jsify()!, init.toJsObject())
470+
? _jsPc.addTransceiver(trackOrKind.jsify()!,
471+
init.toJsObject() as web.RTCRtpTransceiverInit)
471472
: _jsPc.addTransceiver(trackOrKind.jsify()!);
472473

473474
return RTCRtpTransceiverWeb.fromJsObject(
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import 'dart:js_util' as jsutil;
1+
import 'dart:js_interop';
2+
import 'dart:js_interop_unsafe';
23

4+
import 'package:dart_webrtc/src/rtc_data_channel_impl.dart';
35
import 'package:webrtc_interface/webrtc_interface.dart';
6+
import 'package:web/web.dart' as web;
47

58
class RTCRtpCapabilitiesWeb {
6-
static RTCRtpCapabilities fromJsObject(Object object) {
9+
static RTCRtpCapabilities fromJsObject(web.RTCRtpCapabilities object) {
710
return RTCRtpCapabilities.fromMap({
8-
'codecs': jsutil.dartify(jsutil.getProperty(object, 'codecs')),
11+
'codecs': object.codecs.toDart.map((e) => e.dartify()),
912
'headerExtensions':
10-
jsutil.dartify(jsutil.getProperty(object, 'headerExtensions')),
11-
'fecMechanisms':
12-
jsutil.dartify(jsutil.getProperty(object, 'fecMechanisms')) ?? []
13+
object.headerExtensions.toDart.map((e) => e.dartify()),
14+
'fecMechanisms': object.getProperty('fecMechanisms'.toJS).dartify()
1315
});
1416
}
1517
}

0 commit comments

Comments
 (0)