mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
formats all dart files using `dart format .` from the root project dir this makes the code style repeatable by new contributors and makes PR review easier
74 lines
2.4 KiB
Dart
74 lines
2.4 KiB
Dart
import 'dart:convert';
|
|
import 'dart:typed_data';
|
|
|
|
import '../models/contact.dart';
|
|
import 'prefs_manager.dart';
|
|
|
|
class ContactStore {
|
|
static const String _key = 'contacts';
|
|
|
|
Future<List<Contact>> loadContacts() async {
|
|
final prefs = PrefsManager.instance;
|
|
final jsonStr = prefs.getString(_key);
|
|
if (jsonStr == null) return [];
|
|
|
|
try {
|
|
final jsonList = jsonDecode(jsonStr) as List<dynamic>;
|
|
return jsonList
|
|
.map((entry) => _fromJson(entry as Map<String, dynamic>))
|
|
.toList();
|
|
} catch (_) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
Future<void> saveContacts(List<Contact> contacts) async {
|
|
final prefs = PrefsManager.instance;
|
|
final jsonList = contacts.map(_toJson).toList();
|
|
await prefs.setString(_key, jsonEncode(jsonList));
|
|
}
|
|
|
|
Map<String, dynamic> _toJson(Contact contact) {
|
|
return {
|
|
'publicKey': base64Encode(contact.publicKey),
|
|
'name': contact.name,
|
|
'type': contact.type,
|
|
'pathLength': contact.pathLength,
|
|
'path': base64Encode(contact.path),
|
|
'pathOverride': contact.pathOverride,
|
|
'pathOverrideBytes': contact.pathOverrideBytes != null
|
|
? base64Encode(contact.pathOverrideBytes!)
|
|
: null,
|
|
'latitude': contact.latitude,
|
|
'longitude': contact.longitude,
|
|
'lastSeen': contact.lastSeen.millisecondsSinceEpoch,
|
|
'lastMessageAt': contact.lastMessageAt.millisecondsSinceEpoch,
|
|
};
|
|
}
|
|
|
|
Contact _fromJson(Map<String, dynamic> json) {
|
|
final lastSeenMs = json['lastSeen'] as int? ?? 0;
|
|
final lastMessageMs = json['lastMessageAt'] as int?;
|
|
return Contact(
|
|
publicKey: Uint8List.fromList(base64Decode(json['publicKey'] as String)),
|
|
name: json['name'] as String? ?? 'Unknown',
|
|
type: json['type'] as int? ?? 0,
|
|
pathLength: json['pathLength'] as int? ?? -1,
|
|
path: json['path'] != null
|
|
? Uint8List.fromList(base64Decode(json['path'] as String))
|
|
: Uint8List(0),
|
|
pathOverride: json['pathOverride'] as int?,
|
|
pathOverrideBytes: json['pathOverrideBytes'] != null
|
|
? Uint8List.fromList(
|
|
base64Decode(json['pathOverrideBytes'] as String),
|
|
)
|
|
: null,
|
|
latitude: (json['latitude'] as num?)?.toDouble(),
|
|
longitude: (json['longitude'] as num?)?.toDouble(),
|
|
lastSeen: DateTime.fromMillisecondsSinceEpoch(lastSeenMs),
|
|
lastMessageAt: DateTime.fromMillisecondsSinceEpoch(
|
|
lastMessageMs ?? lastSeenMs,
|
|
),
|
|
);
|
|
}
|
|
}
|