diff --git a/Sources/dafl_project_flutter/lib/controller/controller.dart b/Sources/dafl_project_flutter/lib/controller/controller.dart index a5711e2..c6805b7 100644 --- a/Sources/dafl_project_flutter/lib/controller/controller.dart +++ b/Sources/dafl_project_flutter/lib/controller/controller.dart @@ -10,15 +10,32 @@ import '../services/api/api_spotify.dart'; import '../services/database/database_service.dart'; import '../services/position/location.dart'; import 'live_datas.dart'; +import 'package:dafl_project_flutter/model/message.dart'; +import 'package:dafl_project_flutter/services/messaging/message_database.dart'; class Controller { final ApiSpotify _api = ApiSpotify(); late User _currentUser; final DataBaseService _dataBaseService = DataBaseService(); final LiveData _data = LiveData(); + final MessageDatabase _messageAccess = MessageDatabase(); late BuildContext navigatorKey; + + + /// FIREBASE Messaging + void sendMessage(Message message, String idSender, String idReceiver){ + _messageAccess.sendMessage(message, idSender, idReceiver); + } + + + + + + + + initUser() async { await setCurrentMusic(); await setDiscoveries(); diff --git a/Sources/dafl_project_flutter/lib/services/message_database/message_database.dart b/Sources/dafl_project_flutter/lib/services/message_database/message_database.dart deleted file mode 100644 index 3f477d2..0000000 --- a/Sources/dafl_project_flutter/lib/services/message_database/message_database.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:dafl_project_flutter/model/message.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; - - -class MessageDatabase{ - - - void SendMessage(String chatId, Message message) { - var documentReference = FirebaseFirestore.instance - .collection('messages') - .doc(chatId) - .collection(chatId) - .doc(DateTime.now().millisecondsSinceEpoch.toString()); - - FirebaseFirestore.instance.runTransaction((transaction) async { - transaction.set(documentReference,message.toHashMap()); - }); - } - -} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/services/messaging/message_database.dart b/Sources/dafl_project_flutter/lib/services/messaging/message_database.dart new file mode 100644 index 0000000..617673d --- /dev/null +++ b/Sources/dafl_project_flutter/lib/services/messaging/message_database.dart @@ -0,0 +1,29 @@ +import 'package:dafl_project_flutter/model/message.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; + + +class MessageDatabase { + 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) + .collection(chatId) + .doc(DateTime + .now() + .millisecondsSinceEpoch + .toString()); + + FirebaseFirestore.instance.runTransaction((transaction) async { + transaction.set(documentReference, message.toHashMap()); + }); + } +} \ No newline at end of file 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 ef6d849..7f19aa2 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 @@ -15,18 +15,25 @@ class _ConversationPageState extends State { String destinataire = 'test'; List messages = []; bool isNull = true; + String receiver = 'test'; 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.getIdDafl().toString(), content))); + messages.add(messageWidget(messageToSend)); }); } Widget messageWidget(Message message) { - if (message.senderId != MyApp.controller.getIdDafl().toString()) { + if (message.idSender != MyApp.controller.getIdDafl()) { return Align( alignment: Alignment.centerLeft, child: Container( @@ -204,7 +211,7 @@ class _ConversationPageState extends State { style: const TextStyle(color: Colors.white), decoration: InputDecoration( hintStyle: - TextStyle(color: Colors.white.withOpacity(0.7)), + TextStyle(color: Colors.white.withOpacity(0.7)), border: InputBorder.none, hintText: "Votre message...", ), @@ -218,38 +225,38 @@ class _ConversationPageState extends State { onTap: isNull ? null : () { - sendMessage(messageTextField.text); - if (listScrollController.hasClients) { - final position = - listScrollController.position.maxScrollExtent; - listScrollController.jumpTo(position); - } - messageTextField.clear(); - }, + sendMessage(messageTextField.text, MyApp.controller.getIdDafl(), receiver); + if (listScrollController.hasClients) { + final position = + listScrollController.position.maxScrollExtent; + listScrollController.jumpTo(position); + } + messageTextField.clear(); + }, child: isNull == true ? const SizedBox( - height: 1, - width: 1, - ) + height: 1, + width: 1, + ) : Container( - width: 40, - height: 40, - margin: const EdgeInsets.fromLTRB(0, 0, 0, 0), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - gradient: const LinearGradient( - colors: [Color(0xff8e24a1), Color(0xff8163ff)], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - )), - child: Transform.rotate( - angle: -300, - child: const Icon( - Icons.arrow_back, - size: 26, - color: Colors.white, - ), + width: 40, + height: 40, + margin: const EdgeInsets.fromLTRB(0, 0, 0, 0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + gradient: const LinearGradient( + colors: [Color(0xff8e24a1), Color(0xff8163ff)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, )), + child: Transform.rotate( + angle: -300, + child: const Icon( + Icons.arrow_back, + size: 26, + color: Colors.white, + ), + )), ) ], ), @@ -261,7 +268,7 @@ class _ConversationPageState extends State { final messageTextField = TextEditingController(); return SingleChildScrollView( padding: - EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), + EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), child: Container( height: 500, width: double.infinity, @@ -463,4 +470,4 @@ class _DropdownButtonReasonState extends State { }).toList(), ); } -} +} \ No newline at end of file