Bug 921918 - 3.f/4: share similar works to callback with a DOM message in a transaction. r=gene

This commit is contained in:
Vicamo Yang 2013-11-25 18:55:05 +08:00
Родитель d0683018a5
Коммит ac221788cc
1 изменённых файлов: 47 добавлений и 34 удалений

Просмотреть файл

@ -1517,20 +1517,54 @@ MobileMessageDatabaseService.prototype = {
});
},
newTxnWithCallback: function newTxnWithCallback(aCallback, aFunc, aStoreNames) {
let self = this;
this.newTxn(READ_WRITE, function(aError, aTransaction, aStores) {
let notifyResult = function(aRv, aMessageRecord) {
if (!aCallback) {
return;
}
let domMessage =
aMessageRecord && self.createDomMessageFromRecord(aMessageRecord);
aCallback.notify(aRv, domMessage);
};
if (aError) {
// TODO bug 832140 check event.target.errorCode
notifyResult(Cr.NS_ERROR_FAILURE, null);
return;
}
let capture = {};
aTransaction.oncomplete = function(event) {
notifyResult(Cr.NS_OK, capture.messageRecord);
};
aTransaction.onabort = function(event) {
// TODO bug 832140 check event.target.errorCode
notifyResult(Cr.NS_ERROR_FAILURE, null);
};
aFunc(capture, aStores);
}, aStoreNames);
},
saveRecord: function saveRecord(aMessageRecord, aAddresses, aCallback) {
if (DEBUG) debug("Going to store " + JSON.stringify(aMessageRecord));
let self = this;
this.newTxn(READ_WRITE, function(error, txn, stores) {
let notifyResult = function(rv) {
if (aCallback) {
aCallback.notify(rv, self.createDomMessageFromRecord(aMessageRecord));
let notifyResult = function(aRv, aMessageRecord) {
if (!aCallback) {
return;
}
let domMessage =
aMessageRecord && self.createDomMessageFromRecord(aMessageRecord);
aCallback.notify(aRv, domMessage);
};
if (error) {
// TODO bug 832140 check event.target.errorCode
notifyResult(Cr.NS_ERROR_FAILURE);
notifyResult(Cr.NS_ERROR_FAILURE, null);
return;
}
@ -1538,11 +1572,11 @@ MobileMessageDatabaseService.prototype = {
if (aMessageRecord.id > self.lastMessageId) {
self.lastMessageId = aMessageRecord.id;
}
notifyResult(Cr.NS_OK);
notifyResult(Cr.NS_OK, aMessageRecord);
};
txn.onabort = function onabort(event) {
// TODO bug 832140 check event.target.errorCode
notifyResult(Cr.NS_ERROR_FAILURE);
notifyResult(Cr.NS_ERROR_FAILURE, null);
};
let messageStore = stores[0];
@ -1767,41 +1801,19 @@ MobileMessageDatabaseService.prototype = {
}
let self = this;
let messageRecord;
function notifyResult(rv) {
if (!callback) {
return;
}
let domMessage = self.createDomMessageFromRecord(messageRecord);
callback.notify(rv, domMessage);
}
this.newTxn(READ_WRITE, function (error, txn, messageStore) {
if (error) {
// TODO bug 832140 check event.target.errorCode
notifyResult(Cr.NS_ERROR_FAILURE);
return;
}
txn.oncomplete = function oncomplete(event) {
notifyResult(Cr.NS_OK);
};
txn.onabort = function onabort(event) {
// TODO bug 832140 check event.target.errorCode
notifyResult(Cr.NS_ERROR_FAILURE);
};
this.newTxnWithCallback(callback, function(aCapture, aMessageStore) {
let getRequest;
if (type === "messageId") {
getRequest = messageStore.get(id);
getRequest = aMessageStore.get(id);
} else if (type === "envelopeId") {
getRequest = messageStore.index("envelopeId").get(id);
getRequest = aMessageStore.index("envelopeId").get(id);
}
getRequest.onsuccess = function onsuccess(event) {
messageRecord = event.target.result;
let messageRecord = event.target.result;
if (!messageRecord) {
if (DEBUG) debug("type = " + id + " is not found");
return;
throw Cr.NS_ERROR_FAILURE;
}
let isRecordUpdated = false;
@ -1856,6 +1868,7 @@ MobileMessageDatabaseService.prototype = {
}
}
aCapture.messageRecord = messageRecord;
if (!isRecordUpdated) {
if (DEBUG) {
debug("The values of delivery, deliveryStatus and envelopeId " +
@ -1867,7 +1880,7 @@ MobileMessageDatabaseService.prototype = {
if (DEBUG) {
debug("The delivery, deliveryStatus or envelopeId are updated.");
}
messageStore.put(messageRecord);
aMessageStore.put(messageRecord);
};
});
},