mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 849739 4/5: RIL. r=gwagner
This commit is contained in:
parent
4be71d4339
commit
a554bab576
@ -16,6 +16,8 @@ const RIL_MOBILEMESSAGEDATABASESERVICE_CID =
|
|||||||
Components.ID("{29785f90-6b5b-11e2-9201-3b280170b2ec}");
|
Components.ID("{29785f90-6b5b-11e2-9201-3b280170b2ec}");
|
||||||
const RIL_GETMESSAGESCURSOR_CID =
|
const RIL_GETMESSAGESCURSOR_CID =
|
||||||
Components.ID("{484d1ad8-840e-4782-9dc4-9ebc4d914937}");
|
Components.ID("{484d1ad8-840e-4782-9dc4-9ebc4d914937}");
|
||||||
|
const RIL_GETTHREADSCURSOR_CID =
|
||||||
|
Components.ID("{95ee7c3e-d6f2-4ec4-ade5-0c453c036d35}");
|
||||||
|
|
||||||
const DEBUG = false;
|
const DEBUG = false;
|
||||||
const DB_NAME = "sms";
|
const DB_NAME = "sms";
|
||||||
@ -1360,34 +1362,35 @@ MobileMessageDatabaseService.prototype = {
|
|||||||
}, [MESSAGE_STORE_NAME, THREAD_STORE_NAME]);
|
}, [MESSAGE_STORE_NAME, THREAD_STORE_NAME]);
|
||||||
},
|
},
|
||||||
|
|
||||||
getThreadList: function getThreadList(aRequest) {
|
createThreadCursor: function createThreadCursor(callback) {
|
||||||
if (DEBUG) debug("Getting thread list");
|
if (DEBUG) debug("Getting thread list");
|
||||||
|
|
||||||
|
let cursor = new GetThreadsCursor(this, callback);
|
||||||
this.newTxn(READ_ONLY, function (error, txn, threadStore) {
|
this.newTxn(READ_ONLY, function (error, txn, threadStore) {
|
||||||
|
let collector = cursor.collector;
|
||||||
if (error) {
|
if (error) {
|
||||||
if (DEBUG) debug(error);
|
if (DEBUG) debug(error);
|
||||||
aRequest.notifyThreadListFailed(Ci.nsIMobileMessageCallback.INTERNAL_ERROR);
|
collector.collect(null, COLLECT_ID_ERROR, COLLECT_TIMESTAMP_UNUSED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
txn.onerror = function onerror(event) {
|
txn.onerror = function onerror(event) {
|
||||||
if (DEBUG) debug("Caught error on transaction ", event.target.errorCode);
|
if (DEBUG) debug("Caught error on transaction ", event.target.errorCode);
|
||||||
aRequest.notifyThreadListFailed(Ci.nsIMobileMessageCallback.INTERNAL_ERROR);
|
collector.collect(null, COLLECT_ID_ERROR, COLLECT_TIMESTAMP_UNUSED);
|
||||||
};
|
};
|
||||||
let request = threadStore.index("lastTimestamp").mozGetAll();
|
let request = threadStore.index("lastTimestamp").openKeyCursor();
|
||||||
request.onsuccess = function(event) {
|
request.onsuccess = function(event) {
|
||||||
// TODO: keep backward compatibility of original API interface only.
|
let cursor = event.target.result;
|
||||||
let results = [];
|
if (cursor) {
|
||||||
for each (let item in event.target.result) {
|
if (collector.collect(txn, cursor.primaryKey, cursor.key)) {
|
||||||
results.push({
|
cursor.continue();
|
||||||
id: item.id,
|
}
|
||||||
senderOrReceiver: item.participantAddresses[0],
|
} else {
|
||||||
timestamp: item.lastTimestamp,
|
collector.collect(txn, COLLECT_ID_END, COLLECT_TIMESTAMP_UNUSED);
|
||||||
body: item.subject,
|
|
||||||
unreadCount: item.unreadCount
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
aRequest.notifyThreadList(results);
|
|
||||||
};
|
};
|
||||||
}, [THREAD_STORE_NAME]);
|
}, [THREAD_STORE_NAME]);
|
||||||
|
|
||||||
|
return cursor;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1951,6 +1954,85 @@ GetMessagesCursor.prototype = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function GetThreadsCursor(service, callback) {
|
||||||
|
this.service = service;
|
||||||
|
this.callback = callback;
|
||||||
|
this.collector = new ResultsCollector();
|
||||||
|
|
||||||
|
this.handleContinue(); // Trigger first run.
|
||||||
|
}
|
||||||
|
GetThreadsCursor.prototype = {
|
||||||
|
classID: RIL_GETTHREADSCURSOR_CID,
|
||||||
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsICursorContinueCallback]),
|
||||||
|
|
||||||
|
service: null,
|
||||||
|
callback: null,
|
||||||
|
collector: null,
|
||||||
|
|
||||||
|
getThreadTxn: function getThreadTxn(threadStore, threadId) {
|
||||||
|
if (DEBUG) debug ("Fetching message " + threadId);
|
||||||
|
|
||||||
|
let getRequest = threadStore.get(threadId);
|
||||||
|
let self = this;
|
||||||
|
getRequest.onsuccess = function onsuccess(event) {
|
||||||
|
if (DEBUG) {
|
||||||
|
debug("notifyCursorResult - threadId: " + threadId);
|
||||||
|
}
|
||||||
|
let threadRecord = event.target.result;
|
||||||
|
let thread =
|
||||||
|
gMobileMessageService.createThread(threadRecord.id,
|
||||||
|
threadRecord.participantAddresses,
|
||||||
|
threadRecord.lastTimestamp,
|
||||||
|
threadRecord.subject,
|
||||||
|
threadRecord.unreadCount);
|
||||||
|
self.callback.notifyCursorResult(thread);
|
||||||
|
};
|
||||||
|
getRequest.onerror = function onerror(event) {
|
||||||
|
if (DEBUG) {
|
||||||
|
debug("notifyCursorError - threadId: " + threadId);
|
||||||
|
}
|
||||||
|
self.callback.notifyCursorError(Ci.nsIMobileMessageCallback.INTERNAL_ERROR);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
notify: function notify(txn, threadId) {
|
||||||
|
if (!threadId) {
|
||||||
|
this.callback.notifyCursorDone();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (threadId < 0) {
|
||||||
|
this.callback.notifyCursorError(Ci.nsIMobileMessageCallback.INTERNAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// When filter transaction is not yet completed, we're called with current
|
||||||
|
// ongoing transaction object.
|
||||||
|
if (txn) {
|
||||||
|
let threadStore = txn.objectStore(THREAD_STORE_NAME);
|
||||||
|
this.getThreadTxn(threadStore, threadId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Or, we have to open another transaction ourselves.
|
||||||
|
let self = this;
|
||||||
|
this.service.newTxn(READ_ONLY, function (error, txn, threadStore) {
|
||||||
|
if (error) {
|
||||||
|
self.callback.notifyCursorError(Ci.nsIMobileMessageCallback.INTERNAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self.getThreadTxn(threadStore, threadId);
|
||||||
|
}, [THREAD_STORE_NAME]);
|
||||||
|
},
|
||||||
|
|
||||||
|
// nsICursorContinueCallback
|
||||||
|
|
||||||
|
handleContinue: function handleContinue() {
|
||||||
|
if (DEBUG) debug("Getting next thread in list");
|
||||||
|
this.collector.squeeze(this.notify.bind(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XPCOMUtils.defineLazyServiceGetter(MobileMessageDatabaseService.prototype, "mRIL",
|
XPCOMUtils.defineLazyServiceGetter(MobileMessageDatabaseService.prototype, "mRIL",
|
||||||
"@mozilla.org/ril;1",
|
"@mozilla.org/ril;1",
|
||||||
"nsIRadioInterfaceLayer");
|
"nsIRadioInterfaceLayer");
|
||||||
|
Loading…
Reference in New Issue
Block a user