mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-25 22:39:22 +00:00
Handles new comments events
This commit is contained in:
parent
02034acbbe
commit
a60c1ed68c
@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:comunic/models/comment.dart';
|
||||
import 'package:event_bus/event_bus.dart';
|
||||
|
||||
/// Events helper
|
||||
@ -23,6 +24,13 @@ class NewNumberUnreadConversations {
|
||||
NewNumberUnreadConversations(this.newNum);
|
||||
}
|
||||
|
||||
/// New comment
|
||||
class NewCommentEvent {
|
||||
final Comment comment;
|
||||
|
||||
NewCommentEvent(this.comment);
|
||||
}
|
||||
|
||||
class EventsHelper {
|
||||
static EventBus _mgr = EventBus();
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:comunic/helpers/comments_helper.dart';
|
||||
import 'package:comunic/helpers/events_helper.dart';
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
import 'package:comunic/models/config.dart';
|
||||
@ -39,8 +40,7 @@ class WebSocketHelper {
|
||||
|
||||
// Determine WebSocket URI
|
||||
final wsURL =
|
||||
"${(config().apiServerSecure ? "wss" : "ws")}://${config()
|
||||
.apiServerName}${config().apiServerUri}ws?token=$token";
|
||||
"${(config().apiServerSecure ? "wss" : "ws")}://${config().apiServerName}${config().apiServerUri}ws?token=$token";
|
||||
final wsURI = Uri.parse(wsURL);
|
||||
|
||||
// Connect
|
||||
@ -120,6 +120,12 @@ class WebSocketHelper {
|
||||
EventsHelper.emit(NewNumberUnreadConversations(msg.data));
|
||||
break;
|
||||
|
||||
// New comment
|
||||
case "new_comment":
|
||||
EventsHelper.emit(
|
||||
NewCommentEvent(CommentsHelper.apiToComment(msg.data)));
|
||||
break;
|
||||
|
||||
default:
|
||||
throw Exception("Unknown message type: ${msg.title}");
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import 'package:comunic/enums/post_kind.dart';
|
||||
import 'package:comunic/enums/post_visibility_level.dart';
|
||||
import 'package:comunic/helpers/comments_helper.dart';
|
||||
import 'package:comunic/helpers/posts_helper.dart';
|
||||
import 'package:comunic/helpers/users_helper.dart';
|
||||
import 'package:comunic/lists/groups_list.dart';
|
||||
import 'package:comunic/lists/users_list.dart';
|
||||
import 'package:comunic/models/comment.dart';
|
||||
@ -493,22 +492,6 @@ class _PostTileState extends State<PostTile> {
|
||||
if (commentID < 1) throw new Exception("Comment ID is inferior to 1!");
|
||||
|
||||
clearCommentForm();
|
||||
|
||||
// Get and show new comment
|
||||
final newComment = await _commentsHelper.getSingle(commentID);
|
||||
|
||||
if (newComment == null)
|
||||
return showSimpleSnack(
|
||||
context, tr("Could not retrieve created comment!"));
|
||||
|
||||
// Get information about the user who created the comment (if required)
|
||||
if (!widget.usersInfo.hasUser(newComment.userID))
|
||||
widget.usersInfo
|
||||
.add(await UsersHelper().getSingleWithThrow(newComment.userID));
|
||||
|
||||
setState(() {
|
||||
widget.post.comments.add(newComment);
|
||||
});
|
||||
} catch (e) {
|
||||
print(e);
|
||||
showSimpleSnack(context, tr("Could not create comment!"));
|
||||
|
@ -1,9 +1,11 @@
|
||||
import 'package:comunic/helpers/events_helper.dart';
|
||||
import 'package:comunic/helpers/groups_helper.dart';
|
||||
import 'package:comunic/helpers/posts_helper.dart';
|
||||
import 'package:comunic/helpers/users_helper.dart';
|
||||
import 'package:comunic/lists/groups_list.dart';
|
||||
import 'package:comunic/lists/posts_list.dart';
|
||||
import 'package:comunic/lists/users_list.dart';
|
||||
import 'package:comunic/models/comment.dart';
|
||||
import 'package:comunic/models/post.dart';
|
||||
import 'package:comunic/ui/screens/conversation_screen.dart';
|
||||
import 'package:comunic/ui/tiles/post_tile.dart';
|
||||
@ -65,6 +67,9 @@ class PostsListWidgetState extends SafeState<PostsListWidget> {
|
||||
super.initState();
|
||||
|
||||
_scrollController = ScrollWatcher(onReachBottom: reachedPostsBottom);
|
||||
|
||||
// Register to events
|
||||
this.listen<NewCommentEvent>((ev) => this._addComment(ev.comment));
|
||||
}
|
||||
|
||||
@override
|
||||
@ -219,4 +224,24 @@ class PostsListWidgetState extends SafeState<PostsListWidget> {
|
||||
void reachedPostsBottom() {
|
||||
if (widget.getOlder != null) loadPostsList(getOlder: true);
|
||||
}
|
||||
|
||||
/// Add new comment
|
||||
void _addComment(Comment c) async {
|
||||
if (_list == null) return;
|
||||
|
||||
try {
|
||||
final p = _list.singleWhere((p) => p.id == c.postID, orElse: () => null);
|
||||
|
||||
if (p == null) return;
|
||||
|
||||
if (!_users.hasUser(c.userID))
|
||||
_users.add(await UsersHelper().getSingleWithThrow(c.userID));
|
||||
|
||||
setState(() {
|
||||
p.comments.add(c);
|
||||
});
|
||||
} catch (e, stack) {
|
||||
print("$e\n$stack");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user