mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 12:59:21 +00:00
Load memberships
This commit is contained in:
parent
3d0bfe6c3f
commit
286639889b
@ -96,7 +96,7 @@ class ConversationsHelper {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
ConversationsList list = ConversationsList();
|
ConversationsList list = ConversationsList();
|
||||||
response.getArray().forEach((f) => list.add(_apiToConversation(f)));
|
response.getArray().forEach((f) => list.add(apiToConversation(f)));
|
||||||
|
|
||||||
// Update the database
|
// Update the database
|
||||||
await _conversationsDatabaseHelper.clearTable();
|
await _conversationsDatabaseHelper.clearTable();
|
||||||
@ -126,7 +126,7 @@ class ConversationsHelper {
|
|||||||
|
|
||||||
if (response.code != 200) return null;
|
if (response.code != 200) return null;
|
||||||
|
|
||||||
final conversation = _apiToConversation(response.getObject());
|
final conversation = apiToConversation(response.getObject());
|
||||||
_conversationsDatabaseHelper.insertOrUpdate(conversation);
|
_conversationsDatabaseHelper.insertOrUpdate(conversation);
|
||||||
return conversation;
|
return conversation;
|
||||||
} on Exception catch (e) {
|
} on Exception catch (e) {
|
||||||
@ -222,7 +222,7 @@ class ConversationsHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Turn an API entry into a [Conversation] object
|
/// Turn an API entry into a [Conversation] object
|
||||||
Conversation _apiToConversation(Map<String, dynamic> map) {
|
static Conversation apiToConversation(Map<String, dynamic> map) {
|
||||||
return Conversation(
|
return Conversation(
|
||||||
id: map["ID"],
|
id: map["ID"],
|
||||||
ownerID: map["ID_owner"],
|
ownerID: map["ID_owner"],
|
||||||
|
@ -28,18 +28,12 @@ class FriendsHelper {
|
|||||||
if (response.code != 200) return null;
|
if (response.code != 200) return null;
|
||||||
|
|
||||||
// Parse and return the list of friends
|
// Parse and return the list of friends
|
||||||
FriendsList list = FriendsList();
|
FriendsList list = FriendsList()
|
||||||
response.getArray().forEach(
|
..addAll(response
|
||||||
(f) => list.add(
|
.getArray()
|
||||||
Friend(
|
.cast<Map<String, dynamic>>()
|
||||||
id: f["ID_friend"],
|
.map(apiToFriend)
|
||||||
accepted: f["accepted"] == 1,
|
.toList());
|
||||||
lastActive: f["time_last_activity"],
|
|
||||||
following: f["following"] == 1,
|
|
||||||
canPostTexts: f["canPostTexts"],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Save the list of friends
|
// Save the list of friends
|
||||||
_friendsDatabaseHelper.clearTable();
|
_friendsDatabaseHelper.clearTable();
|
||||||
@ -48,6 +42,17 @@ class FriendsHelper {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Turn an API entry into a [Friend] object
|
||||||
|
static Friend apiToFriend(Map<String, dynamic> row) {
|
||||||
|
return Friend(
|
||||||
|
id: row["ID_friend"],
|
||||||
|
accepted: row["accepted"] == 1,
|
||||||
|
lastActive: row["time_last_activity"],
|
||||||
|
following: row["following"] == 1,
|
||||||
|
canPostTexts: row["canPostTexts"],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the list, either from an online or an offline source
|
/// Get the list, either from an online or an offline source
|
||||||
Future<FriendsList> getList({@required bool online}) async {
|
Future<FriendsList> getList({@required bool online}) async {
|
||||||
if (online)
|
if (online)
|
||||||
|
47
lib/helpers/webapp_helper.dart
Normal file
47
lib/helpers/webapp_helper.dart
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import 'package:comunic/helpers/conversations_helper.dart';
|
||||||
|
import 'package:comunic/helpers/friends_helper.dart';
|
||||||
|
import 'package:comunic/lists/memberships_list.dart';
|
||||||
|
import 'package:comunic/models/api_request.dart';
|
||||||
|
import 'package:comunic/models/membership.dart';
|
||||||
|
|
||||||
|
/// Web application helper
|
||||||
|
///
|
||||||
|
/// @author Pierre Hubert
|
||||||
|
|
||||||
|
class WebAppHelper {
|
||||||
|
/// Fetch from the server the list of memberships of the user
|
||||||
|
///
|
||||||
|
/// Throws in case of failure
|
||||||
|
static Future<MembershipList> getMemberships() async {
|
||||||
|
final response =
|
||||||
|
(await APIRequest.withLogin("webApp/getMemberships").execWithThrow())
|
||||||
|
.getArray();
|
||||||
|
|
||||||
|
return MembershipList()
|
||||||
|
..addAll(response
|
||||||
|
.cast<Map<String, dynamic>>()
|
||||||
|
.map(_apiToMembership)
|
||||||
|
.where((f) => f != null)
|
||||||
|
..toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Turn an API entry into a membership entry
|
||||||
|
static Membership _apiToMembership(Map<String, dynamic> entry) {
|
||||||
|
switch (entry["type"]) {
|
||||||
|
case "conversation":
|
||||||
|
return Membership.conversation(
|
||||||
|
ConversationsHelper.apiToConversation(entry["conv"]));
|
||||||
|
|
||||||
|
case "friend":
|
||||||
|
return Membership.friend(FriendsHelper.apiToFriend(entry["friend"]));
|
||||||
|
|
||||||
|
case "group":
|
||||||
|
return Membership.group(
|
||||||
|
groupID: entry["id"], groupLastActive: entry["last_activity"]);
|
||||||
|
|
||||||
|
default:
|
||||||
|
print("Unknown membership type: ${entry["type"]}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
lib/lists/memberships_list.dart
Normal file
8
lib/lists/memberships_list.dart
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import 'package:comunic/lists/abstract_list.dart';
|
||||||
|
import 'package:comunic/models/membership.dart';
|
||||||
|
|
||||||
|
/// Memberships list
|
||||||
|
///
|
||||||
|
/// @author Pierre Hubert
|
||||||
|
|
||||||
|
class MembershipList extends AbstractList<Membership> {}
|
@ -22,8 +22,6 @@ class Friend extends CacheModel implements Comparable<Friend> {
|
|||||||
}) : assert(id != null),
|
}) : assert(id != null),
|
||||||
assert(accepted != null),
|
assert(accepted != null),
|
||||||
assert(lastActive != null),
|
assert(lastActive != null),
|
||||||
assert(following != null),
|
|
||||||
assert(canPostTexts != null),
|
|
||||||
super(id: id);
|
super(id: id);
|
||||||
|
|
||||||
/// Check out whether friend is connected or not
|
/// Check out whether friend is connected or not
|
||||||
|
38
lib/models/membership.dart
Normal file
38
lib/models/membership.dart
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import 'package:comunic/models/conversation.dart';
|
||||||
|
import 'package:comunic/models/friend.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Membership information
|
||||||
|
///
|
||||||
|
/// @author Pierre Hubert
|
||||||
|
|
||||||
|
enum MembershipType { FRIEND, GROUP, CONVERSATION }
|
||||||
|
|
||||||
|
class Membership {
|
||||||
|
final MembershipType type;
|
||||||
|
final Conversation conversation;
|
||||||
|
final Friend friend;
|
||||||
|
final int groupID;
|
||||||
|
final int groupLastActive;
|
||||||
|
|
||||||
|
Membership.conversation(this.conversation)
|
||||||
|
: type = MembershipType.CONVERSATION,
|
||||||
|
friend = null,
|
||||||
|
groupID = null,
|
||||||
|
groupLastActive = null,
|
||||||
|
assert(conversation != null);
|
||||||
|
|
||||||
|
Membership.friend(this.friend)
|
||||||
|
: type = MembershipType.FRIEND,
|
||||||
|
conversation = null,
|
||||||
|
groupID = null,
|
||||||
|
groupLastActive = null,
|
||||||
|
assert(friend != null);
|
||||||
|
|
||||||
|
Membership.group({@required this.groupID, @required this.groupLastActive})
|
||||||
|
: type = MembershipType.GROUP,
|
||||||
|
conversation = null,
|
||||||
|
friend = null,
|
||||||
|
assert(groupID != null),
|
||||||
|
assert(groupLastActive != null);
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:comunic/ui/routes/main_route/main_route.dart';
|
import 'package:comunic/ui/routes/main_route/main_route.dart';
|
||||||
import 'package:comunic/ui/widgets/tablet_mode/current_user_panel.dart';
|
import 'package:comunic/ui/widgets/tablet_mode/current_user_panel.dart';
|
||||||
|
import 'package:comunic/ui/widgets/tablet_mode/memberships_panel.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
/// Main tablet route
|
/// Main tablet route
|
||||||
@ -40,7 +41,11 @@ class _TabletRouteState extends State<TabletRoute> {
|
|||||||
width: 300,
|
width: 300,
|
||||||
color: Color(0xFF222D32),
|
color: Color(0xFF222D32),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: <Widget>[CurrentUserPanel()],
|
children: <Widget>[
|
||||||
|
CurrentUserPanel(),
|
||||||
|
Container(height: 20),
|
||||||
|
Expanded(child: MembershipsPanel())
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
41
lib/ui/widgets/tablet_mode/memberships_panel.dart
Normal file
41
lib/ui/widgets/tablet_mode/memberships_panel.dart
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import 'package:comunic/helpers/webapp_helper.dart';
|
||||||
|
import 'package:comunic/lists/memberships_list.dart';
|
||||||
|
import 'package:comunic/ui/widgets/safe_state.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Memberships panel
|
||||||
|
///
|
||||||
|
/// @author Pierre Hubert
|
||||||
|
|
||||||
|
class MembershipsPanel extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_MembershipsPanelState createState() => _MembershipsPanelState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MembershipsPanelState extends SafeState<MembershipsPanel> {
|
||||||
|
MembershipList _membershipList;
|
||||||
|
|
||||||
|
Future<void> _refresh() async {
|
||||||
|
try {
|
||||||
|
final memberships = await WebAppHelper.getMemberships();
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
_membershipList = memberships;
|
||||||
|
});
|
||||||
|
} catch (e, s) {
|
||||||
|
print("Could not load the list of memberships! $e\n$s");
|
||||||
|
setTimeout(5, _refresh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user