Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add kind to the MediaStateTransitionException #31

Merged
merged 7 commits into from
Mar 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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