system_setting.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'dart:convert';
  2. import 'package:fis_jsonrpc/encrpyt.dart';
  3. import 'package:fis_jsonrpc/rpc.dart';
  4. import 'package:vitalapp/architecture/storage/text_storage.dart';
  5. import 'package:vitalapp/managers/interfaces/system_setting.dart';
  6. import 'package:vitalapp/rpc.dart';
  7. import 'package:vitalapp/store/store.dart';
  8. import 'package:fis_common/logger/logger.dart';
  9. class SystemSettingManager implements ISystemSettingManager {
  10. final _storage =
  11. TextStorage(fileName: "system_settings.cfg", directory: "settings");
  12. SyncSettingsDTO? _cache;
  13. @override
  14. Future<SyncSettingsDTO> getSettings([isRefresh = false]) async {
  15. if (_cache == null || isRefresh) {
  16. await _loadSettings();
  17. _cache ??= SyncSettingsDTO();
  18. _handleSettingsAbout(_cache!);
  19. }
  20. return _cache!;
  21. }
  22. Future<void> _loadSettings() async {
  23. _cache = await _loadSettingsFromStorage();
  24. // TODO: 判断是否在线,再请求rpc
  25. SyncSettingsDTO? remoteSettings = await _getSettingsFromRpc();
  26. if (remoteSettings == null) {
  27. return;
  28. }
  29. _cache = remoteSettings;
  30. final jsonText = jsonEncode(remoteSettings.toJson());
  31. await _storage.save(jsonText);
  32. }
  33. void _handleSettingsAbout(SyncSettingsDTO dto) {
  34. Store.app.enableEncryptSensitiveInfo = dto.encryptSensitiveInfo;
  35. Store.app.homePageUrl = dto.homePageUrl ?? '';
  36. rpc.requestEncryptConfig = JsonRpcEncryptConfig(
  37. enable: dto.enableRequestEncrypt,
  38. encryptMode: dto.requestEncryptMode ?? "",
  39. encryptKey: dto.requestEncryptKey ?? "",
  40. );
  41. rpc.responseEncryptConfig = JsonRpcEncryptConfig(
  42. enable: dto.enableResponseEncrypt,
  43. encryptMode: dto.responseEncryptMode ?? "",
  44. encryptKey: Store.user.token ?? "",
  45. );
  46. }
  47. Future<SyncSettingsDTO?> _getSettingsFromRpc() async {
  48. try {
  49. final request = SyncSettingRequest(token: Store.user.token);
  50. final result = await rpc.systemSetting.syncSettingAsync(request);
  51. return result;
  52. } catch (e) {
  53. logger.e("SystemSettingManager sync settings from rpc error.", e);
  54. return null;
  55. }
  56. }
  57. Future<SyncSettingsDTO?> _loadSettingsFromStorage() async {
  58. try {
  59. final jsonText = await _storage.read();
  60. if (jsonText == null) {
  61. return null;
  62. }
  63. final jsonMap = jsonDecode(jsonText);
  64. final dto = SyncSettingsDTO.fromJson(jsonMap);
  65. return dto;
  66. } catch (e) {
  67. logger.e("SystemSettingManager load settings from storage error.", e);
  68. return null;
  69. }
  70. }
  71. @override
  72. Future<List<String>> getEnableDeviceKeysAsync() async {
  73. try {
  74. final request = GetEnableDeviceKeysRequest(
  75. token: Store.user.token,
  76. organizationCode: Store.user.organizationCode);
  77. final result = await rpc.organization.getEnableDeviceKeysAsync(request);
  78. return result;
  79. } catch (e) {
  80. logger.e("SystemSettingManager getEnableDeviceKeysAsync error.", e);
  81. return [];
  82. }
  83. }
  84. }