writeIfRevision method
Safe transaction write of multiple infos.
Implementation
@override
Future<StorageJdbWriteResult> writeIfRevision(
StorageJdbWriteQuery query,
) async {
// Encode before creating the transaction to handle async codec.
var encodedList = await encodeEntries(query.entries);
var expectedRevision = query.revision ?? 0;
var txn = _idbDatabase.transaction([
idbInfoStore,
idbEntryStore,
], idbModeReadWrite);
int? readRevision = (await _txnGetRevision(txn)) ?? 0;
var success = (expectedRevision == readRevision);
// Notify for the web
int? shouldNotifyRevision;
if (success) {
if (query.entries.isNotEmpty) {
readRevision = await _txnAddEntries(txn, encodedList);
// Set revision info
if (readRevision != null) {
await _txnPutRevision(txn, readRevision);
shouldNotifyRevision = readRevision;
}
}
if (query.infoEntries.isNotEmpty) {
for (var infoEntry in query.infoEntries) {
await _txnSetInfoEntry(txn, infoEntry);
}
}
}
await txn.completed;
if (shouldNotifyRevision != null) {
notifyRevision(shouldNotifyRevision);
}
return StorageJdbWriteResult(
revision: readRevision,
query: query,
success: success,
);
}