1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2025-06-19 08:15:16 +00:00

Get older messages

This commit is contained in:
2019-04-27 18:29:30 +02:00
parent b02315cf09
commit d6e5b668cc
4 changed files with 170 additions and 29 deletions

View File

@ -29,21 +29,16 @@ class ConversationsHelper {
///
/// Return the ID of the newly created conversation or -1 in case of failure
Future<int> createConversation(ConversationSettings settings) async {
final response =
await APIRequest(uri: "conversations/create", needLogin: true, args: {
"name": settings.hasName ? settings.name : "false",
"follow": settings.following ? "true" : "false",
"users": settings.members.join(",")
}).exec();
final response = await APIRequest(
uri: "conversations/create",
needLogin: true,
args: {
"name" : settings.hasName ? settings.name : "false",
"follow" : settings.following ? "true" : "false",
"users": settings.members.join(",")
}
).exec();
if(response.code != 200) return -1;
if (response.code != 200) return -1;
return response.getObject()["conversationID"];
}
/// Download the list of conversations from the server
@ -156,6 +151,28 @@ class ConversationsHelper {
);
}
/// Parse a list of messages given by the server
Future<ConversationMessagesList> _parseConversationMessageFromServer(
int conversationID, APIResponse response) async {
if (response.code != 200) return null;
// Parse the response of the server
ConversationMessagesList list = ConversationMessagesList();
response.getArray().forEach((f) {
list.add(
_apiToConversationMessage(
conversationID: conversationID,
map: f,
),
);
});
// Save messages in the cache
_conversationMessagesDatabaseHelper.insertOrUpdateAll(list);
return list;
}
/// Refresh the list of messages of a conversation
///
/// Set [lastMessageID] to 0 to specify that we do not have any message of the
@ -172,24 +189,26 @@ class ConversationsHelper {
"last_message_id": lastMessageID.toString()
}).exec();
if (response.code != 200) return null;
return await _parseConversationMessageFromServer(conversationID, response);
}
// Parse the response of the server
ConversationMessagesList list = ConversationMessagesList();
response.getArray().forEach((f) {
list.add(ConversationMessage(
id: f["ID"],
conversationID: conversationID,
userID: f["ID_user"],
timeInsert: f["time_insert"],
message: f["message"],
imageURL: f["image_path"]));
});
/// Get older messages for a given conversation from an online source
Future<ConversationMessagesList> getOlderMessages({
@required int conversationID,
@required int oldestMessagesID,
int limit = 15,
}) async {
// Perform the request online
final response = await APIRequest(
uri: "conversations/get_older_messages",
needLogin: true,
args: {
"conversationID": conversationID.toString(),
"oldest_message_id": oldestMessagesID.toString(),
"limit": limit.toString()
}).exec();
// Save messages in the cache
_conversationMessagesDatabaseHelper.insertOrUpdateAll(list);
return list;
return await _parseConversationMessageFromServer(conversationID, response);
}
/// Get new messages for a given conversation
@ -237,4 +256,19 @@ class ConversationsHelper {
return SendMessageResult.SUCCESS;
}
/// Turn an API response into a ConversationMessage object
ConversationMessage _apiToConversationMessage({
@required int conversationID,
@required Map<String, dynamic> map,
}) {
return ConversationMessage(
id: map["ID"],
conversationID: conversationID,
userID: map["ID_user"],
timeInsert: map["time_insert"],
message: map["message"],
imageURL: map["image_path"],
);
}
}