third party video integration

This commit is contained in:
Sacha Arbonel
2022-08-25 17:36:27 +02:00
committed by Salvatore Giordano
parent ceab9175ce
commit c9281e0c89
14 changed files with 255 additions and 2 deletions
+2 -2
View File
@@ -54,11 +54,11 @@ scripts:
description: Build all generated files for Dart & Flutter packages in this project.
generate:dart:
run: melos exec -c 1 --depends-on="build_runner" --no-flutter -- "dart run build_runner build --delete-conflicting-outputs"
run: melos exec -c 1 --depends-on="build_runner" --no-flutter -- "dart pub run build_runner build --delete-conflicting-outputs --enable-experiment=super-parameters,enhanced-enums"
description: Build all generated files for Dart packages in this project.
generate:flutter:
run: melos exec -c 1 --depends-on="build_runner" --flutter -- "flutter pub run build_runner build --delete-conflicting-outputs"
run: melos exec -c 1 --depends-on="build_runner" --flutter -- "flutter pub run build_runner build --delete-conflicting-outputs --enable-experiment=super-parameters,enhanced-enums"
description: Build all generated files for Flutter packages in this project.
test:all:
@@ -17,8 +17,10 @@ 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';
@@ -585,6 +587,17 @@ class StreamChatClient {
}
}
Future<CallTokenPayload> getCallToken(String callId) async =>
_chatApi.call.getCallToken(callId);
Future<CreateCallPayload> createCall(
String callId,
String callType,
Map<String, Object?>? options,
) async {
return _chatApi.call.createCall(callId, callType, options);
}
/// Requests channels with a given query from the API.
Future<List<Channel>> queryChannelsOnline({
Filter? filter,
@@ -0,0 +1,28 @@
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';
class CallApi {
/// Initialize a new call api
CallApi(this._client);
final StreamHttpClient _client;
Future<CallTokenPayload> getCallToken(String callId) async {
final response = await _client.post(
'/calls/$callId',
);
return CallTokenPayload.fromJson(response.data);
}
Future<CreateCallPayload> createCall(
String callId,
String callType,
Map<String, Object?>? options,
) async {
final response = await _client.post(
'/channels/$callType/$callId/call',
);
return CreateCallPayload.fromJson(response.data);
}
}
@@ -1,5 +1,6 @@
import 'package:logging/logging.dart';
import 'package:stream_chat/src/core/api/attachment_file_uploader.dart';
import 'package:stream_chat/src/core/api/call_api.dart';
import 'package:stream_chat/src/core/api/channel_api.dart';
import 'package:stream_chat/src/core/api/device_api.dart';
import 'package:stream_chat/src/core/api/general_api.dart';
@@ -53,6 +54,11 @@ class StreamChatApi {
/// Api dedicated to message operations
MessageApi get message => _message ??= MessageApi(_client);
CallApi? _call;
/// Api dedicated to guest operations
CallApi get call => _call ??= CallApi(_client);
ChannelApi? _channel;
/// Api dedicated to channel operations
@@ -0,0 +1,13 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'agora_payload.g.dart';
@JsonSerializable(includeIfNull: false)
class AgoraPayload {
final String channel;
const AgoraPayload({required this.channel});
factory AgoraPayload.fromJson(Map<String, dynamic> json) =>
_$AgoraPayloadFromJson(json);
}
@@ -0,0 +1,16 @@
// 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,
};
@@ -0,0 +1,22 @@
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(includeIfNull: false)
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);
@override
List<Object?> get props => [id, provider, agora, hms];
}
@@ -0,0 +1,35 @@
// 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) {
final val = <String, dynamic>{
'id': instance.id,
'provider': instance.provider,
};
void writeNotNull(String key, dynamic value) {
if (value != null) {
val[key] = value;
}
}
writeNotNull('agora', instance.agora?.toJson());
writeNotNull('hms', instance.hms?.toJson());
return val;
}
@@ -0,0 +1,20 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'call_token_payload.g.dart';
@JsonSerializable(includeIfNull: false)
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);
@override
List<Object?> get props => [token, agoraAppId, agoraUid];
}
@@ -0,0 +1,30 @@
// 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) {
final val = <String, dynamic>{
'token': instance.token,
};
void writeNotNull(String key, dynamic value) {
if (value != null) {
val[key] = value;
}
}
writeNotNull('agora_uid', instance.agoraUid);
writeNotNull('agora_app_id', instance.agoraAppId);
return val;
}
@@ -0,0 +1,18 @@
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(includeIfNull: false)
class CreateCallPayload extends Equatable {
final CallPayload call;
const CreateCallPayload({required this.call});
factory CreateCallPayload.fromJson(Map<String, dynamic> json) =>
_$CreateCallPayloadFromJson(json);
@override
List<Object?> get props => [call];
}
@@ -0,0 +1,17 @@
// 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(),
};
@@ -0,0 +1,17 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'hms_payload.g.dart';
@JsonSerializable(includeIfNull: false)
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);
@override
List<Object?> get props => [roomId, roomName];
}
@@ -0,0 +1,18 @@
// 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,
};