config_repository.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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/utils/async_util.dart';
  4. import 'package:electronic_assistant/utils/http_handler.dart';
  5. import '../../utils/app_info_util.dart';
  6. import '../api/request/config_request.dart';
  7. import '../api/response/config_response.dart';
  8. import '../api/response/example_info_response.dart';
  9. import '../bean/config_bean.dart';
  10. import '../bean/version_update_bean.dart';
  11. class ConfigRepository {
  12. ConfigRepository._();
  13. ExampleInfoResponse? _exampleInfo;
  14. Future<ExampleInfoResponse> getExampleInfo() async {
  15. if (_exampleInfo != null) {
  16. return _exampleInfo!;
  17. }
  18. return await AsyncUtil.retryWhen(() => _requestExampleInfo(), 3,
  19. const Duration(seconds: 1), (error) => true);
  20. }
  21. Future<ExampleInfoResponse> _requestExampleInfo() {
  22. return atmobApi
  23. .exampleInfo(AppBaseRequest())
  24. .then(HttpHandler.handle(true))
  25. .then((response) {
  26. _exampleInfo = response;
  27. return response;
  28. });
  29. }
  30. Future<ConfigResponse> configs(List<String> confCodes) {
  31. return atmobApi
  32. .configs(ConfigRequest(confCodes))
  33. .then(HttpHandler.handle(true));
  34. }
  35. Future<VersionUpdateBean?> getAppVersion() async {
  36. ConfigResponse configResponse = await configs(['app_update']);
  37. if (configResponse.list.isEmpty) {
  38. return null;
  39. }
  40. ConfigBean configBean = configResponse.list.first;
  41. if (configBean.value is! Map<String, dynamic>) {
  42. return null;
  43. }
  44. VersionUpdateBean bean = VersionUpdateBean.fromJson(configBean.value);
  45. String? localVersionName = appInfoUtil.appVersionName;
  46. if (bean.version.isEmpty || localVersionName == null) {
  47. return null;
  48. }
  49. if (needsUpdate(bean.version, localVersionName)) {
  50. return bean;
  51. }
  52. return null;
  53. }
  54. bool needsUpdate(String serverVersion, String localVersion) {
  55. List<int> serverParts =
  56. serverVersion.replaceFirst('v', '').split('.').map(int.parse).toList();
  57. List<int> localParts = localVersion.split('.').map(int.parse).toList();
  58. for (int i = 0; i < serverParts.length; i++) {
  59. if (serverParts[i] > localParts[i]) {
  60. return true;
  61. } else if (serverParts[i] < localParts[i]) {
  62. return false;
  63. }
  64. }
  65. return false;
  66. }
  67. }
  68. final configRepository = ConfigRepository._();