@@ -2,51 +2,73 @@ import 'dart:convert';
2
2
import 'dart:developer' ;
3
3
4
4
import 'package:http/http.dart' ;
5
+ import 'package:package_info/package_info.dart' ;
5
6
import 'package:preferences/preferences.dart' ;
6
7
7
8
import 'package:covid19cuba/src/models/models.dart' ;
8
9
import 'package:covid19cuba/src/utils/utils.dart' ;
9
10
10
- const urlCubaDataCU = 'https://www. cusobu.nat.cu/covid/data/covid19-cuba .json' ;
11
+ const urlCubaDataCU = 'https://cusobu.nat.cu/covid/api/v1/all .json' ;
11
12
const urlCubaDataIO =
12
- 'https://covid19cubadata.github.io/data/covid19-cuba .json' ;
13
+ 'https://covid19cuba.github.io/ covid19cubadata.github.io/api/v1/all .json' ;
13
14
14
15
Future <DataModel > getCubaData () async {
15
- try {
16
- return await getCubaDataFrom (urlCubaDataCU);
17
- } catch (e) {
18
- log (e.toString ());
19
- return await getCubaDataFrom (urlCubaDataIO);
16
+ var mode = PrefService .getInt (Constants .prefConnectionMode) ??
17
+ Constants .ConnectionModeMerge ;
18
+ switch (mode) {
19
+ case Constants .ConnectionModeIntranet :
20
+ return await getCubaDataFrom (urlCubaDataCU);
21
+ case Constants .ConnectionModeInternet :
22
+ return await getCubaDataFrom (urlCubaDataIO);
23
+ case Constants .ConnectionModeMerge :
24
+ default :
25
+ try {
26
+ return await getCubaDataFrom (urlCubaDataCU);
27
+ } catch (e) {
28
+ log (e.toString ());
29
+ return await getCubaDataFrom (urlCubaDataIO);
30
+ }
20
31
}
21
32
}
22
33
23
34
Future <DataModel > getCubaDataFrom (String url) async {
24
- var resp = await get (url, headers: {'Accept-Encoding' : 'gzip, deflate, br' });
35
+ var resp = await get (url, headers: {
36
+ 'Accept-Encoding' : 'gzip, deflate, br' ,
37
+ });
25
38
if (resp.statusCode == 404 ) {
26
39
throw InvalidSourceException ('Source is invalid' );
27
40
} else if (resp.statusCode != 200 ) {
28
41
throw BadRequestException ('Bad request' );
29
42
}
30
43
DataModel result;
31
44
try {
32
- result = DataModel .fromJson (jsonDecode (resp.body));
45
+ var json = jsonDecode (utf8.decode (resp.bodyBytes));
46
+ result = DataModel .fromJson (json);
33
47
} catch (e) {
34
48
log (e.toString ());
35
49
throw ParseException ('Parse error' );
36
50
}
37
- try {
51
+ try {
38
52
int time = (DateTime .now ().millisecondsSinceEpoch / 1000 ).round () - 1 ;
39
- PrefService .setInt ('last_data_update' , time);
40
- }
41
- catch (e) {
53
+ PrefService .setInt (Constants .prefLastDataUpdate, time);
54
+ var packageInfo = await PackageInfo .fromPlatform ();
55
+ var versionCode = int .parse (packageInfo.buildNumber);
56
+ PrefService .setInt (Constants .prefVersionCode, versionCode);
57
+ } catch (e) {
42
58
log (e.toString ());
43
59
}
44
60
return result;
45
61
}
46
62
47
63
Future <DataModel > getCubaDataFromCache () async {
48
64
try {
49
- var data = PrefService .getString ('data' );
65
+ var packageInfo = await PackageInfo .fromPlatform ();
66
+ var versionCodeNow = int .parse (packageInfo.buildNumber);
67
+ var versionCodeOld = PrefService .getInt (Constants .prefVersionCode) ?? 0 ;
68
+ if (versionCodeNow != versionCodeOld) {
69
+ return null ;
70
+ }
71
+ var data = PrefService .getString (Constants .prefData);
50
72
if (data == null ) {
51
73
return null ;
52
74
}
@@ -60,7 +82,7 @@ Future<DataModel> getCubaDataFromCache() async {
60
82
Future <void > setCubaDataToCache (DataModel data) async {
61
83
try {
62
84
String result = jsonEncode (data.toJson ());
63
- PrefService .setString ('data' , result);
85
+ PrefService .setString (Constants .prefData , result);
64
86
} catch (e) {
65
87
log (e.toString ());
66
88
}
0 commit comments