WebAPI/LogAPI: Difference between revisions

no edit summary
No edit summary
 
(34 intermediate revisions by one other user not shown)
Line 1: Line 1:
== Proposer ==
José M. Cantera, Telefónica, jmcf@tid.es
== Use Cases ==
== Use Cases ==


To record the history of user activity with the device, particularly with communication services (Phone Calls, Messages, Social Networks, etc.)  
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 ===
=== Consumers ===
Line 9: Line 16:
=== Producers ===  
=== Producers ===  


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


== WebIDL ==
== WebIDL ==


<pre>
<pre>
[NoInterfaceObject]
interface NavigatorLog {
    readonly attribute LogManager mozLog;
};
Navigator implements NavigatorLog;
[NoInterfaceObject]
interface LogManager : EventTarget  {
interface LogManager : EventTarget  {
     DOMRequest put(LogEntry entry);
     DOMRequest put(LogEntry entry);
     DOMRequest delete(DOMString entryId);
     DOMRequest delete(DOMString entryId); // Delete one entry
     DOMRequest clear(LogClearOptions coptions);
     DOMRequest clear(LogClearOptions coptions); // To clear the log for maintenance purposes
     // Entries are always returned ordered by timestamp
     // Entries are always returned ordered by timestamp (desc)
     DOMRequest find(LogFindOptions options);
     DOMRequest find(optional LogFindFilter filter,optional IteratorOptions iopts);
          
          
   attribute Function onentryadded;
   attribute Function? onentryadded; // To listen for log changes
  };
  };


interface LogIterator {
// The iterator will be initialized with a window indicated in the iteration parameters
   DOMRequest next(optional unsigned short n);
[NoInterfaceObject]
   attribute boolean hasMore;
interface DOMIterator {
   attribute unsigned long position;
   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 LogFindOptions {
dictionary LogFindFilter {
   attribute unsigned long maxRecords;
   DOMString? contactId;
  attribute DOMString contactId;
   Date? from;   // for defining a time interval
   attribute Date from;
   Date? to;       // for defining a time interval
   attribute Date to;
   DOMString? service;  // to filter by service
   attribute DOMString 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 {
interface LogEntryProperties {
   // possible values: ['incoming', 'outgoing'']
   attribute DOMString type;  // possible values: ['incoming', 'outgoing'']
   attribute DOMString type;   
   attribute DOMString? status;  // [missed, new]         
  // [missed, new]         
   attribute DOMString[]? contactId; // ContactId     
   attribute DOMString status;  
   attribute DOMString[]? tel; // Tel number if not in contacts
  // ContactId     
   attribute DOMString? objectId; // Object id (for example SMS message on the SMS database)   
   attribute DOMString[] contactId;  
   attribute DOMString service; // oneOf ['SMS', 'Telephony', 'Facebook', 'Twitter']  
  // Tel number if not in contacts
   attribute DOMString? title;             
   attribute DOMString[] tel;      
   attribute DOMString? description;
  // Object id (for example SMS message on the SMS database)   
   attribute any? extra;  // Any extra data to be used by applications
   attribute DOMString objectId;  
  // oneOf ['SMS', 'Telephony', 'Facebook', 'Twitter']  
   attribute DOMString service;   
  attribute DOMString title;             
   attribute DOMString description;
   // Any extra data to be used by applications
  attribute any extra;                               
};
};


Line 66: Line 91:
== Examples ==
== Examples ==


Get latest global 20 log entries (ordered by timestamp, newest to oldest)
Get latest global 30 log entries (ordered by timestamp, newest to oldest) in chunks of 10


<pre>
<pre>
var filter = {maxNumber: 20};
var pageOptions = {maxNumber: 30, chunkSize: 10};
var req = navigator.mozLog.find(filter);
var req = navigator.mozLog.find(null,pageOptions);
req.onsuccess = function(e) {
req.onsuccess = function(e) {
   var iterator = e.target.result;
   var iterator = e.target.result;
    
    
   var req2 = iterator.next(10);
   doSomething(iterator.values);
    req2.onsuccess = function(e) {
 
      var entries = e.target.result;
  if(iterator.hasMore) {
      if(iterator.hasMore) {
    iterator.next();
        iterator.next(10);
      }
   }
   }
}
}
</pre>
</pre>


Get latest 10 log entries corresponding to a contactId  
Get all the log entries corresponding to a contactId  


<pre>
<pre>
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();
  }
}
</pre>
</pre>
[[Category:Web APIs]]
Confirmed users
1,340

edits