mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-07-03 15:13:29 +00:00
Created conversation route
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
import 'package:comunic/helpers/database/conversations_database_helper.dart';
|
||||
import 'package:comunic/helpers/users_helper.dart';
|
||||
import 'package:comunic/lists/conversations_list.dart';
|
||||
import 'package:comunic/lists/users_list.dart';
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
@ -22,15 +23,7 @@ class ConversationsHelper {
|
||||
|
||||
try {
|
||||
ConversationsList list = ConversationsList();
|
||||
response.getArray().forEach((f) => list.add(Conversation(
|
||||
id: f["ID"],
|
||||
ownerID: f["ID_owner"],
|
||||
lastActive: f["last_active"],
|
||||
name: f["name"] == false ? null : f["name"],
|
||||
following: f["following"] == 1,
|
||||
sawLastMessage: f["saw_last_message"] == 1,
|
||||
members: f["members"].map<int>((f) => int.parse(f)).toList(),
|
||||
)));
|
||||
response.getArray().forEach((f) => list.add(_apiToConversation(f)));
|
||||
|
||||
// Update the database
|
||||
await _conversationsDatabaseHelper.clearTable();
|
||||
@ -50,8 +43,38 @@ class ConversationsHelper {
|
||||
return list;
|
||||
}
|
||||
|
||||
/// Get the name of a [conversation]. This requires information about the
|
||||
/// users of this conversation
|
||||
/// Get information about a single conversation specified by its [id]
|
||||
Future<Conversation> _downloadSingle(int id) async {
|
||||
try {
|
||||
final response = await APIRequest(
|
||||
uri: "conversations/getInfoOne",
|
||||
needLogin: true,
|
||||
args: {"conversationID": id.toString()}).exec();
|
||||
|
||||
if (response.code != 200) return null;
|
||||
|
||||
final conversation = _apiToConversation(response.getObject());
|
||||
_conversationsDatabaseHelper.insertOrUpdate(conversation);
|
||||
return conversation;
|
||||
} on Exception catch (e) {
|
||||
print(e.toString());
|
||||
print("Could not get information about a single conversation !");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Get information about a single conversation. If [force] is set to false,
|
||||
/// cached version of the conversation will be used, else it will always get
|
||||
/// the information from the server
|
||||
Future<Conversation> getSingle(int id, {bool force = false}) async {
|
||||
if(force || ! await _conversationsDatabaseHelper.has(id))
|
||||
return await _downloadSingle(id);
|
||||
else
|
||||
return _conversationsDatabaseHelper.get(id);
|
||||
}
|
||||
|
||||
/// Get the name of a [conversation]. This requires information
|
||||
/// about the users of this conversation
|
||||
static String getConversationName(
|
||||
Conversation conversation, UsersList users) {
|
||||
if (conversation.has_name) return conversation.name;
|
||||
@ -69,4 +92,35 @@ class ConversationsHelper {
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
/// Asynchronously get the name fo the conversation
|
||||
///
|
||||
/// Unlike the synchronous method, this method does not need information
|
||||
/// about the members of the conversation
|
||||
///
|
||||
/// Returns null in case of failure
|
||||
static Future<String> getConversationNameAsync(
|
||||
Conversation conversation) async {
|
||||
if (conversation.has_name) return conversation.name;
|
||||
|
||||
//Get information about the members of the conversation
|
||||
final members = await UsersHelper().getUsersInfo(conversation.members);
|
||||
|
||||
if (members == null) return null;
|
||||
|
||||
return ConversationsHelper.getConversationName(conversation, members);
|
||||
}
|
||||
|
||||
/// Turn an API entry into a [Conversation] object
|
||||
Conversation _apiToConversation(Map<String, dynamic> map){
|
||||
return Conversation(
|
||||
id: map["ID"],
|
||||
ownerID: map["ID_owner"],
|
||||
lastActive: map["last_active"],
|
||||
name: map["name"] == false ? null : map["name"],
|
||||
following: map["following"] == 1,
|
||||
sawLastMessage: map["saw_last_message"] == 1,
|
||||
members: map["members"].map<int>((f) => int.parse(f)).toList(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user