mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-03 19:54:12 +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