Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.7 KiB

  1. import 'dart:io';
  2. import '/database/models/conversations.dart';
  3. import '/database/models/image_message.dart';
  4. import '/database/models/messages.dart';
  5. import '/database/models/text_messages.dart';
  6. import '/utils/storage/database.dart';
  7. class MessagesRepository {
  8. static Future<List<Message>> getMessagesForThread(Conversation conversation) async {
  9. final db = await getDatabaseConnection();
  10. final List<Map<String, dynamic>> maps = await db.rawQuery(
  11. '''
  12. SELECT * FROM messages WHERE association_key IN (
  13. SELECT association_key FROM conversation_users WHERE conversation_id = ?
  14. )
  15. ORDER BY created_at DESC;
  16. ''',
  17. [conversation.id]
  18. );
  19. return List.generate(maps.length, (i) {
  20. if (maps[i]['data'] == null) {
  21. File file = File(maps[i]['file']);
  22. return ImageMessage(
  23. id: maps[i]['id'],
  24. symmetricKey: maps[i]['symmetric_key'],
  25. userSymmetricKey: maps[i]['user_symmetric_key'],
  26. file: file,
  27. senderId: maps[i]['sender_id'],
  28. senderUsername: maps[i]['sender_username'],
  29. associationKey: maps[i]['association_key'],
  30. createdAt: maps[i]['created_at'],
  31. failedToSend: maps[i]['failed_to_send'] == 1,
  32. );
  33. }
  34. return TextMessage(
  35. id: maps[i]['id'],
  36. symmetricKey: maps[i]['symmetric_key'],
  37. userSymmetricKey: maps[i]['user_symmetric_key'],
  38. text: maps[i]['data'],
  39. senderId: maps[i]['sender_id'],
  40. senderUsername: maps[i]['sender_username'],
  41. associationKey: maps[i]['association_key'],
  42. createdAt: maps[i]['created_at'],
  43. failedToSend: maps[i]['failed_to_send'] == 1,
  44. );
  45. });
  46. }
  47. }