WebAPI/LogAPI

From MozillaWiki
Jump to navigation Jump to search

Use Cases

To record the history of user activity with the device, particularly with communication services (Phone Calls, Messages, Social Networks, etc.)

Consumers

  • Comms Log Application (Global for the user and per-contact)

Producers

  • Dialer, SMS, e-mail, Facebook, Twitter, ...

WebIDL

interface LogManager : EventTarget  {
    DOMRequest put(LogEntry entry);
    DOMRequest delete(DOMString entryId);
    DOMRequest clear(LogClearOptions coptions);
    // Entries are always returned ordered by timestamp (desc)
    DOMRequest find(optional LogFindOptions options,optional IteratorOptions iopts);
        
   attribute Function onentryadded;
 };

// The iterator will be initialized with a window indicated in the iteration parameters
interface DOMIterator {
  DOMRequest next(optional unsigned short n);   // returns the next window
  attribute boolean hasMore;
  attribute unsigned long position; // points always to the element that will be the first returned by the window 
  readonly attribute unsigned long count;  // total number of objects
  readonly attribute any[] values;   // Contains the current window of objects
};

dictionary LogFindOptions {
   attribute DOMString contactId;
   attribute Date from;
   attribute Date to;
   attribute DOMString service;
};

dictionary IteratorOptions {
  attribute unsigned long maxRecords;  // Max number of records to be returned
  attribute unsigned long chunkSize:     // 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 latest 10 log entries corresponding to a contactId