adding contacts module

Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/c98c5f45
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/c98c5f45
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/c98c5f45

Branch: refs/heads/master
Commit: c98c5f454d394339c192af72ff485f1ae075fd9f
Parents: abb2c9e
Author: Anis Kadri <anis.ka...@gmail.com>
Authored: Fri May 11 08:20:47 2012 -0700
Committer: Anis Kadri <anis.ka...@gmail.com>
Committed: Fri May 11 08:20:47 2012 -0700

----------------------------------------------------------------------
 lib/bada/plugin/bada/Contacts.js |  255 +++++++++++++++++++++++++++++++++
 1 files changed, 255 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/c98c5f45/lib/bada/plugin/bada/Contacts.js
----------------------------------------------------------------------
diff --git a/lib/bada/plugin/bada/Contacts.js b/lib/bada/plugin/bada/Contacts.js
new file mode 100644
index 0000000..c98ba80
--- /dev/null
+++ b/lib/bada/plugin/bada/Contacts.js
@@ -0,0 +1,255 @@
+var allowedAddressTypes = ["WORK", "HOME", "PREF"];
+
+var allowedPhoneNumberTypes = ["WORK", "PREF", "HOME", "VOICE", "FAX", "MSG", 
"CELL", "PAGER","BBS", "MODEM", "CAR", "ISDN","VIDEO", "PCS"];
+
+var allowedFilters = ["firstName", "lastName", "phoneticName", "nickname", 
"phoneNumber", "email", "address"];
+
+function _pgToWac(contact) {
+    var i, j;
+    var wacContact = {};
+    
+    if(contact.id) {
+        wacContact.id = contact.id;
+    }
+
+    // name
+    if(contact.name) {
+       wacContact.firstName = contact.name.givenName;
+       wacContact.lastName = contact.name.familyName;
+    }
+
+    // nickname
+    if(contact.nickname) {
+        wacContact.nicknames = [contact.nickname];
+    }
+
+    // phoneNumbers
+    if(contact.phoneNumbers && contact.phoneNumbers.length > 0) {
+        wacContact.phoneNumbers = {};
+        for(i = 0, j = contact.phoneNumbers.length ; i < j ; i += 1) {
+            var wacPhoneNumber = {};
+            wacPhoneNumber.number = contact.phoneNumbers[i].value;
+            if(allowedPhoneNumberTypes.indexOf(contact.phoneNumbers[i].type) 
!= -1) {
+                wacPhoneNumber.types = [contact.phoneNumbers[i].type];
+                if(contact.phoneNumbers[i].pref === true) {
+                    wacPhoneNumber.types.push('PREF');
+                }
+                wacContact.phoneNumbers.push(wacPhoneNumber);
+            }
+        }
+    }
+    
+    // emails
+    if(contact.emails &&  contact.emails.length > 0) {
+        wacContact.emails = [];
+        for(i = 0, j = contact.emails.length ; i < j ; i +=1) {
+            var wacEmailAddress = {};
+            wacEmailAddress.email = contact.emails[i].value;
+            if(allowedAddressTypes.indexOf(contact.emails[i].type) != -1) {
+                wacEmailAddress.types = [contact.emails[i].type];
+                if(contact.emails[i].pref === true) {
+                    wacEmailAddress.types.push('PREF');
+                }
+                wacContact.emails.push(wacEmailAddress);
+            }
+        }
+    }
+    // addresses
+    if(contact.addresses && contact.addresses.length > 0) {
+        wacContact.addresses = [];
+        for(i = 0, j = contact.emails.length ; i < j ; i +=1) {
+            var wacAddress = {};
+            wacAddress.country = contact.addresses[i].country;
+            wacAddress.postalCode = contact.addresses[i].postalCode;
+            wacAddress.region = contact.addresses[i].region;
+            wacAddress.city = contact.addresses[i].locality;
+            wacAddress.streetAddress = contact.addresses[i].streetAddress;
+            if(allowedAddressTypes.indexOf(contact.addresses[i].type) != -1) {
+                wacAddress.types = [contact.addresses[i].type];
+                if(contact.addresses[i].pref === true) {
+                    wacAddress.types.push('PREF');
+                }
+            }
+            wacContact.addresses.push(wacAddress);
+        }
+
+    }
+
+    // photos
+    // can only store one photo URL
+    if(contact.photos && contact.photos.length > 0) {
+       wacContact.photoURL = contact.photos[0].value;
+    }
+
+    return wacContact;
+
+}
+
+function _wacToPg(contact) {
+    var i, j;
+    var pgContact = {};
+    
+    if(contact.id) {
+        pgContact.id = contact.id;
+    }
+    
+    // name
+    if(contact.firstName || contact.lastName) {
+        pgContact.name = {};
+        pgContact.name.givenName = contact.firstName;
+        pgContact.name.familyName = contact.lastName;
+        pgContact.displayName = contact.firstName + ' ' + contact.lastName;
+    }
+    
+    // nicknames
+    if(contact.nicknames && contact.nicknames.length > 0) {
+        pgContact.nickname = contact.nicknames[0];
+    }
+    
+    // phoneNumbers
+    if(contact.phoneNumbers && contact.phoneNumbers.length > 0) {
+        pgContact.phoneNumbers = [];
+        for(i = 0, j = contact.phoneNumbers.length ; i < j ; i += 1) {
+            var pgPhoneNumber = {};
+            pgPhoneNumber.value = contact.phoneNumbers[i].number;
+            if(contact.phoneNumbers[i].types &&
+               contact.phoneNumbers[i].types.length > 0) {
+                pgPhoneNumber.type = contact.phoneNumbers[i].types[0];
+                if(contact.phoneNumbers[i].types.indexOf('PREF') != -1) {
+                    pgPhoneNumber.pref = true;
+                }
+            }
+            pgContact.phoneNumbers.push(pgPhoneNumber);
+        }
+    }
+    
+    // emails
+    if(contact.emails && contact.emails.length > 0) {
+        pgContact.emails = [];
+        for(i = 0, j = contact.emails.length ; i < j ; i += 1) {
+            var pgEmailAddress = {};
+            pgEmailAddress.value = contact.emails[i].email;
+            if(contact.emails[i].types &&
+               contact.emails[i].types.length > 0) {
+                pgEmailAddress.type = contact.emails[i].types[0];
+                if(contact.emails[i].types.indexOf('PREF') != -1) {
+                    pgEmailAddress.pref = true;
+                }
+            }
+            pgContact.emails.push(pgEmailAddress);
+        }
+    }
+    
+    // addresses
+    if(contact.addresses && contact.addresses.length > 0) {
+        pgContact.addresses = [];
+        for(i = 0, j = contact.addresses.length ; i < j ; i += 1) {
+            var pgAddress = {};
+            pgAddress.country = contact.addresses[i].country;
+            pgAddress.postalCode = contact.addresses[i].postalCode;
+            pgAddress.region = contact.addresses[i].region;
+            pgAddress.locality = contact.addresses[i].city;
+            pgAddress.streetAddress = contact.addresses[i].streetAddress;
+            if(contact.addresses[i].types &&
+               contact.addresses[i].types.length > 0) {
+                pgAddress.type = contact.addresses[i].types[0];
+                if(contact.addresses[i].types.indexOf('PREF') != -1) {
+                    pgAddress.pref = true;
+                }
+            }
+            pgContact.addresses.push(pgAddress);
+        }
+    }
+    
+    // photos
+    // can only store one photo URL
+    if(contact.photoURL) {
+       pgContact.photos = [{value: contact.photoURL, type: "DEFAULT"}];
+    }
+
+    return pgContact;
+}
+
+function _buildWacFilters(fields, options) {
+    var i, j;
+    var wacFilters = {};
+    for(i = 0, j = fields.length ; i < j ; i += 1) {
+        if(allowedFilters.indexOf(fields[i]) != -1) {
+           wacFilters[fields[i]] = options.filter;
+        }
+    }
+}
+
+module.exports = {
+    save: function(success, fail, params) {
+        var pContact = params[0];
+        var gotBooks = function(books) {
+            var book = books[0];
+            var i, j;
+            var saveSuccess = function(wContact) {
+                success(_wacToPg(wContact));
+            };
+            var saveError = function(e) {
+                fail(e);
+            };
+            if(pContact.id) {
+                book.updateContact(saveSuccess, saveError, _pgToWac(pContact));
+            } else {
+                var wContact = book.createContact(_pgToWac(pContact));
+                book.addContact(saveSuccess, saveError, wContact);
+            }
+        };
+        var gotError = function(e) {
+            fail(e);
+        };
+        deviceapis.pim.contact.getAddressBooks(gotBooks, gotError);
+    },
+    remove: function(success, fail, params) {
+        var id = params[0];
+        var gotBooks = function(books) {
+            var book = books[0];
+            var removeSuccess = function() {
+                success();
+            };
+            var removeError = function(e) {
+                fail(e);
+            };
+            var toDelete = function(contacts) {
+                if(contacts.length === 1) {
+                    book.deleteContact(removeSuccess, removeError, 
contacts[0].id);
+                }
+            }
+            if(id) {
+                book.findContacts(toDelete, removeError, {id: id});
+            }
+        };
+        var gotError = function(e) {
+            fail(e);
+        };
+        deviceapis.pim.contact.getAddressBooks(gotBooks, gotError);
+    },
+    search: function(success, fail, params) {
+        var fields = params[0];
+        var options = params[1];
+        var wacFilters = _buildWacFilters(fields, options);
+        var gotBooks = function(books) {
+            var book = books[0];
+            var gotContacts = function(contacts) {
+                var i, j;
+                var pgContacts = [];
+                for(i = 0, j = contacts.length ; i < j ; i += 1) {
+                    pgContacts.push(_wacToPg(contacts[i]));
+                }
+                success(pgContacts);
+            };
+            var gotError = function(e) {
+                fail(e);
+            };
+            book.findContacts(gotContacts, gotError, wacFilters);
+        };
+        var gotError = function(e) {
+            fail(e);
+        };
+        deviceapis.pim.contact.getAddressBooks(gotBooks, gotError);
+    }
+};

Reply via email to