[LLC] Add pin message feature

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-02-19 17:06:45 +05:30
parent 24ce5333ce
commit e9ecd1cc35
8 changed files with 302 additions and 31 deletions
+33 -1
View File
@@ -1295,7 +1295,7 @@ class StreamChatClient {
Future<UpdateMessageResponse> updateMessage(Message message) async {
final response = await post(
'/messages/${message.id}',
data: {'message': message},
data: {'message': message.toJson()},
);
return decode(response.data, UpdateMessageResponse.fromJson);
}
@@ -1311,6 +1311,38 @@ class StreamChatClient {
final response = await get('/messages/$messageId');
return decode(response.data, GetMessageResponse.fromJson);
}
/// Pins provided message
Future<UpdateMessageResponse> pinMessage(
Message message,
Object timeoutOrExpirationDate,
) {
assert(() {
if (timeoutOrExpirationDate is! DateTime &&
timeoutOrExpirationDate is! num &&
timeoutOrExpirationDate != null) {
throw ArgumentError('Invalid timeout or Expiration date');
}
return true;
}());
DateTime pinExpires;
if (timeoutOrExpirationDate is DateTime) {
pinExpires = timeoutOrExpirationDate.toUtc();
} else if (timeoutOrExpirationDate is num) {
pinExpires = DateTime.now().add(
Duration(seconds: timeoutOrExpirationDate.toInt()),
);
}
return updateMessage(
message.copyWith(pinned: true, pinExpires: pinExpires),
);
}
/// Unpins provided message
Future<UpdateMessageResponse> unpinMessage(Message message) {
return updateMessage(message.copyWith(pinned: false));
}
}
/// The class that handles the state of the channel listening to the events