diff --git a/Sources/dafl_project_flutter/lib/controller/controller.dart b/Sources/dafl_project_flutter/lib/controller/controller.dart index a0da747..a3108c8 100644 --- a/Sources/dafl_project_flutter/lib/controller/controller.dart +++ b/Sources/dafl_project_flutter/lib/controller/controller.dart @@ -1,4 +1,6 @@ import 'dart:convert'; +import 'package:dafl_project_flutter/model/message.dart'; +import 'package:dafl_project_flutter/services/message_database.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart' as http; import '../persistence/database_loader.dart'; @@ -13,6 +15,7 @@ class Controller { static Saver saver = DatabaseSaver(); static Loader loader = DatabaseLoader(); static final Searcher _searcher = DatabaseSearcher(); + final MessageDatabase _messageAccess = MessageDatabase(); late BuildContext navigatorKey; @@ -22,6 +25,10 @@ class Controller { currentUser = User('', ''); //TODO : remove this line } + void sendMessage(Message message, String idSender, String idReceiver){ + _messageAccess.sendMessage(message, idSender, idReceiver); + } + void save(User userToSave) { saver.save(userToSave); } diff --git a/Sources/dafl_project_flutter/lib/services/message_database.dart b/Sources/dafl_project_flutter/lib/services/message_database.dart index 3f477d2..1cc47d2 100644 --- a/Sources/dafl_project_flutter/lib/services/message_database.dart +++ b/Sources/dafl_project_flutter/lib/services/message_database.dart @@ -5,7 +5,17 @@ import 'package:cloud_firestore/cloud_firestore.dart'; class MessageDatabase{ - void SendMessage(String chatId, Message message) { + String _getChatId(String idSender, String idReceiver){ + if (idSender.hashCode <= idReceiver.hashCode) + return '$idSender-${idReceiver}'; + else + return '${idReceiver}-$idSender'; + + } + + void sendMessage(Message message, String idSender, String idReceiver) { + String chatId = _getChatId(idSender, idReceiver); + var documentReference = FirebaseFirestore.instance .collection('messages') .doc(chatId) @@ -13,7 +23,7 @@ class MessageDatabase{ .doc(DateTime.now().millisecondsSinceEpoch.toString()); FirebaseFirestore.instance.runTransaction((transaction) async { - transaction.set(documentReference,message.toHashMap()); + transaction.set(documentReference, message.toHashMap()); }); } diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart b/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart index 6667407..009145f 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart @@ -12,21 +12,28 @@ class ConversationPage extends StatefulWidget { } class _ConversationPageState extends State { - User destinataire = User("test1", '1234'); + User receiver = User("test1", '1234'); List messages = []; bool isNull = true; final messageTextField = TextEditingController(); - void sendMessage(String content) { + + void sendMessage(String content, String idSender, String idReceiver) { + Message messageToSend = Message( + idSender: idSender, + idReceiver: idReceiver, + content: content); + + MyApp.controller.sendMessage(messageToSend, idSender, idReceiver); + setState(() { - messages - .add(messageWidget(Message(MyApp.controller.currentUser, content))); + messages.add(messageWidget(messageToSend)); }); } Widget messageWidget(Message message) { - if (message.sender != MyApp.controller.currentUser) { + if (message.idSender != MyApp.controller.currentUser.usernameDafl){ return Align( alignment: Alignment.centerLeft, child: Container( @@ -218,7 +225,7 @@ class _ConversationPageState extends State { onTap: isNull ? null : () { - sendMessage(messageTextField.text); + sendMessage(messageTextField.text, MyApp.controller.currentUser.usernameDafl, receiver.usernameDafl); if (listScrollController.hasClients) { final position = listScrollController.position.maxScrollExtent; @@ -375,7 +382,7 @@ class _ConversationPageState extends State { child: ElevatedButton( onPressed: () { MyApp.controller.sendEmail(MyApp.controller.currentUser, - destinataire, currentValue, messageTextField.text); + receiver, currentValue, messageTextField.text); Navigator.pop(context); }, style: ElevatedButton.styleFrom( diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart index 7d1ffba..cd82f80 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:page_transition/page_transition.dart'; - import 'p_conversation.dart'; class MessagesWidget extends StatefulWidget {