mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-03 19:54:12 +00:00 
			
		
		
		
	Show groups posts
This commit is contained in:
		
							
								
								
									
										73
									
								
								lib/helpers/groups_helper.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								lib/helpers/groups_helper.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					import 'package:comunic/lists/groups_list.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/api_request.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/group.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Groups helper
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const _APIGroupsMembershipLevelsMap = {
 | 
				
			||||||
 | 
					  "administrator": GroupMembershipLevel.ADMINISTRATOR,
 | 
				
			||||||
 | 
					  "moderator": GroupMembershipLevel.MODERATOR,
 | 
				
			||||||
 | 
					  "member": GroupMembershipLevel.MEMBER,
 | 
				
			||||||
 | 
					  "invited": GroupMembershipLevel.INVITED,
 | 
				
			||||||
 | 
					  "pending": GroupMembershipLevel.PENDING,
 | 
				
			||||||
 | 
					  "visitor": GroupMembershipLevel.VISITOR
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const _APIGroupsVisibilityLevelsMap = {
 | 
				
			||||||
 | 
					  "open": GroupVisibilityLevel.OPEN,
 | 
				
			||||||
 | 
					  "private": GroupVisibilityLevel.PRIVATE,
 | 
				
			||||||
 | 
					  "secrete": GroupVisibilityLevel.SECRETE
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const _APIGroupsRegistrationLevelsMap = {
 | 
				
			||||||
 | 
					  "open": GroupRegistrationLevel.OPEN,
 | 
				
			||||||
 | 
					  "moderated": GroupRegistrationLevel.MODERATED,
 | 
				
			||||||
 | 
					  "closed": GroupRegistrationLevel.CLOSED
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const _APIGroupsPostsCreationLevelsMap = {
 | 
				
			||||||
 | 
					  "moderators": GroupPostCreationLevel.MODERATORS,
 | 
				
			||||||
 | 
					  "members": GroupPostCreationLevel.MEMBERS
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GroupsHelper {
 | 
				
			||||||
 | 
					  /// Get a list of groups from the server
 | 
				
			||||||
 | 
					  Future<GroupsList> getList(Set<int> groups) async {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(groups.length == 0)
 | 
				
			||||||
 | 
					      return GroupsList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    final response = await APIRequest(
 | 
				
			||||||
 | 
					      uri: "groups/get_multiple_info",
 | 
				
			||||||
 | 
					      needLogin: true,
 | 
				
			||||||
 | 
					      args: {"list": groups.join(",")},
 | 
				
			||||||
 | 
					    ).exec();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (response.code != 200) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    final list = GroupsList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    response
 | 
				
			||||||
 | 
					        .getObject()
 | 
				
			||||||
 | 
					        .forEach((k, d) => list[int.parse(k)] = _getGroupFromAPI(d));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return list;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Turn an API entry into a group object
 | 
				
			||||||
 | 
					  Group _getGroupFromAPI(Map<String, dynamic> map) {
 | 
				
			||||||
 | 
					    return Group(
 | 
				
			||||||
 | 
					        id: map["id"],
 | 
				
			||||||
 | 
					        name: map["name"],
 | 
				
			||||||
 | 
					        numberMembers: map["number_members"],
 | 
				
			||||||
 | 
					        membershipLevel: _APIGroupsMembershipLevelsMap[map["membership"]],
 | 
				
			||||||
 | 
					        visibilityLevel: _APIGroupsVisibilityLevelsMap[map["visibility"]],
 | 
				
			||||||
 | 
					        registrationLevel:
 | 
				
			||||||
 | 
					            _APIGroupsRegistrationLevelsMap[map["registration_level"]],
 | 
				
			||||||
 | 
					        postCreationLevel: _APIGroupsPostsCreationLevelsMap[map["posts_level"]],
 | 
				
			||||||
 | 
					        virtualDirectory: map["virtual_directory"],
 | 
				
			||||||
 | 
					        following: map["following"]);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -43,6 +43,9 @@ class PostsHelper {
 | 
				
			|||||||
    final response = await APIRequest(
 | 
					    final response = await APIRequest(
 | 
				
			||||||
      uri: "posts/get_latest",
 | 
					      uri: "posts/get_latest",
 | 
				
			||||||
      needLogin: true,
 | 
					      needLogin: true,
 | 
				
			||||||
 | 
					      args: {
 | 
				
			||||||
 | 
					        "include_groups": true.toString()
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    ).exec();
 | 
					    ).exec();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (response.code != 200) return null;
 | 
					    if (response.code != 200) return null;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								lib/lists/groups_list.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								lib/lists/groups_list.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					import 'dart:collection';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import 'package:comunic/models/group.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Groups list
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GroupsList extends MapBase<int, Group> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final Map<int, Group> _groups = Map();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Group operator [](Object key) => _groups[key];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void operator []=(int key, Group value) => _groups[key] = value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void clear() => _groups.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Iterable<int> get keys => _groups.keys;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Group remove(Object key) => _groups.remove(key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9,7 +9,6 @@ import 'package:comunic/models/post.dart';
 | 
				
			|||||||
/// @author Pierre HUBERT
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PostsList extends ListBase<Post> {
 | 
					class PostsList extends ListBase<Post> {
 | 
				
			||||||
 | 
					 | 
				
			||||||
  List<Post> _list = List();
 | 
					  List<Post> _list = List();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int get length => _list.length;
 | 
					  int get length => _list.length;
 | 
				
			||||||
@@ -29,14 +28,22 @@ class PostsList extends ListBase<Post> {
 | 
				
			|||||||
    forEach((p) {
 | 
					    forEach((p) {
 | 
				
			||||||
      set.add(p.userID);
 | 
					      set.add(p.userID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if(p.userPageID != null && p.userPageID > 0)
 | 
					      if (p.userPageID != null && p.userPageID > 0) set.add(p.userPageID);
 | 
				
			||||||
        set.add(p.userPageID);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if(p.comments != null)
 | 
					      if (p.comments != null) set.addAll(p.comments.usersID);
 | 
				
			||||||
        set.addAll(p.comments.usersID);
 | 
					 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return set;
 | 
					    return set;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Get the list of groups in this list of posts
 | 
				
			||||||
 | 
					  Set<int> get groupsID {
 | 
				
			||||||
 | 
					    Set<int> set = Set();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    forEach((p) {
 | 
				
			||||||
 | 
					      if (p.isGroupPost) set.add(p.groupID);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return set;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										53
									
								
								lib/models/group.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								lib/models/group.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					import 'package:meta/meta.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Group information
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum GroupMembershipLevel {
 | 
				
			||||||
 | 
					  ADMINISTRATOR,
 | 
				
			||||||
 | 
					  MODERATOR,
 | 
				
			||||||
 | 
					  MEMBER,
 | 
				
			||||||
 | 
					  INVITED,
 | 
				
			||||||
 | 
					  PENDING,
 | 
				
			||||||
 | 
					  VISITOR
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum GroupVisibilityLevel { OPEN, PRIVATE, SECRETE }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum GroupRegistrationLevel { OPEN, MODERATED, CLOSED }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum GroupPostCreationLevel { MODERATORS, MEMBERS }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Group {
 | 
				
			||||||
 | 
					  final int id;
 | 
				
			||||||
 | 
					  final String name;
 | 
				
			||||||
 | 
					  final int numberMembers;
 | 
				
			||||||
 | 
					  final GroupMembershipLevel membershipLevel;
 | 
				
			||||||
 | 
					  final GroupVisibilityLevel visibilityLevel;
 | 
				
			||||||
 | 
					  final GroupRegistrationLevel registrationLevel;
 | 
				
			||||||
 | 
					  final GroupPostCreationLevel postCreationLevel;
 | 
				
			||||||
 | 
					  final String virtualDirectory;
 | 
				
			||||||
 | 
					  final bool following;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Group({
 | 
				
			||||||
 | 
					    @required this.id,
 | 
				
			||||||
 | 
					    @required this.name,
 | 
				
			||||||
 | 
					    @required this.numberMembers,
 | 
				
			||||||
 | 
					    @required this.membershipLevel,
 | 
				
			||||||
 | 
					    @required this.visibilityLevel,
 | 
				
			||||||
 | 
					    @required this.registrationLevel,
 | 
				
			||||||
 | 
					    @required this.postCreationLevel,
 | 
				
			||||||
 | 
					    @required this.virtualDirectory,
 | 
				
			||||||
 | 
					    @required this.following,
 | 
				
			||||||
 | 
					  })  : assert(id != null),
 | 
				
			||||||
 | 
					        assert(name != null),
 | 
				
			||||||
 | 
					        assert(numberMembers != null),
 | 
				
			||||||
 | 
					        assert(membershipLevel != null),
 | 
				
			||||||
 | 
					        assert(visibilityLevel != null),
 | 
				
			||||||
 | 
					        assert(registrationLevel != null),
 | 
				
			||||||
 | 
					        assert(postCreationLevel != null),
 | 
				
			||||||
 | 
					        assert(following != null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get displayName => this.name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -6,6 +6,7 @@ import 'package:comunic/enums/post_visibility_level.dart';
 | 
				
			|||||||
import 'package:comunic/helpers/comments_helper.dart';
 | 
					import 'package:comunic/helpers/comments_helper.dart';
 | 
				
			||||||
import 'package:comunic/helpers/likes_helper.dart';
 | 
					import 'package:comunic/helpers/likes_helper.dart';
 | 
				
			||||||
import 'package:comunic/helpers/posts_helper.dart';
 | 
					import 'package:comunic/helpers/posts_helper.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/lists/groups_list.dart';
 | 
				
			||||||
import 'package:comunic/lists/users_list.dart';
 | 
					import 'package:comunic/lists/users_list.dart';
 | 
				
			||||||
import 'package:comunic/models/comment.dart';
 | 
					import 'package:comunic/models/comment.dart';
 | 
				
			||||||
import 'package:comunic/models/like_element.dart';
 | 
					import 'package:comunic/models/like_element.dart';
 | 
				
			||||||
@@ -38,6 +39,7 @@ enum _PostActions { DELETE, UPDATE_CONTENT }
 | 
				
			|||||||
class PostTile extends StatefulWidget {
 | 
					class PostTile extends StatefulWidget {
 | 
				
			||||||
  final Post post;
 | 
					  final Post post;
 | 
				
			||||||
  final UsersList usersInfo;
 | 
					  final UsersList usersInfo;
 | 
				
			||||||
 | 
					  final GroupsList groupsInfo;
 | 
				
			||||||
  final void Function(Post) onDeletedPost;
 | 
					  final void Function(Post) onDeletedPost;
 | 
				
			||||||
  final bool showPostTarget;
 | 
					  final bool showPostTarget;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,10 +49,12 @@ class PostTile extends StatefulWidget {
 | 
				
			|||||||
    @required this.usersInfo,
 | 
					    @required this.usersInfo,
 | 
				
			||||||
    @required this.onDeletedPost,
 | 
					    @required this.onDeletedPost,
 | 
				
			||||||
    @required this.showPostTarget,
 | 
					    @required this.showPostTarget,
 | 
				
			||||||
 | 
					    @required this.groupsInfo,
 | 
				
			||||||
  })  : assert(post != null),
 | 
					  })  : assert(post != null),
 | 
				
			||||||
        assert(usersInfo != null),
 | 
					        assert(usersInfo != null),
 | 
				
			||||||
        assert(onDeletedPost != null),
 | 
					        assert(onDeletedPost != null),
 | 
				
			||||||
        assert(showPostTarget != null),
 | 
					        assert(showPostTarget != null),
 | 
				
			||||||
 | 
					        assert(groupsInfo != null),
 | 
				
			||||||
        super(key: key);
 | 
					        super(key: key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
@@ -85,7 +89,7 @@ class _PostTileState extends State<PostTile> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return " > " +
 | 
					    return " > " +
 | 
				
			||||||
        (widget.post.isGroupPost
 | 
					        (widget.post.isGroupPost
 | 
				
			||||||
            ? "Group"
 | 
					            ? widget.groupsInfo[widget.post.groupID].displayName
 | 
				
			||||||
            : widget.usersInfo.getUser(widget.post.userPageID).displayName);
 | 
					            : widget.usersInfo.getUser(widget.post.userPageID).displayName);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
 | 
					import 'package:comunic/helpers/groups_helper.dart';
 | 
				
			||||||
import 'package:comunic/helpers/users_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/posts_list.dart';
 | 
				
			||||||
import 'package:comunic/lists/users_list.dart';
 | 
					import 'package:comunic/lists/users_list.dart';
 | 
				
			||||||
import 'package:comunic/models/post.dart';
 | 
					import 'package:comunic/models/post.dart';
 | 
				
			||||||
@@ -33,10 +35,12 @@ class PostsListWidget extends StatefulWidget {
 | 
				
			|||||||
class _PostsListWidgetState extends State<PostsListWidget> {
 | 
					class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			||||||
  // Helpers
 | 
					  // Helpers
 | 
				
			||||||
  final UsersHelper _usersHelper = UsersHelper();
 | 
					  final UsersHelper _usersHelper = UsersHelper();
 | 
				
			||||||
 | 
					  final GroupsHelper _groupsHelper = GroupsHelper();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Class members
 | 
					  // Class members
 | 
				
			||||||
  PostsList _list;
 | 
					  PostsList _list;
 | 
				
			||||||
  UsersList _users;
 | 
					  UsersList _users;
 | 
				
			||||||
 | 
					  GroupsList _groups;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  set error(ErrorLevel err) => setState(() => _error = err);
 | 
					  set error(ErrorLevel err) => setState(() => _error = err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,9 +65,14 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (users == null) return _loadError();
 | 
					    if (users == null) return _loadError();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    final groups = await _groupsHelper.getList(list.groupsID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(groups == null) return _loadError();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setState(() {
 | 
					    setState(() {
 | 
				
			||||||
      _list = list;
 | 
					      _list = list;
 | 
				
			||||||
      _users = users;
 | 
					      _users = users;
 | 
				
			||||||
 | 
					      _groups = groups;
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -77,6 +86,7 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
      itemBuilder: (c, i) => PostTile(
 | 
					      itemBuilder: (c, i) => PostTile(
 | 
				
			||||||
            post: _list[i],
 | 
					            post: _list[i],
 | 
				
			||||||
            usersInfo: _users,
 | 
					            usersInfo: _users,
 | 
				
			||||||
 | 
					            groupsInfo: _groups,
 | 
				
			||||||
            onDeletedPost: _removePost,
 | 
					            onDeletedPost: _removePost,
 | 
				
			||||||
            showPostTarget: widget.showPostsTarget,
 | 
					            showPostTarget: widget.showPostsTarget,
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user