import 'dart:io';
|
|
|
|
import '/database/models/conversations.dart';
|
|
import '/database/models/image_message.dart';
|
|
import '/database/models/messages.dart';
|
|
import '/database/models/text_messages.dart';
|
|
import '/utils/storage/database.dart';
|
|
|
|
class MessagesRepository {
|
|
static Future<List<Message>> getMessagesForThread(Conversation conversation) async {
|
|
final db = await getDatabaseConnection();
|
|
|
|
final List<Map<String, dynamic>> maps = await db.rawQuery(
|
|
'''
|
|
SELECT * FROM messages WHERE association_key IN (
|
|
SELECT association_key FROM conversation_users WHERE conversation_id = ?
|
|
)
|
|
ORDER BY created_at DESC;
|
|
''',
|
|
[conversation.id]
|
|
);
|
|
|
|
return List.generate(maps.length, (i) {
|
|
if (maps[i]['data'] == null) {
|
|
|
|
File file = File(maps[i]['file']);
|
|
|
|
return ImageMessage(
|
|
id: maps[i]['id'],
|
|
symmetricKey: maps[i]['symmetric_key'],
|
|
userSymmetricKey: maps[i]['user_symmetric_key'],
|
|
file: file,
|
|
senderId: maps[i]['sender_id'],
|
|
senderUsername: maps[i]['sender_username'],
|
|
associationKey: maps[i]['association_key'],
|
|
createdAt: maps[i]['created_at'],
|
|
failedToSend: maps[i]['failed_to_send'] == 1,
|
|
);
|
|
}
|
|
|
|
return TextMessage(
|
|
id: maps[i]['id'],
|
|
symmetricKey: maps[i]['symmetric_key'],
|
|
userSymmetricKey: maps[i]['user_symmetric_key'],
|
|
text: maps[i]['data'],
|
|
senderId: maps[i]['sender_id'],
|
|
senderUsername: maps[i]['sender_username'],
|
|
associationKey: maps[i]['association_key'],
|
|
createdAt: maps[i]['created_at'],
|
|
failedToSend: maps[i]['failed_to_send'] == 1,
|
|
);
|
|
});
|
|
}
|
|
}
|