Skip to content

Commit a5d1898

Browse files
authored
Merge pull request #52 from atsign-foundation/cache-fixes
feat: support for caching of objects properly
2 parents c76fa83 + 4c3ef75 commit a5d1898

File tree

6 files changed

+88
-75
lines changed

6 files changed

+88
-75
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
"mqtt",
1010
"mwcmanager",
1111
"ZARIOT"
12-
]
12+
],
13+
"cmake.configureOnOpen": false
1314
}

flutter/iot_receiver/ios/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ SPEC CHECKSUMS:
127127
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
128128
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
129129
file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95
130-
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
130+
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
131131
flutter_keychain: 01aabf894ffe8b01adfda1d9df21c210c1b4b452
132132
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
133133
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e

flutter/iot_receiver/lib/main.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ Future<AtClientPreference> loadAtClientPreference() async {
4242
..hiveStoragePath = dir.path
4343
..commitLogPath = dir.path
4444
..isLocalStoreRequired = true
45-
..syncIntervalMins = 1;
46-
// ..fetchOfflineNotifications = true;
45+
//..syncIntervalMins = 1
46+
..fetchOfflineNotifications = false;
4747
}
4848

4949
class MyApp extends StatefulWidget {

flutter/iot_receiver/lib/screens/device_owners_screen.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class _DeviceOwnersScreenState extends State<DeviceOwnersScreen> {
2121

2222
@override
2323
Widget build(BuildContext context) {
24-
_hrO2DataService.getDeviceOwners();
24+
// _hrO2DataService.getDeviceOwners();
2525
return Scaffold(
2626
appBar: NewGradientAppBar(
2727
title: const AutoSizeText(

flutter/iot_receiver/lib/services/hro2_data_service.dart

Lines changed: 81 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ class Hro2DataService {
2222
}
2323

2424
Future<bool> deleteAllForKey(String key) async {
25-
var atKeys =
26-
await AtClientManager.getInstance().atClient.getAtKeys(regex: key);
25+
var atKeys = await AtClientManager.getInstance().atClient.getAtKeys(regex: key);
2726
for (var atKey in atKeys) {
2827
await delete(atKey);
2928
}
@@ -41,10 +40,9 @@ class Hro2DataService {
4140

4241
Future<List<HrO2Device>> getDevices() async {
4342
List<HrO2Device> hrO2DeviceList = [];
44-
// var atClient = AtClientManager.getInstance().atClient;
45-
var keys = await AtClientManager.getInstance()
46-
.atClient
47-
.getAtKeys(regex: AppConstants.deviceKey);
43+
var keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.deviceKey);
44+
_logger.info('getDevices keys ${keys.toString()}');
45+
4846
for (var element in keys) {
4947
var data = await AtClientManager.getInstance().atClient.get(element);
5048
_logger.info('getDevices got ${data.value}');
@@ -62,27 +60,29 @@ class Hro2DataService {
6260
}
6361

6462
Future<bool> putDevice(HrO2Device hrO2Device) async {
65-
AtKey atKey = AtKey()..key = AppConstants.deviceKey;
63+
Metadata metadata = Metadata()
64+
// ..ttl = 10000
65+
..ttr = -1;
66+
AtKey atKey = AtKey()
67+
..sharedWith = hrO2Device.deviceAtsign
68+
..metadata = metadata
69+
..key = AppConstants.deviceKey;
6670
var value = jsonEncode(hrO2Device);
67-
var response =
68-
await AtClientManager.getInstance().atClient.put(atKey, value);
71+
var response = await AtClientManager.getInstance().atClient.put(atKey, value);
6972
_logger.info('putDeviceList success = $response');
7073
return response;
7174
}
7275

7376
Future<bool> deleteDevice(HrO2Device hrO2Device) async {
7477
bool response = false;
75-
List<AtKey> keys = await AtClientManager.getInstance()
76-
.atClient
77-
.getAtKeys(regex: AppConstants.deviceKey);
78+
List<AtKey> keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.deviceKey);
7879
_logger.info('deleteDevice processing ${keys.length} items');
7980
for (var key in keys) {
8081
AtValue data = await AtClientManager.getInstance().atClient.get(key);
8182
var atKeyString = jsonDecode(data.value);
8283
HrO2Device device = HrO2Device.fromJson(atKeyString);
8384
if (device.deviceAtsign == hrO2Device.deviceAtsign) {
84-
_logger.info(
85-
'deleteReceiver deleting ${hrO2Device.deviceAtsign}\'s entry');
85+
_logger.info('deleteReceiver deleting ${hrO2Device.deviceAtsign}\'s entry');
8686
response = await delete(key);
8787
}
8888
}
@@ -92,15 +92,12 @@ class Hro2DataService {
9292
Future<List<HrO2Receiver>> getReceivers() async {
9393
List<HrO2Receiver> hrO2ReceiverList = [];
9494
// var atClient = _atClient;
95-
var keys = await AtClientManager.getInstance()
96-
.atClient
97-
.getAtKeys(regex: AppConstants.receiverKey);
95+
var keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.receiverKey);
9896
for (var element in keys) {
9997
var data = await AtClientManager.getInstance().atClient.get(element);
10098
_logger.info('getReceivers got ${data.value}');
10199
try {
102-
HrO2Receiver hrO2Receiver =
103-
HrO2Receiver.fromJson(jsonDecode(data.value));
100+
HrO2Receiver hrO2Receiver = HrO2Receiver.fromJson(jsonDecode(data.value));
104101
hrO2ReceiverList.add(hrO2Receiver);
105102
} catch (error) {
106103
// found some dirty data, consider deleting
@@ -113,12 +110,15 @@ class Hro2DataService {
113110
}
114111

115112
Future<bool> putReceiver(HrO2Receiver hrO2Receiver) async {
113+
Metadata metadata = Metadata()
114+
// ..ttl = 10000
115+
..ttr = -1;
116116
AtKey atKey = AtKey()
117117
..sharedWith = hrO2Receiver.receiverAtsign
118+
..metadata = metadata
118119
..key = AppConstants.receiverKey;
119120
var value = jsonEncode(hrO2Receiver);
120-
var success =
121-
await AtClientManager.getInstance().atClient.put(atKey, value);
121+
var success = await AtClientManager.getInstance().atClient.put(atKey, value);
122122
_logger.info('putReceiver success = $success');
123123
var receiverSuccess = await updateDeviceReceivers(hrO2Receiver.hrO2Device);
124124
return success && receiverSuccess;
@@ -127,17 +127,14 @@ class Hro2DataService {
127127
Future<bool> deleteReceiver(HrO2Receiver hrO2Receiver) async {
128128
bool deleteSuccess = false;
129129
bool deviceUpdated = false;
130-
List<AtKey> keys = await AtClientManager.getInstance()
131-
.atClient
132-
.getAtKeys(regex: AppConstants.receiverKey);
130+
List<AtKey> keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.receiverKey);
133131
_logger.info('deleteReceiver processing ${keys.length} items');
134132
for (var key in keys) {
135133
AtValue data = await AtClientManager.getInstance().atClient.get(key);
136134
var atKeyString = jsonDecode(data.value);
137135
HrO2Receiver rec = HrO2Receiver.fromJson(atKeyString);
138136
if (rec.receiverAtsign == hrO2Receiver.receiverAtsign) {
139-
_logger.info(
140-
'deleteReceiver deleting ${hrO2Receiver.receiverAtsign}\'s entry');
137+
_logger.info('deleteReceiver deleting ${hrO2Receiver.receiverAtsign}\'s entry');
141138
deleteSuccess = await delete(key);
142139
deviceUpdated = await updateDeviceReceivers(hrO2Receiver.hrO2Device);
143140
}
@@ -147,54 +144,50 @@ class Hro2DataService {
147144

148145
Future<List<HrO2DataOwner>> getDataOwners() async {
149146
List<HrO2DataOwner> hrO2DataOwnerList = [];
150-
var keys = await AtClientManager.getInstance()
151-
.atClient
152-
.getAtKeys(regex: AppConstants.dataOwnerKey, sharedBy: "@mwcmanager");
147+
var keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.dataOwnerKey);
148+
_logger.info('getDataOwners keys $keys');
153149
for (var element in keys) {
154150
var data = await AtClientManager.getInstance().atClient.get(element);
155151
_logger.info('getDataOwners got ${data.value}');
156152
try {
157-
HrO2DataOwner hrO2DataOwner =
158-
HrO2DataOwner.fromJson(jsonDecode(data.value));
153+
HrO2DataOwner hrO2DataOwner = HrO2DataOwner.fromJson(jsonDecode(data.value));
159154
hrO2DataOwnerList.add(hrO2DataOwner);
160155
} catch (error) {
161156
// found some dirty data, consider deleting
162157
_logger.severe('getDataOwners error $error for ${element.key}');
163-
await AtClientManager.getInstance().atClient.delete(element);
158+
// await AtClientManager.getInstance().atClient.delete(element);
164159
}
165160
}
166161
return hrO2DataOwnerList;
167162
}
168163

169164
Future<bool> putDataOwner(HrO2DataOwner hrO2DataOwner) async {
170-
AtClientManager.getInstance().syncService.sync();
165+
// AtClientManager.getInstance().syncService.sync();
166+
Metadata metadata = Metadata()
167+
// ..ttl = 10000
168+
..ttr = -1;
171169
AtKey atKey = AtKey()
172170
..sharedWith = hrO2DataOwner.dataOwnerAtsign
171+
..metadata = metadata
173172
..key = AppConstants.dataOwnerKey;
174-
var success = await AtClientManager.getInstance()
175-
.atClient
176-
.put(atKey, jsonEncode(hrO2DataOwner));
173+
var success = await AtClientManager.getInstance().atClient.put(atKey, jsonEncode(hrO2DataOwner));
177174
_logger.info('putDataOwner success = $success');
178-
var dataOwnerSuccess =
179-
await updateDeviceDataOwners(hrO2DataOwner.hrO2Device);
175+
var dataOwnerSuccess = await updateDeviceDataOwners(hrO2DataOwner.hrO2Device);
180176
_logger.info('putDataOwner updateDevice success = $dataOwnerSuccess');
181177
return success && dataOwnerSuccess;
182178
}
183179

184180
Future<bool> deleteDataOwner(HrO2DataOwner hrO2DataOwner) async {
185181
bool deleteSuccess = false;
186182
bool deviceUpdated = false;
187-
List<AtKey> keys = await AtClientManager.getInstance()
188-
.atClient
189-
.getAtKeys(regex: AppConstants.dataOwnerKey);
183+
List<AtKey> keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.dataOwnerKey);
190184
_logger.info('deleteDataOwner processing ${keys.length} items');
191185
for (var key in keys) {
192186
AtValue data = await AtClientManager.getInstance().atClient.get(key);
193187
var atKeyString = jsonDecode(data.value);
194188
HrO2DataOwner owner = HrO2DataOwner.fromJson(atKeyString);
195189
if (owner.dataOwnerAtsign == hrO2DataOwner.dataOwnerAtsign) {
196-
_logger.info(
197-
'deleteDataOwner deleting ${hrO2DataOwner.dataOwnerAtsign}\'s entry');
190+
_logger.info('deleteDataOwner deleting ${hrO2DataOwner.dataOwnerAtsign}\'s entry');
198191
deleteSuccess = await delete(key);
199192
deviceUpdated = await updateDeviceDataOwners(hrO2DataOwner.hrO2Device);
200193
}
@@ -204,16 +197,12 @@ class Hro2DataService {
204197

205198
Future<List<HrO2DeviceOwner>> getDeviceOwners() async {
206199
List<HrO2DeviceOwner> hrO2DeviceOwnerList = [];
207-
var keys = await AtClientManager.getInstance()
208-
.atClient
209-
.getAtKeys(regex: AppConstants.deviceOwnerKey);
200+
var keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.deviceOwnerKey);
210201
for (var element in keys) {
211-
var deviceOwnerData =
212-
await AtClientManager.getInstance().atClient.get(element);
202+
var deviceOwnerData = await AtClientManager.getInstance().atClient.get(element);
213203
_logger.info('getDeviceOwners got ${deviceOwnerData.value}');
214204
try {
215-
HrO2DeviceOwner hrO2DeviceOwner =
216-
HrO2DeviceOwner.fromJson(jsonDecode(deviceOwnerData.value));
205+
HrO2DeviceOwner hrO2DeviceOwner = HrO2DeviceOwner.fromJson(jsonDecode(deviceOwnerData.value));
217206
hrO2DeviceOwnerList.add(hrO2DeviceOwner);
218207
} catch (error) {
219208
// found some dirty data, consider deleting
@@ -225,21 +214,21 @@ class Hro2DataService {
225214
}
226215

227216
Future<bool> putDeviceOwner(HrO2DeviceOwner hrO2DeviceOwner) async {
217+
Metadata metadata = Metadata()
218+
// ..ttl = 10000
219+
..ttr = -1;
228220
AtKey atKey = AtKey()
229221
..key = AppConstants.deviceOwnerKey
222+
..metadata = metadata
230223
..sharedWith = hrO2DeviceOwner.deviceOwnerAtsign;
231-
var response = await AtClientManager.getInstance()
232-
.atClient
233-
.put(atKey, jsonEncode(hrO2DeviceOwner));
224+
var response = await AtClientManager.getInstance().atClient.put(atKey, jsonEncode(hrO2DeviceOwner));
234225
_logger.info('putDeviceOwner success = $response');
235226
return response;
236227
}
237228

238229
Future<bool> deleteDeviceOwner(HrO2DeviceOwner hrO2DeviceOwner) async {
239230
bool deleteSuccess = false;
240-
List<AtKey> keys = await AtClientManager.getInstance()
241-
.atClient
242-
.getAtKeys(regex: AppConstants.deviceOwnerKey);
231+
List<AtKey> keys = await AtClientManager.getInstance().atClient.getAtKeys(regex: AppConstants.deviceOwnerKey);
243232
_logger.info('deleteDeviceOwner processing ${keys.length} items');
244233
for (var key in keys) {
245234
AtValue data = await AtClientManager.getInstance().atClient.get(key);
@@ -255,27 +244,52 @@ class Hro2DataService {
255244
}
256245

257246
Future<bool> updateDeviceReceivers(HrO2Device hrO2Device) async {
258-
// update the device list of HrO2Receiver objects
247+
// update the device list of recipients from HrO2Receiver objects
248+
bool success = false;
249+
Metadata metadata = Metadata()
250+
// ..ttl = 10000
251+
//..namespaceAware
252+
..ttr = -1;
259253
AtKey atKey = AtKey()
260254
..sharedWith = hrO2Device.deviceAtsign
255+
..metadata = metadata
261256
..key = AppConstants.receiverListKey;
262257
List<HrO2Receiver> receiverList = await getReceivers();
263-
var success = await AtClientManager.getInstance()
264-
.atClient
265-
.put(atKey, jsonEncode(receiverList));
266-
_logger.info('updateDeviceReceivers success = $success');
258+
NotificationService notify = AtClientManager.getInstance().notificationService;
259+
try {
260+
await notify.notify(NotificationParams.forUpdate(atKey, value: jsonEncode(receiverList)),
261+
checkForFinalDeliveryStatus: false, onSuccess: (notification) {
262+
success = true;
263+
_logger.info('SUCCESS:$notification');
264+
}, onError: (notification) {
265+
_logger.info('ERROR:$notification');
266+
}, onSentToSecondary: (notification) {
267+
_logger.info('SENT:$notification');
268+
}, waitForFinalDeliveryStatus: false);
269+
} catch (e) {
270+
_logger.severe(e.toString());
271+
}
272+
// var success = await AtClientManager.getInstance().atClient.put(atKey, jsonEncode(receiverList));
273+
// _logger.info('updateDeviceReceivers key = $atKey');
274+
// _logger.info('updateDeviceReceivers receiverList = ${jsonEncode(receiverList)}');
275+
// _logger.info('updateDeviceReceivers success = $success');
276+
// AtClientManager.getInstance().syncService.sync();
267277
return success;
268278
}
269279

270280
Future<bool> updateDeviceDataOwners(HrO2Device hrO2Device) async {
271-
// update the device list of HrO2DataOwner objects
281+
// update the device list of recipients from HrO2DataOwner objects
282+
Metadata metadata = Metadata()
283+
// ..ttl = 10000
284+
..ttr = -1;
272285
AtKey atKey = AtKey()
273286
..sharedWith = hrO2Device.deviceAtsign
287+
..metadata = metadata
274288
..key = AppConstants.dataOwnerListKey;
275289
List<HrO2DataOwner> owners = await getDataOwners();
276-
var success = await AtClientManager.getInstance()
277-
.atClient
278-
.put(atKey, jsonEncode(owners));
290+
_logger.info('updateDeviceDataOwners found = ${owners.toString()}');
291+
var success = await AtClientManager.getInstance().atClient.put(atKey, jsonEncode(owners));
292+
_logger.info('updateDeviceDataOwners key = $atKey');
279293
_logger.info('updateDeviceDataOwners success = $success');
280294
return success;
281295
}
@@ -288,10 +302,8 @@ class AppConstants {
288302
static const String deviceKey = 'device.$libraryNamespace';
289303
static const String deviceListKey = 'device_list.$libraryNamespace';
290304
static const String deviceOwnerKey = 'device_owner.$libraryNamespace';
291-
static const String deviceOwnerListKey =
292-
'device_owner_list.$libraryNamespace';
293-
static const String deviceDataOwnerKey =
294-
'device_data_owner.$libraryNamespace';
305+
static const String deviceOwnerListKey = 'device_owner_list.$libraryNamespace';
306+
static const String deviceDataOwnerKey = 'device_data_owner.$libraryNamespace';
295307
static const String deviceReceiverKey = 'device_receiver.$libraryNamespace';
296308
static const String receiverKey = 'receiver.$libraryNamespace';
297309
static const int responseTimeLimit = 30;

flutter/iot_receiver/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: A new Flutter project.
55
environment:
66
sdk: '>=2.15.1 <3.0.0'
77

8-
dependency_overrides:
8+
#dependency_overrides:
99
# biometric_storage: ^4.1.3
1010
# at_client:
1111
# git:

0 commit comments

Comments
 (0)