added talk notification levels for chats
This commit is contained in:
@@ -4,6 +4,7 @@ import 'package:http/http.dart' as http;
|
||||
|
||||
import '../../../api_params.dart';
|
||||
import '../../../api_response.dart';
|
||||
import '../room/get_room_response.dart';
|
||||
import '../talk_api.dart';
|
||||
|
||||
/// Small POST/DELETE-only Talk endpoints that have no response payload.
|
||||
@@ -105,3 +106,21 @@ class DeleteRoomAvatar extends TalkApi {
|
||||
Map<String, String>? headers,
|
||||
) => http.delete(uri, headers: headers);
|
||||
}
|
||||
|
||||
class SetNotificationLevel extends TalkApi {
|
||||
final String chatToken;
|
||||
final GetRoomResponseObjectParticipantNotificationLevel level;
|
||||
|
||||
SetNotificationLevel(this.chatToken, this.level)
|
||||
: super('v4/room/$chatToken/notify', null);
|
||||
|
||||
@override
|
||||
ApiResponse? assemble(String raw) => null;
|
||||
|
||||
@override
|
||||
Future<http.Response> request(
|
||||
Uri uri,
|
||||
ApiParams? body,
|
||||
Map<String, String>? headers,
|
||||
) => http.post(uri, headers: headers, body: {'level': '${level.apiValue}'});
|
||||
}
|
||||
|
||||
@@ -130,6 +130,12 @@ enum GetRoomResponseObjectParticipantNotificationLevel {
|
||||
neverNotify,
|
||||
}
|
||||
|
||||
extension NotificationLevelApiValue
|
||||
on GetRoomResponseObjectParticipantNotificationLevel {
|
||||
int get apiValue =>
|
||||
_$GetRoomResponseObjectParticipantNotificationLevelEnumMap[this]!;
|
||||
}
|
||||
|
||||
enum GetRoomResponseObjectMessageActorType {
|
||||
@JsonValue('deleted_users')
|
||||
deletedUsers,
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import 'get_room_response.dart';
|
||||
|
||||
typedef NotificationLevel = GetRoomResponseObjectParticipantNotificationLevel;
|
||||
|
||||
/// The levels a user can pick in the UI; [NotificationLevel.defaultLevel]
|
||||
/// is only ever reported by the server, never chosen.
|
||||
const selectableNotificationLevels = [
|
||||
NotificationLevel.alwaysNotify,
|
||||
NotificationLevel.notifyOnMention,
|
||||
NotificationLevel.neverNotify,
|
||||
];
|
||||
|
||||
extension RoomNotificationLevel on GetRoomResponseObject {
|
||||
/// Resolves "default" the way Spreed does: 1:1 chats notify on every
|
||||
/// message, group chats only on mentions (`default_group_notification`).
|
||||
NotificationLevel get effectiveNotificationLevel {
|
||||
if (notificationLevel != NotificationLevel.defaultLevel) {
|
||||
return notificationLevel;
|
||||
}
|
||||
return type == GetRoomResponseObjectConversationType.oneToOne
|
||||
? NotificationLevel.alwaysNotify
|
||||
: NotificationLevel.notifyOnMention;
|
||||
}
|
||||
|
||||
bool get isMuted =>
|
||||
effectiveNotificationLevel == NotificationLevel.neverNotify;
|
||||
}
|
||||
Reference in New Issue
Block a user