config_repository.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import 'package:electronic_assistant/base/app_base_request.dart';
  2. import 'package:electronic_assistant/data/api/atmob_api.dart';
  3. import 'package:electronic_assistant/data/bean/config_talk_tabs.dart';
  4. import 'package:electronic_assistant/resource/string.gen.dart';
  5. import 'package:electronic_assistant/utils/async_util.dart';
  6. import 'package:electronic_assistant/utils/http_handler.dart';
  7. import 'package:get/get.dart';
  8. import '../../module/talk/controller.dart';
  9. import '../../utils/app_info_util.dart';
  10. import '../api/request/config_request.dart';
  11. import '../api/response/config_response.dart';
  12. import '../api/response/example_info_response.dart';
  13. import '../bean/config_bean.dart';
  14. import '../bean/talk_tabs.dart';
  15. import '../bean/version_update_bean.dart';
  16. class ConfigRepository {
  17. ConfigRepository._();
  18. List<TalkTabs>? _tabs;
  19. ExampleInfoResponse? _exampleInfo;
  20. void refreshTalkTab() {
  21. AsyncUtil.retryWithExponentialBackoff(() => configs(['talk_tab']), 5)
  22. .then((value) {
  23. if (value.list.isNotEmpty) {
  24. ConfigBean configBean = value.list.first;
  25. if (configBean.value is Map<String, dynamic>) {
  26. ConfigTalkTabs talkTabs = ConfigTalkTabs.fromJson(configBean.value);
  27. if (talkTabs.tabs?.isNotEmpty == true) {
  28. _tabs = talkTabs.tabs;
  29. }
  30. }
  31. }
  32. });
  33. }
  34. List<TalkTabs> getTalkTabs() {
  35. if (_tabs != null && _tabs!.isNotEmpty) {
  36. return _tabs!;
  37. }
  38. return [
  39. TalkTabs(StringName.talkTabSummary.tr, TalkBarType.summary, true),
  40. TalkTabs(StringName.talkMindMap.tr, TalkBarType.mindMap, false),
  41. TalkTabs(StringName.talkTabMyTask.tr, TalkBarType.myTask, false),
  42. TalkTabs(StringName.talkTabOriginal.tr, TalkBarType.original, false),
  43. ];
  44. }
  45. Future<ExampleInfoResponse> getExampleInfo() async {
  46. if (_exampleInfo != null) {
  47. return _exampleInfo!;
  48. }
  49. return await AsyncUtil.retry(
  50. () => _requestExampleInfo(), const Duration(seconds: 1),
  51. maxRetry: 3);
  52. }
  53. Future<ExampleInfoResponse> _requestExampleInfo() {
  54. return atmobApi
  55. .exampleInfo(AppBaseRequest())
  56. .then(HttpHandler.handle(true))
  57. .then((response) {
  58. _exampleInfo = response;
  59. return response;
  60. });
  61. }
  62. Future<ConfigResponse> configs(List<String> confCodes) {
  63. return atmobApi
  64. .configs(ConfigRequest(confCodes))
  65. .then(HttpHandler.handle(true));
  66. }
  67. Future<VersionUpdateBean?> getAppVersion() async {
  68. ConfigResponse configResponse = await configs(['app_update']);
  69. if (configResponse.list.isEmpty) {
  70. return null;
  71. }
  72. ConfigBean configBean = configResponse.list.first;
  73. if (configBean.value is! Map<String, dynamic>) {
  74. return null;
  75. }
  76. VersionUpdateBean bean = VersionUpdateBean.fromJson(configBean.value);
  77. String? localVersionName = appInfoUtil.appVersionName;
  78. if (bean.version.isEmpty || localVersionName == null) {
  79. return null;
  80. }
  81. if (needsUpdate(bean.version, localVersionName)) {
  82. return bean;
  83. }
  84. return null;
  85. }
  86. bool needsUpdate(String serverVersion, String localVersion) {
  87. List<int> serverParts =
  88. serverVersion.replaceFirst('v', '').split('.').map(int.parse).toList();
  89. List<int> localParts = localVersion.split('.').map(int.parse).toList();
  90. for (int i = 0; i < serverParts.length; i++) {
  91. if (serverParts[i] > localParts[i]) {
  92. return true;
  93. } else if (serverParts[i] < localParts[i]) {
  94. return false;
  95. }
  96. }
  97. return false;
  98. }
  99. }
  100. final configRepository = ConfigRepository._();