refactor: clean up and add docs

This commit is contained in:
Salvatore Giordano
2022-08-25 17:36:27 +02:00
parent 570e6e05cf
commit a5d0c74fd6
15 changed files with 193 additions and 212 deletions
@@ -17,10 +17,8 @@ import 'package:stream_chat/src/core/http/stream_http_client.dart';
import 'package:stream_chat/src/core/http/token.dart';
import 'package:stream_chat/src/core/http/token_manager.dart';
import 'package:stream_chat/src/core/models/attachment_file.dart';
import 'package:stream_chat/src/core/models/call_token_payload.dart';
import 'package:stream_chat/src/core/models/channel_model.dart';
import 'package:stream_chat/src/core/models/channel_state.dart';
import 'package:stream_chat/src/core/models/create_call_payload.dart';
import 'package:stream_chat/src/core/models/event.dart';
import 'package:stream_chat/src/core/models/filter.dart';
import 'package:stream_chat/src/core/models/member.dart';
@@ -587,9 +585,11 @@ class StreamChatClient {
}
}
/// Returns a token associated with the [callId].
Future<CallTokenPayload> getCallToken(String callId) async =>
_chatApi.call.getCallToken(callId);
/// Creates a new call.
Future<CreateCallPayload> createCall({
required String callId,
required String callType,
@@ -1,13 +1,14 @@
import 'package:stream_chat/src/core/api/responses.dart';
import 'package:stream_chat/src/core/http/stream_http_client.dart';
import 'package:stream_chat/src/core/models/call_token_payload.dart';
import 'package:stream_chat/src/core/models/create_call_payload.dart';
/// Defines the api dedicated to video call operations
class CallApi {
/// Initialize a new call api
CallApi(this._client);
final StreamHttpClient _client;
/// Returns a token dedicated to the [callId]
Future<CallTokenPayload> getCallToken(String callId) async {
final response = await _client.post(
'/calls/$callId',
@@ -17,6 +18,7 @@ class CallApi {
return CallTokenPayload.fromJson(response.data);
}
/// Creates a new call
Future<CreateCallPayload> createCall({
required String callId,
required String callType,
@@ -26,8 +28,8 @@ class CallApi {
}) async {
final response =
await _client.post(_getChannelUrl(channelId, channelType), data: {
'id': '$callId',
'type': '$callType',
'id': callId,
'type': callType,
});
// return response.data;
return CreateCallPayload.fromJson(response.data);
@@ -1,5 +1,7 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:stream_chat/src/client/client.dart';
import 'package:stream_chat/src/core/api/call_api.dart';
import 'package:stream_chat/src/core/error/error.dart';
import 'package:stream_chat/src/core/models/banned_user.dart';
import 'package:stream_chat/src/core/models/channel_model.dart';
@@ -495,3 +497,123 @@ class OGAttachmentResponse extends _BaseResponse {
static OGAttachmentResponse fromJson(Map<String, dynamic> json) =>
_$OGAttachmentResponseFromJson(json);
}
/// Payload for Agora call.
@JsonSerializable()
class AgoraPayload {
/// Create a new instance.
const AgoraPayload({required this.channel});
/// Create a new instance from a [json].
factory AgoraPayload.fromJson(Map<String, dynamic> json) =>
_$AgoraPayloadFromJson(json);
/// The Agora channel.
final String channel;
/// Convert this object to a json.
Map<String, dynamic> toJson() => _$AgoraPayloadToJson(this);
}
/// Model containing the information about a call.
@JsonSerializable()
class CallPayload extends Equatable {
/// Create a new instance.
const CallPayload({
required this.id,
required this.provider,
this.agora,
this.hms,
});
/// Create a new instance from a [json].
factory CallPayload.fromJson(Map<String, dynamic> json) =>
_$CallPayloadFromJson(json);
/// The call id.
final String id;
/// The call provider.
final String provider;
/// The payload specific to Agora.
final AgoraPayload? agora;
/// The payload specific to 100ms.
final HMSPayload? hms;
/// Convert this object to a json.
Map<String, dynamic> toJson() => _$CallPayloadToJson(this);
@override
List<Object?> get props => [id, provider, agora, hms];
}
/// The response to [CallApi.getCallToken]
@JsonSerializable()
class CallTokenPayload extends Equatable {
/// Create a new instance.
const CallTokenPayload({required this.token, this.agoraUid, this.agoraAppId});
/// Create a new instance from a [json].
factory CallTokenPayload.fromJson(Map<String, dynamic> json) =>
_$CallTokenPayloadFromJson(json);
/// The token to use for the call.
final String token;
/// The uid specific to Agora.
final int? agoraUid;
/// The appId specific to 100ms.
final String? agoraAppId;
/// Convert this object to a json.
Map<String, dynamic> toJson() => _$CallTokenPayloadToJson(this);
@override
List<Object?> get props => [token, agoraAppId, agoraUid];
}
/// The response to [CallApi.createCall]
@JsonSerializable()
class CreateCallPayload extends Equatable {
/// Creates a new instance.
const CreateCallPayload({required this.call});
/// Create a new instance from a [json].
factory CreateCallPayload.fromJson(Map<String, dynamic> json) =>
_$CreateCallPayloadFromJson(json);
/// The call object.
final CallPayload call;
/// Convert this object to a json.
Map<String, dynamic> toJson() => _$CreateCallPayloadToJson(this);
@override
List<Object?> get props => [call];
}
/// Payload for 100ms call.
@JsonSerializable()
class HMSPayload extends Equatable {
/// Create a new instance.
const HMSPayload({required this.roomId, required this.roomName});
/// Create a new instance from a [json].
factory HMSPayload.fromJson(Map<String, dynamic> json) =>
_$HMSPayloadFromJson(json);
/// The id of the 100ms room.
final String roomId;
/// The name of the 100ms room.
final String roomName;
/// Convert this object to a json.
Map<String, dynamic> toJson() => _$HMSPayloadToJson(this);
@override
List<Object?> get props => [roomId, roomName];
}
@@ -297,3 +297,66 @@ OGAttachmentResponse _$OGAttachmentResponseFromJson(
..title = json['title'] as String?
..titleLink = json['title_link'] as String?
..type = json['type'] as String?;
AgoraPayload _$AgoraPayloadFromJson(Map<String, dynamic> json) => AgoraPayload(
channel: json['channel'] as String,
);
Map<String, dynamic> _$AgoraPayloadToJson(AgoraPayload instance) =>
<String, dynamic>{
'channel': instance.channel,
};
CallPayload _$CallPayloadFromJson(Map<String, dynamic> json) => CallPayload(
id: json['id'] as String,
provider: json['provider'] as String,
agora: json['agora'] == null
? null
: AgoraPayload.fromJson(json['agora'] as Map<String, dynamic>),
hms: json['hms'] == null
? null
: HMSPayload.fromJson(json['hms'] as Map<String, dynamic>),
);
Map<String, dynamic> _$CallPayloadToJson(CallPayload instance) =>
<String, dynamic>{
'id': instance.id,
'provider': instance.provider,
'agora': instance.agora?.toJson(),
'hms': instance.hms?.toJson(),
};
CallTokenPayload _$CallTokenPayloadFromJson(Map<String, dynamic> json) =>
CallTokenPayload(
token: json['token'] as String,
agoraUid: json['agora_uid'] as int?,
agoraAppId: json['agora_app_id'] as String?,
);
Map<String, dynamic> _$CallTokenPayloadToJson(CallTokenPayload instance) =>
<String, dynamic>{
'token': instance.token,
'agora_uid': instance.agoraUid,
'agora_app_id': instance.agoraAppId,
};
CreateCallPayload _$CreateCallPayloadFromJson(Map<String, dynamic> json) =>
CreateCallPayload(
call: CallPayload.fromJson(json['call'] as Map<String, dynamic>),
);
Map<String, dynamic> _$CreateCallPayloadToJson(CreateCallPayload instance) =>
<String, dynamic>{
'call': instance.call.toJson(),
};
HMSPayload _$HMSPayloadFromJson(Map<String, dynamic> json) => HMSPayload(
roomId: json['room_id'] as String,
roomName: json['room_name'] as String,
);
Map<String, dynamic> _$HMSPayloadToJson(HMSPayload instance) =>
<String, dynamic>{
'room_id': instance.roomId,
'room_name': instance.roomName,
};
@@ -1,15 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'agora_payload.g.dart';
@JsonSerializable()
class AgoraPayload {
final String channel;
const AgoraPayload({required this.channel});
factory AgoraPayload.fromJson(Map<String, dynamic> json) =>
_$AgoraPayloadFromJson(json);
Map<String, dynamic> toJson() => _$AgoraPayloadToJson(this);
}
@@ -1,16 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'agora_payload.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
AgoraPayload _$AgoraPayloadFromJson(Map<String, dynamic> json) => AgoraPayload(
channel: json['channel'] as String,
);
Map<String, dynamic> _$AgoraPayloadToJson(AgoraPayload instance) =>
<String, dynamic>{
'channel': instance.channel,
};
@@ -1,25 +0,0 @@
import 'package:stream_chat/src/core/models/agora_payload.dart';
import 'package:stream_chat/src/core/models/hms_payload.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'call_payload.g.dart';
@JsonSerializable()
class CallPayload extends Equatable {
final String id;
final String provider;
final AgoraPayload? agora;
final HMSPayload? hms;
const CallPayload(
{required this.id, required this.provider, this.agora, this.hms});
factory CallPayload.fromJson(Map<String, dynamic> json) =>
_$CallPayloadFromJson(json);
Map<String, dynamic> toJson() => _$CallPayloadToJson(this);
@override
List<Object?> get props => [id, provider, agora, hms];
}
@@ -1,26 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'call_payload.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
CallPayload _$CallPayloadFromJson(Map<String, dynamic> json) => CallPayload(
id: json['id'] as String,
provider: json['provider'] as String,
agora: json['agora'] == null
? null
: AgoraPayload.fromJson(json['agora'] as Map<String, dynamic>),
hms: json['hms'] == null
? null
: HMSPayload.fromJson(json['hms'] as Map<String, dynamic>),
);
Map<String, dynamic> _$CallPayloadToJson(CallPayload instance) =>
<String, dynamic>{
'id': instance.id,
'provider': instance.provider,
'agora': instance.agora?.toJson(),
'hms': instance.hms?.toJson(),
};
@@ -1,23 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'call_token_payload.g.dart';
@JsonSerializable()
class CallTokenPayload extends Equatable {
final String token;
final int? agoraUid;
final String? agoraAppId;
const CallTokenPayload({required this.token, this.agoraUid, this.agoraAppId});
factory CallTokenPayload.fromJson(Map<String, dynamic> json) =>
_$CallTokenPayloadFromJson(json);
Map<String, dynamic> toJson() => _$CallTokenPayloadToJson(this);
@override
List<Object?> get props => [token, agoraAppId, agoraUid];
}
@@ -1,21 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'call_token_payload.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
CallTokenPayload _$CallTokenPayloadFromJson(Map<String, dynamic> json) =>
CallTokenPayload(
token: json['token'] as String,
agoraUid: json['agora_uid'] as int?,
agoraAppId: json['agora_app_id'] as String?,
);
Map<String, dynamic> _$CallTokenPayloadToJson(CallTokenPayload instance) =>
<String, dynamic>{
'token': instance.token,
'agora_uid': instance.agoraUid,
'agora_app_id': instance.agoraAppId,
};
@@ -1,20 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:stream_chat/src/core/models/call_payload.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'create_call_payload.g.dart';
@JsonSerializable()
class CreateCallPayload extends Equatable {
final CallPayload call;
const CreateCallPayload({required this.call});
factory CreateCallPayload.fromJson(Map<String, dynamic> json) =>
_$CreateCallPayloadFromJson(json);
Map<String, dynamic> toJson() => _$CreateCallPayloadToJson(this);
@override
List<Object?> get props => [call];
}
@@ -1,17 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'create_call_payload.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
CreateCallPayload _$CreateCallPayloadFromJson(Map<String, dynamic> json) =>
CreateCallPayload(
call: CallPayload.fromJson(json['call'] as Map<String, dynamic>),
);
Map<String, dynamic> _$CreateCallPayloadToJson(CreateCallPayload instance) =>
<String, dynamic>{
'call': instance.call.toJson(),
};
@@ -1,19 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'hms_payload.g.dart';
@JsonSerializable()
class HMSPayload extends Equatable {
final String roomId;
final String roomName;
const HMSPayload({required this.roomId, required this.roomName});
factory HMSPayload.fromJson(Map<String, dynamic> json) =>
_$HMSPayloadFromJson(json);
Map<String, dynamic> toJson() => _$HMSPayloadToJson(this);
@override
List<Object?> get props => [roomId, roomName];
}
@@ -1,18 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'hms_payload.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
HMSPayload _$HMSPayloadFromJson(Map<String, dynamic> json) => HMSPayload(
roomId: json['room_id'] as String,
roomName: json['room_name'] as String,
);
Map<String, dynamic> _$HMSPayloadToJson(HMSPayload instance) =>
<String, dynamic>{
'room_id': instance.roomId,
'room_name': instance.roomName,
};
@@ -15,21 +15,15 @@ export './src/core/api/responses.dart';
export './src/core/api/stream_chat_api.dart' show PushProvider;
export './src/core/error/error.dart';
export './src/core/models/action.dart';
export './src/core/models/agora_payload.dart';
export './src/core/models/attachment.dart';
export './src/core/models/attachment_file.dart';
export './src/core/models/call_payload.dart';
export './src/core/models/call_token_payload.dart';
export './src/core/models/channel_config.dart';
export './src/core/models/channel_model.dart';
export './src/core/models/channel_state.dart';
export './src/core/models/command.dart';
export './src/core/models/create_call_payload.dart';
export './src/core/models/device.dart';
export './src/core/models/event.dart';
export './src/core/models/filter.dart' show Filter;
export './src/core/models/hms_payload.dart';
export './src/core/models/hms_payload.dart';
export './src/core/models/member.dart';
export './src/core/models/message.dart';
export './src/core/models/mute.dart';