Files
Krezus/lib/repositories/json/json_repository.dart
2024-03-03 17:51:47 +01:00

45 lines
1.2 KiB
Dart

import 'dart:async';
import 'dart:convert';
import 'package:krezus/clients/storage/json_storage_client.dart';
import 'package:krezus/repositories/json/models/json.dart';
class JsonRepository {
String accountFile = 'krezus_main_account.json';
final JsonStorageClient _storageClient;
Map<String, Timer> saveTimerMap = {};
JsonRepository({
required storageClient,
}) : _storageClient = storageClient;
void saveJson(Json json) {
Timer? saveTimer = saveTimerMap[json.getJsonFileName()];
if (saveTimer != null) {
saveTimer.cancel();
}
saveTimer = Timer(const Duration(milliseconds: 500), () {
saveTimerMap.remove(json.getJsonFileName());
_storageClient.save(json.getJsonFileName(), jsonEncode(json.toJson()));
});
}
Future<T> loadJson<T extends Json>(Json json, JsonFactory<T> jsonFactory) async {
String jsonString = await _storageClient.load(json.getJsonFileName());
if (jsonString.isEmpty) {
return jsonFactory.fromJson({});
} else {
return jsonFactory.fromJson(jsonDecode(jsonString));
}
}
deleteJson(Json json) async {
await _storageClient.delete(json.getJsonFileName());
}
}