database.dart 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import 'package:get/get.dart';
  2. import 'package:isar/isar.dart';
  3. import 'package:trackoffical_app/model/game_map.dart';
  4. import 'package:trackoffical_app/service/service.dart';
  5. import 'package:trackoffical_app/utils.dart';
  6. import '../model/m_net_image.dart';
  7. import '../logger.dart';
  8. // import '../model/game_state.dart';
  9. import '../model/cache_image.dart';
  10. import 'package:path_provider/path_provider.dart';
  11. class DatabaseService extends IService{
  12. static DatabaseService get to => Get.find();
  13. late Isar isar;
  14. @override
  15. Future<void> init() async {
  16. final dir = await getApplicationDocumentsDirectory();
  17. isar = await Isar.open([
  18. // GameStateDataSchema,
  19. CacheImageSchema,
  20. ],
  21. directory: dir.path
  22. );
  23. }
  24. /*
  25. Future<GameStateData?> getExistGameData() async{
  26. return await isar.gameStateDatas.get(0);
  27. }
  28. Future<void> saveGameState(GameState state) async{
  29. try{
  30. await isar.writeTxn(() async {
  31. if (state.pbGameSave.stopAt.nanos == 0
  32. && state.pbGameSave.stopAt.seconds == 0){
  33. // 已结束
  34. final data = state.data;
  35. await isar.gameStateDatas.put(data);
  36. }else{
  37. await isar.gameStateDatas.delete(0);
  38. }
  39. });
  40. }catch(e){
  41. warn('保存进度失败', e);
  42. }
  43. }
  44. */
  45. Future<CacheImage?> getImage(String md5) async{
  46. return await isar.cacheImages.get(CacheImage.fastHash(md5));
  47. }
  48. Future<void> saveImage(MNetImage image) async{
  49. try{
  50. final data = CacheImage()
  51. ..md5=image.md5.toHexString()
  52. ..image = image.data!.toList()
  53. ..timestamp=image.timestamp
  54. ..ext=image.ext
  55. ..nonce=image.nonce
  56. ;
  57. await isar.writeTxn(() async {
  58. await isar.cacheImages.put(data);
  59. });
  60. }catch(e){
  61. warn('保存缓存失败', e);
  62. }
  63. }
  64. Future<void> saveGameMap(GameMap gameMap) async{
  65. try{
  66. final data = CacheImage()
  67. ..md5=gameMap.md5.toHexString()
  68. ..image = gameMap.data!.toList()
  69. ;
  70. await isar.writeTxn(() async {
  71. await isar.cacheImages.put(data);
  72. });
  73. }catch(e){
  74. warn('保存缓存失败', e);
  75. }
  76. }
  77. }