Skip to content

Commit

Permalink
Add kind to the MediaStateTransitionException (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
evdokimovs committed Mar 18, 2022
1 parent 76a077c commit 7e40186
Show file tree
Hide file tree
Showing 11 changed files with 94 additions and 13 deletions.
Binary file modified flutter/android/src/main/jniLibs/arm64-v8a/libmedea_jason.so
Binary file not shown.
Binary file modified flutter/android/src/main/jniLibs/armeabi-v7a/libmedea_jason.so
Binary file not shown.
Binary file modified flutter/android/src/main/jniLibs/x86/libmedea_jason.so
Binary file not shown.
Binary file modified flutter/android/src/main/jniLibs/x86_64/libmedea_jason.so
Binary file not shown.
12 changes: 12 additions & 0 deletions flutter/lib/src/interface/exceptions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ enum RpcClientExceptionKind {
SessionFinished,
}

/// Kind of a [MediaStateTransitionException].
enum MediaStateTransitionExceptionKind {
/// Media state of a `Sender` transits to an opposite of the requested one.
OppositeState,

/// Requested state transition is not allowed by `Sender`'s settings.
ProhibitedState,
}

/// Exception thrown when cannot get info of available media devices.
abstract class EnumerateDevicesException {
/// Returns error that caused this [EnumerateDevicesException].
Expand Down Expand Up @@ -120,6 +129,9 @@ abstract class MediaStateTransitionException {
/// Returns stacktrace of this [MediaStateTransitionException].
String trace();

/// Returns concrete error kind of this [MediaStateTransitionException].
MediaStateTransitionExceptionKind kind();

@override
String toString() {
return message();
Expand Down
19 changes: 15 additions & 4 deletions flutter/lib/src/native/ffi/exception.dart
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,11 @@ Object _newRpcClientException(int kind, Pointer<Utf8> message,
/// Creates a new [NativeMediaStateTransitionException] with the provided error
/// [message] and [stacktrace].
Object _newMediaStateTransitionException(
Pointer<Utf8> message, Pointer<Utf8> stacktrace) {
return NativeMediaStateTransitionException(message.nativeStringToDartString(),
stacktrace.nativeStringToDartString());
Pointer<Utf8> message, Pointer<Utf8> stacktrace, int kind) {
return NativeMediaStateTransitionException(
message.nativeStringToDartString(),
stacktrace.nativeStringToDartString(),
MediaStateTransitionExceptionKind.values[kind]);
}

/// Creates a new [InternalException] with the provided error [message], error
Expand Down Expand Up @@ -254,8 +256,12 @@ class NativeMediaStateTransitionException extends MediaStateTransitionException
/// Native stacktrace.
late final String _nativeStackTrace;

/// Concrete error kind of this [NativeMediaStateTransitionException].
late final MediaStateTransitionExceptionKind _kind;

/// Instantiates a new [NativeMediaStateTransitionException].
NativeMediaStateTransitionException(this._message, this._nativeStackTrace);
NativeMediaStateTransitionException(
this._message, this._nativeStackTrace, this._kind);

@override
String message() {
Expand All @@ -266,6 +272,11 @@ class NativeMediaStateTransitionException extends MediaStateTransitionException
String trace() {
return _nativeStackTrace;
}

@override
MediaStateTransitionExceptionKind kind() {
return _kind;
}
}

/// Jason's internal exception.
Expand Down
2 changes: 1 addition & 1 deletion flutter/lib/src/native/ffi/exception.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ void registerFunction(
Int64, Pointer<Utf8>, ForeignValue, Pointer<Utf8>)>>
newRpcClientException,
required Pointer<
NativeFunction<Handle Function(Pointer<Utf8>, Pointer<Utf8>)>>
NativeFunction<Handle Function(Pointer<Utf8>, Pointer<Utf8>, Int64)>>
newMediaStateTransitionException,
required Pointer<
NativeFunction<
Expand Down
8 changes: 8 additions & 0 deletions flutter/lib/src/web/exceptions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,12 @@ class WebMediaSettingsUpdateException extends MediaSettingsUpdateException {
class WebMediaStateTransitionException extends MediaStateTransitionException {
late String _message;
late String _trace;
late MediaStateTransitionExceptionKind _kind;

WebMediaStateTransitionException(wasm.MediaStateTransitionException e) {
_message = e.message();
_trace = e.trace();
_kind = MediaStateTransitionExceptionKind.values[e.kind().toInt()];
e.free();
}

Expand All @@ -224,6 +226,12 @@ class WebMediaStateTransitionException extends MediaStateTransitionException {
String trace() {
return _trace;
}

/// Returns concrete error kind of this [MediaStateTransitionException].
@override
MediaStateTransitionExceptionKind kind() {
return _kind;
}
}

/// Exceptions thrown from an RPC client that implements messaging with a media
Expand Down
1 change: 1 addition & 0 deletions flutter/lib/src/web/jason_wasm.dart
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ class MediaStateTransitionException {
external void free();
external String message();
external String trace();
external num kind();
}

@JS()
Expand Down
2 changes: 2 additions & 0 deletions src/api/dart/utils/err.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ mod exception {
pub fn new_media_state_transition_exception(
message: ptr::NonNull<c_char>,
stacktrace: ptr::NonNull<c_char>,
kind: i64,
) -> Dart_Handle;

/// Returns a new Dart [`InternalException`] with the provided error
Expand Down Expand Up @@ -263,6 +264,7 @@ impl From<MediaStateTransitionException> for DartError {
Self::new(exception::new_media_state_transition_exception(
string_into_c_str(err.message()),
string_into_c_str(err.trace()),
err.kind() as i64,
))
}
}
Expand Down
63 changes: 55 additions & 8 deletions src/api/err.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,22 @@ impl FormatException {
}
}

/// Kind of a [`MediaStateTransitionException`].
#[cfg_attr(not(target_os = "android"), wasm_bindgen)]
#[derive(Clone, Copy, Debug)]
pub enum MediaStateTransitionExceptionKind {
/// Media state of a [`Sender`] transits to an opposite of the requested
/// one.
///
/// [`Sender`]: crate::peer::media::Sender
OppositeState,

/// Requested state transition is not allowed by [`Sender`]'s settings.
///
/// [`Sender`]: crate::peer::media::Sender
ProhibitedState,
}

/// Exception thrown when the requested media state transition could not be
/// performed.
#[cfg_attr(not(target_os = "android"), wasm_bindgen)]
Expand All @@ -394,6 +410,9 @@ pub struct MediaStateTransitionException {
/// Error message describing the problem.
message: Cow<'static, str>,

/// Concrete error kind of this [`MediaStateTransitionException`].
kind: MediaStateTransitionExceptionKind,

/// Stacktrace of this [`MediaStateTransitionException`].
trace: Trace,
}
Expand All @@ -402,10 +421,15 @@ impl MediaStateTransitionException {
/// Creates a new [`MediaStateTransitionException`] from the provided error
/// `message` and `trace`.
#[must_use]
pub fn new<T: Into<Cow<'static, str>>>(message: T, trace: Trace) -> Self {
pub fn new<T: Into<Cow<'static, str>>>(
message: T,
trace: Trace,
kind: MediaStateTransitionExceptionKind,
) -> Self {
Self {
message: message.into(),
trace,
kind,
}
}
}
Expand All @@ -424,6 +448,12 @@ impl MediaStateTransitionException {
pub fn trace(&self) -> String {
self.trace.to_string()
}

/// Returns concrete error kind of this [`MediaStateTransitionException`].
#[must_use]
pub fn kind(&self) -> MediaStateTransitionExceptionKind {
self.kind
}
}

/// Errors occurring in [`RoomHandle::set_local_media_settings()`][1] method.
Expand Down Expand Up @@ -637,12 +667,24 @@ impl From<Traced<ChangeMediaStateError>> for Error {
ChangeMediaStateError::CouldNotGetLocalMedia(err) => {
Traced::compose(err, trace).into()
}
ChangeMediaStateError::ProhibitedState(_)
| ChangeMediaStateError::TransitionIntoOppositeState(_)
| ChangeMediaStateError::InvalidLocalTracks(_) => {
MediaStateTransitionException::new(message, trace).into()
ChangeMediaStateError::ProhibitedState(_) => {
MediaStateTransitionException::new(
message,
trace,
MediaStateTransitionExceptionKind::ProhibitedState,
)
.into()
}
ChangeMediaStateError::TransitionIntoOppositeState(_) => {
MediaStateTransitionException::new(
message,
trace,
MediaStateTransitionExceptionKind::OppositeState,
)
.into()
}
ChangeMediaStateError::InsertLocalTracksError(_) => {
ChangeMediaStateError::InvalidLocalTracks(_)
| ChangeMediaStateError::InsertLocalTracksError(_) => {
InternalException::new(message, None, trace).into()
}
}
Expand Down Expand Up @@ -682,7 +724,7 @@ impl From<Traced<LocalMediaError>> for Error {
UE::InvalidLocalTracks(_)
| UE::InsertLocalTracksError(
IE::InvalidMediaTrack | IE::NotEnoughTracks,
) => MediaStateTransitionException::new(message, trace).into(),
) => InternalException::new(message, None, trace).into(),
UE::InsertLocalTracksError(IE::CouldNotInsertLocalTrack(_)) => {
InternalException::new(message, None, trace).into()
}
Expand All @@ -691,7 +733,12 @@ impl From<Traced<LocalMediaError>> for Error {
InternalException::new(message, None, trace).into()
}
ME::SenderCreateError(CreateError::CannotDisableRequiredSender) => {
MediaStateTransitionException::new(message, trace).into()
MediaStateTransitionException::new(
message,
trace,
MediaStateTransitionExceptionKind::ProhibitedState,
)
.into()
}
}
}
Expand Down

0 comments on commit 7e40186

Please sign in to comment.