Sync update: 2026-05-18 16:14:25
This commit is contained in:
@@ -3,6 +3,7 @@ import 'dart:convert';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../services/whatsapp_service.dart';
|
||||
import '../services/contacts_service.dart';
|
||||
import '../models/conversation_model.dart';
|
||||
|
||||
class ConversationsController extends GetxController {
|
||||
@@ -49,6 +50,17 @@ class ConversationsController extends GetxController {
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
// Helper to resolve contact names from the local address book
|
||||
ConversationModel _resolveContactNames(ConversationModel c) {
|
||||
if (c.isGroup) return c; // Skip group chats
|
||||
|
||||
final parts = c.id.split('@');
|
||||
final phoneNumber = parts[0];
|
||||
|
||||
final matchedName = Get.find<ContactsService>().getContactName(phoneNumber, c.name);
|
||||
return c.copyWith(name: matchedName);
|
||||
}
|
||||
|
||||
// ── Local Caching ────────────────────────────────────────────────────────
|
||||
Future<void> _loadCachedConversations() async {
|
||||
try {
|
||||
@@ -56,7 +68,7 @@ class ConversationsController extends GetxController {
|
||||
final cached = prefs.getString('cached_conversations');
|
||||
if (cached != null) {
|
||||
final List<dynamic> decoded = jsonDecode(cached);
|
||||
conversations.assignAll(decoded.map((c) => ConversationModel.fromJson(c as Map<String, dynamic>)));
|
||||
conversations.assignAll(decoded.map((c) => _resolveContactNames(ConversationModel.fromJson(c as Map<String, dynamic>))));
|
||||
print('[CACHE] Loaded ${conversations.length} conversations instantly.');
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -85,7 +97,7 @@ class ConversationsController extends GetxController {
|
||||
final res = await _svc.getConversations();
|
||||
if (res['type'] == 'conversations') {
|
||||
final List<dynamic> data = res['data'] ?? [];
|
||||
conversations.assignAll(data.map((c) => ConversationModel.fromJson(c as Map<String, dynamic>)));
|
||||
conversations.assignAll(data.map((c) => _resolveContactNames(ConversationModel.fromJson(c as Map<String, dynamic>))));
|
||||
_saveConversationsToCache(data);
|
||||
} else {
|
||||
errorMessage.value = res['message'] ?? 'Failed to load conversations';
|
||||
@@ -189,7 +201,7 @@ class ConversationsController extends GetxController {
|
||||
final res = await _svc.getConversations();
|
||||
if (res['type'] == 'conversations') {
|
||||
final List<dynamic> data = res['data'] ?? [];
|
||||
conversations.assignAll(data.map((c) => ConversationModel.fromJson(c as Map<String, dynamic>)));
|
||||
conversations.assignAll(data.map((c) => _resolveContactNames(ConversationModel.fromJson(c as Map<String, dynamic>))));
|
||||
_saveConversationsToCache(data);
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
Reference in New Issue
Block a user