import 'package:get/get.dart'; import 'package:isar/isar.dart'; import 'package:trackoffical_app/model/game_map.dart'; import 'package:trackoffical_app/service/service.dart'; import 'package:trackoffical_app/utils.dart'; import '../model/m_net_image.dart'; import '../logger.dart'; import '../model/game_state.dart'; import '../model/cache_image.dart'; import 'package:path_provider/path_provider.dart'; class DatabaseService extends IService{ static DatabaseService get to => Get.find(); late Isar isar; @override Future init() async { final dir = await getApplicationDocumentsDirectory(); isar = await Isar.open([ GameStateDataSchema, CacheImageSchema, ], directory: dir.path ); } Future getExistGameData() async{ return await isar.gameStateDatas.get(0); } Future saveGameState(GameState state) async{ try{ await isar.writeTxn(() async { if (state.pbGameSave.stopAt.nanos == 0 && state.pbGameSave.stopAt.seconds == 0){ // 已结束 final data = state.data; await isar.gameStateDatas.put(data); }else{ await isar.gameStateDatas.delete(0); } }); }catch(e){ warn('保存进度失败', e); } } Future getImage(String md5) async{ return await isar.cacheImages.get(CacheImage.fastHash(md5)); } Future saveImage(MNetImage image) async{ try{ final data = CacheImage() ..md5=image.md5.toHexString() ..image = image.data!.toList() ..timestamp=image.timestamp ..ext=image.ext ..nonce=image.nonce ; await isar.writeTxn(() async { await isar.cacheImages.put(data); }); }catch(e){ warn('保存缓存失败', e); } } Future saveGameMap(GameMap gameMap) async{ try{ final data = CacheImage() ..md5=gameMap.md5.toHexString() ..image = gameMap.data!.toList() ; await isar.writeTxn(() async { await isar.cacheImages.put(data); }); }catch(e){ warn('保存缓存失败', e); } } }