2024-05-22 20:48:44 +00:00
|
|
|
import 'dart:async';
|
2024-05-28 21:25:51 +00:00
|
|
|
import 'dart:convert';
|
|
|
|
|
import 'dart:developer';
|
2024-05-22 20:48:44 +00:00
|
|
|
|
|
|
|
|
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
|
|
|
|
|
import 'package:rxdart/rxdart.dart';
|
2024-05-28 21:25:51 +00:00
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
|
|
|
|
|
|
import '../../main.dart';
|
2024-05-22 20:48:44 +00:00
|
|
|
|
|
|
|
|
class PreviewPackHolder {
|
|
|
|
|
final StreamController<PreviewPackState?> _streamController =
|
|
|
|
|
StreamController.broadcast();
|
|
|
|
|
PreviewPackState? _state;
|
|
|
|
|
|
|
|
|
|
PreviewPackHolder();
|
|
|
|
|
|
2024-05-28 21:25:51 +00:00
|
|
|
Future<void> init() async {
|
|
|
|
|
if (_state == null) {
|
|
|
|
|
await loadFromCache();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> loadFromCache() async {
|
|
|
|
|
final sp = globalSharedPreferences;
|
|
|
|
|
final previewPacksStrings = sp.getStringList('preview_packs');
|
|
|
|
|
if (previewPacksStrings == null || previewPacksStrings.isEmpty) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
final List<CardPackPreviewDto> previewPacks = [];
|
|
|
|
|
previewPacksStrings.forEach((string) {
|
|
|
|
|
try {
|
|
|
|
|
final pack = CardPackPreviewDto.fromJson(
|
|
|
|
|
jsonDecode(string) as Map<String, Object?>,
|
|
|
|
|
);
|
|
|
|
|
previewPacks.add(pack);
|
|
|
|
|
} catch (e, s) {
|
|
|
|
|
log('Cant load preview pack', error: e, stackTrace: s);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
setPreviewPacks(previewPacks);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> savePreviewPacks() async {
|
|
|
|
|
final packs = state?.previewPacks ?? [];
|
|
|
|
|
final stringsList = <String>[];
|
|
|
|
|
packs.forEach((pack) {
|
|
|
|
|
try {
|
|
|
|
|
final string = jsonEncode(pack);
|
|
|
|
|
stringsList.add(string);
|
|
|
|
|
} catch (e, s) {
|
|
|
|
|
log('Cant load preview pack', error: e, stackTrace: s);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
final sp = globalSharedPreferences;
|
|
|
|
|
sp.setStringList('preview_packs', stringsList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void setPreviewPacks(List<CardPackPreviewDto> packs, {bool save = false}) {
|
2024-05-22 20:48:44 +00:00
|
|
|
_state = PreviewPackState(packs);
|
2024-05-28 21:25:51 +00:00
|
|
|
if (save) {
|
|
|
|
|
savePreviewPacks();
|
|
|
|
|
}
|
2024-05-22 20:48:44 +00:00
|
|
|
_streamController.add(_state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void clear() {
|
|
|
|
|
_state = null;
|
|
|
|
|
_streamController.add(_state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PreviewPackState? get state => _state;
|
|
|
|
|
|
|
|
|
|
Stream<PreviewPackState?> get asStream =>
|
|
|
|
|
_streamController.stream.startWith(_state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class PreviewPackState {
|
|
|
|
|
final List<CardPackPreviewDto> previewPacks;
|
|
|
|
|
|
|
|
|
|
PreviewPackState(this.previewPacks);
|
|
|
|
|
}
|