WebAPI/LogAPI
< WebAPI
Jump to navigation
Jump to search
Proposer
José M. Cantera, Telefónica, jmcf@tid.es
Use Cases
To record the history of user activity with the device, particularly with communication services (Phone Calls, Messages, Social Networks, etc.) The Communications Log can have different views: Global or Per-Contact
Using the API the occurrence of incoming calls, missed calls, incoming messages, outgoing messages etc. is automatically recorded.
Consumers
- Comms Log Application (Global for the user and per-contact)
Producers
- Dialer, SMS, e-mail, Facebook, Twitter, ...
WebIDL
[NoInterfaceObject]
interface NavigatorLog {
readonly attribute LogManager mozLog;
};
Navigator implements NavigatorLog;
[NoInterfaceObject]
interface LogManager : EventTarget {
DOMRequest put(LogEntry entry);
DOMRequest delete(DOMString entryId); // Delete one entry
DOMRequest clear(LogClearOptions coptions); // To clear the log for maintenance purposes
// Entries are always returned ordered by timestamp (desc)
DOMRequest find(optional LogFindFilter filter,optional IteratorOptions iopts);
attribute Function? onentryadded; // To listen for log changes
};
// The iterator will be initialized with a window indicated in the iteration parameters
[NoInterfaceObject]
interface DOMIterator {
DOMRequest next(); // request to refresh the window of objects with the next
DOMRequest prev(); // request to refresh the window of objects with the prev
DOMRequest skipTo(unsigned long chunk);
readonly attribute boolean hasMore;
readonly attribute unsigned long count; // total number of objects
readonly attribute any[]? values; // Contains the current window of objects
readonly attribute chunkSize;
};
dictionary LogFindFilter {
DOMString? contactId;
Date? from; // for defining a time interval
Date? to; // for defining a time interval
DOMString? service; // to filter by service
DOMString? type; // to filter by Log type
};
dictionary LogClearOptions {
Date deadline; // To clear all the entries older than the date passed as parameter
DOMString? contactId; // To clear all the entries corresponding to a contact
DOMString? tel; // To clear all the entries corresponding to a tel number
};
dictionary IteratorOptions {
unsigned long? maxRecords = -1; // Max number of records to be returned (-1 means all)
unsigned long? chunkSize = 10; // Chunk size for the iterator
};
interface LogEntryProperties {
attribute DOMString type; // possible values: ['incoming', 'outgoing'']
attribute DOMString? status; // [missed, new]
attribute DOMString[]? contactId; // ContactId
attribute DOMString[]? tel; // Tel number if not in contacts
attribute DOMString? objectId; // Object id (for example SMS message on the SMS database)
attribute DOMString service; // oneOf ['SMS', 'Telephony', 'Facebook', 'Twitter']
attribute DOMString? title;
attribute DOMString? description;
attribute any? extra; // Any extra data to be used by applications
};
[Constructor(LogEntryProperties properties)]
interface LogEntry : LogEntryProperties {
readonly attribute DOMString id;
readonly attribute DOMTimestamp timestamp; // When happened
};
Examples
Get latest global 30 log entries (ordered by timestamp, newest to oldest) in chunks of 10
var pageOptions = {maxNumber: 30, chunkSize: 10};
var req = navigator.mozLog.find(null,pageOptions);
req.onsuccess = function(e) {
var iterator = e.target.result;
doSomething(iterator.values);
if(iterator.hasMore) {
iterator.next();
}
}
Get all the log entries corresponding to a contactId
var filterOptions = {contactId: 'ax1234'};
var req = navigator.mozLog.find(filterOptions);
req.onsuccess = function(e) {
var iterator = e.target.result;
var logEntries = iterator.values;
for(var c = 0; c < logEntries.length; c++) {
window.console.log('LogEntry: ', logEntries[c].type,logEntries[c].timestamp);
}
if(iterator.hasMore) {
iterator.next();
}
}