Sync update: 2026-05-18 16:14:25

This commit is contained in:
Hamza-Ayed
2026-05-18 16:14:25 +03:00
parent 7b6e4b3111
commit 905819a1d5
9 changed files with 388 additions and 60 deletions

View File

@@ -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 (_) {}