adding contact support names/phonenumbers/emails
diff --git a/Res/main.js b/Res/main.js
index d637842..851b3fd 100755
--- a/Res/main.js
+++ b/Res/main.js
@@ -173,25 +173,37 @@
console.log("The contact, "+myContact.displayName + ", is of the "+myContact.gender +" gender");
}
-function saveContact(contacts) {
- var onSuccess = function() {
- debugPrint("Save Success "+contacts);
- };
- var onError = function(contactError) {
- debugPrint("Error = "+contactError.code);
- };
- var contact = navigator.service.contacts.create();
- contact.displayName = "John";
- contact.nickname = "Plumber";
- contact.phoneNumbers = ["6047894567"]
- contact.emails = ["nomail@noset.com"]
- contact.urls = ["http://www.domain.com"]
-
- var name = new ContactName();
- name.givenName = "Jane";
- name.familtyName = "Doe";
- contact.name = name;
- contact.save(onSuccess, onError);
+function saveContact() {
+ try {
+ var onSuccess = function(result) {
+ debugPrint("Save Success: "+result.message);
+ };
+ var onError = function(contactError) {
+ debugPrint("Error = "+contactError.code);
+ };
+ var contact = navigator.service.contacts.create();
+ contact.name = new ContactName();
+ contact.name.familyName = "Doe";
+ contact.name.givenName = "John";
+ contact.displayName = "John Doe";
+ contact.nickname = "Plumber";
+ contact.phoneNumbers = [new ContactField("Mobile", "6047894567"), new ContactField("Home", "7789989674"), new ContactField("Other", "7789989673")];
+ contact.emails = [new ContactField("Personal", "nomail@noset.com"), new ContactField("Work", "nomail2@noset.com"), new ContactField("Other", "nomail3@noset.com")];
+ contact.urls = [new ContactField("work", "http://www.domain.com"), new ContactField("home", "http://www.domain2.com")];
+ contact.organization = new ContactOrganization();
+ contact.organization.name = "Nitobi Software Inc";
+ contact.organization.title = "Software Engineer";
+ contact.birthday = new Date();
+ contact.address = new ContactAddress();
+ contact.address.streetAddress = "200 Abbott Street";
+ contact.address.locality = "Vancouver";
+ contact.address.region = "BC";
+ contact.address.postalCode = "V6Z2X6";
+ contact.address.country = "Canada";
+ contact.save(onSuccess, onError);
+ } catch(e) {
+ debugPrint("Error Occured: "+e.message);
+ }
}
// Compass
diff --git a/Res/phonegap/contact.js b/Res/phonegap/contact.js
index e29c54c..4f9c6e1 100644
--- a/Res/phonegap/contact.js
+++ b/Res/phonegap/contact.js
@@ -25,6 +25,7 @@
* @param {ContactField[]} urls contact's web sites
* @param {DOMString} timezone UTC time zone offset
*/
+
var Contact = function(id, displayName, name, nickname, phoneNumbers, emails, addresses,
ims, organizations, revision, birthday, gender, note, photos, categories, urls, timezone) {
this.id = id || null;
@@ -173,8 +174,8 @@
*/
Contact.prototype.save = function(successCB, errorCB) {
// don't modify the original contact
- var bada_contact = {email: this.emails[0], phone: this.phoneNumbers[0], email: this.emails[0], url: this.urls[0]};
- PhoneGap.exec(successCB, errorCB, "com.phonegap.Contacts", "save", [bada_contact]);
+ var id = navigator.service.contacts.records.push(this) - 1;
+ PhoneGap.exec(successCB, errorCB, "com.phonegap.Contacts", "save", [id]);
};
/**
diff --git a/inc/Contacts.h b/inc/Contacts.h
index 48592ab..c21272e 100755
--- a/inc/Contacts.h
+++ b/inc/Contacts.h
@@ -8,24 +8,32 @@
#ifndef CONTACTS_H_
#define CONTACTS_H_
-#include <FApp.h>
+#include <FSocial.h>
#include "PhoneGapCommand.h"
+using namespace Osp::Social;
using namespace Osp::Base::Collection;
-using namespace Osp::App;
-class Contacts: public PhoneGapCommand, IAppControlEventListener {
+class Contacts: public PhoneGapCommand {
public:
Contacts(Web* pWeb);
virtual ~Contacts();
public:
void Run(const String& command);
- void Create(const String& query);
+ void Create(const int contactId);
void Find();
-public:
- virtual void OnAppControlCompleted (const Osp::Base::String &appControlId, const Osp::Base::String &operationId, const Osp::Base::Collection::IList *pResultList);
private:
- ArrayList* GetDataList(const String& query);
String callbackId;
+private:
+ void SetNickname(Contact& contact, const int cid);
+ void SetFirstName(Contact& contact, const int cid);
+ void SetLastName(Contact& contact, const int cid);
+ void SetPhoneNumbers(Contact& contact, const int cid);
+ void SetEmails(Contact& contact, const int cid);
+ void SetUrls(Contact& contact, const int cid);
+ void SetOrganization(Contact& contact, const int cid);
+ void SetBirthday(Contact& contact, const int cid);
+ void SetAddress(Contact& contact, const int cid);
+
};
#endif /* CONTACTS_H_ */
diff --git a/src/Contacts.cpp b/src/Contacts.cpp
index d900af9..bb4ab26 100755
--- a/src/Contacts.cpp
+++ b/src/Contacts.cpp
@@ -8,77 +8,226 @@
#include "../inc/Contacts.h"
Contacts::Contacts(Web* pWeb) : PhoneGapCommand(pWeb) {
- // TODO Auto-generated constructor stub
}
Contacts::~Contacts() {
- // TODO Auto-generated destructor stub
}
void
Contacts::Run(const String& command) {
if(!command.IsEmpty()) {
- // URL decoding
Uri commandUri;
commandUri.SetUri(command);
String method = commandUri.GetHost();
- callbackId = commandUri.GetPath();
- callbackId.Replace(L"/", L"");
- String contactInfo = commandUri.GetQuery();
-
-// AppLogDebug("Method %S, callbackId %S, hostAddr %S URI %S", method.GetPointer(), callbackId.GetPointer(), hostAddr.GetPointer(), uri.ToString().GetPointer());
- AppLogDebug("Method %S callbackId %S query %S", method.GetPointer(), callbackId.GetPointer() , contactInfo.GetPointer());
+ StringTokenizer strTok(commandUri.GetPath(), L"/");
+ if(strTok.GetTokenCount() < 2) {
+ AppLogException("Not enough params");
+ return;
+ }
+ strTok.GetNextToken(callbackId);
+ String contactId;
+ strTok.GetNextToken(contactId);
+ int cid = -1;
+ result r = E_SUCCESS;
+ r = Integer::Parse(contactId, cid);
+ if(IsFailed(r)) {
+ AppLogException("Could not retrieve contact ID");
+ }
+ AppLogDebug("Method %S callbackId %S contactId %d", method.GetPointer(), callbackId.GetPointer(), cid);
if(method == L"com.phonegap.Contacts.save" && !callbackId.IsEmpty()) {
- Create(contactInfo);
+ AppLogDebug("Saving contact...");
+ Create(cid);
}
}
}
-ArrayList*
-Contacts::GetDataList(const String& query) {
- ArrayList* pDataList = new ArrayList();
- pDataList->Construct();
- String* pStorage = new String(L"storageType:phone");
- pDataList->Add(*pStorage);
-
- String delim(L"&");
- StringTokenizer strTok(query, delim);
-
- while(strTok.HasMoreTokens()) {
- String* pData = new String();
- strTok.GetNextToken(*pData);
- pData->Replace(L"=", L":");
- AppLogDebug("param %S", pData->GetPointer());
- pDataList->Add(*pData);
+void
+Contacts::SetNickname(Contact& contact, const int cid) {
+ String* value = NULL;
+ String eval;
+ eval.Format(64, L"navigator.service.contacts.records[%d].nickname", cid);
+ value = pWeb->EvaluateJavascriptN(eval);
+ if(!value->IsEmpty()) {
+ AppLogDebug("nickname: %S", value->GetPointer());
+ contact.SetValue(CONTACT_PROPERTY_ID_NICK_NAME, *value);
}
-
- return pDataList;
+ delete value;
}
void
-Contacts::OnAppControlCompleted(const Osp::Base::String &appControlId,
- const Osp::Base::String &operationId,
- const Osp::Base::Collection::IList *pResultList) {
- AppLogDebug("appControlId %S operationId %S", appControlId.GetPointer(), operationId.GetPointer());
- for(int i = 0 ; i < pResultList->GetCount() ; i++) {
- String* obj = (String*)pResultList->GetAt(i);
- AppLogDebug("OBJ %S", obj->GetPointer());
+Contacts::SetFirstName(Contact& contact, const int cid) {
+ String* value = NULL;
+ String eval;
+ eval.Format(64, L"navigator.service.contacts.records[%d].name.givenName", cid);
+ value = pWeb->EvaluateJavascriptN(eval);
+ if(!value->IsEmpty()) {
+ AppLogDebug("First Name: %S", value->GetPointer());
+ contact.SetValue(CONTACT_PROPERTY_ID_FIRST_NAME, *value);
+ }
+ delete value;
+}
+
+void
+Contacts::SetLastName(Contact& contact, const int cid) {
+ String* value = NULL;
+ String eval;
+ eval.Format(64, L"navigator.service.contacts.records[%d].name.familyName", cid);
+ value = pWeb->EvaluateJavascriptN(eval);
+ if(value->IsEmpty()) {
+ AppLogDebug("Last Name: %S", value->GetPointer());
+ contact.SetValue(CONTACT_PROPERTY_ID_LAST_NAME, *value);
+ }
+ delete value;
+}
+
+void
+Contacts::SetPhoneNumbers(Contact& contact, const int cid) {
+ // Getting phone numbers length
+ String* lengthStr = NULL;
+ String eval;
+ eval.Format(64, L"navigator.service.contacts.records[%d].phoneNumbers.length", cid);
+ lengthStr = pWeb->EvaluateJavascriptN(eval);
+ if(!lengthStr->IsEmpty()) {
+ int length;
+ result r = Integer::Parse(*lengthStr, length);
+ if(IsFailed(r)) {
+ AppLogException("Could not get phoneNumbers length");
+ return;
+ }
+ delete lengthStr;
+ for(int i = 0 ; i < length ; i++) {
+ String* type = NULL;
+ String* number = NULL;
+
+ // Getting phone number type
+ eval.Clear();
+ eval.Format(64, L"navigator.service.contacts.records[%d].phoneNumbers[%d].type", cid, i);
+ type = pWeb->EvaluateJavascriptN(eval);
+
+ // Getting phone number
+ eval.Clear();
+ eval.Format(64, L"navigator.service.contacts.records[%d].phoneNumbers[%d].value", cid, i);
+ number = pWeb->EvaluateJavascriptN(eval);
+
+ if(type != NULL && number != NULL) {
+ if(*type == PHONENUMBER_TYPE_HOME) {
+ PhoneNumber phoneNumber(PHONENUMBER_TYPE_HOME, *number);
+ contact.AddPhoneNumber(phoneNumber);
+ } else if(*type == PHONENUMBER_TYPE_MOBILE) {
+ PhoneNumber phoneNumber(PHONENUMBER_TYPE_MOBILE, *number);
+ contact.AddPhoneNumber(phoneNumber);
+ } else if(*type == PHONENUMBER_TYPE_PAGER) {
+ PhoneNumber phoneNumber(PHONENUMBER_TYPE_PAGER, *number);
+ contact.AddPhoneNumber(phoneNumber);
+ } else if(*type == PHONENUMBER_TYPE_WORK) {
+ PhoneNumber phoneNumber(PHONENUMBER_TYPE_WORK, *number);
+ contact.AddPhoneNumber(phoneNumber);
+ } else if(*type == PHONENUMBER_TYPE_OTHER) {
+ PhoneNumber phoneNumber(PHONENUMBER_TYPE_OTHER, *number);
+ contact.AddPhoneNumber(phoneNumber);
+ }
+ }
+ delete type;
+ delete number;
+ }
}
}
void
-Contacts::Create(const String& query) {
- ArrayList* pDataList = GetDataList(query);
- AppControl* pAc = AppManager::FindAppControlN(APPCONTROL_CONTACT,OPERATION_ADD);
- if(pAc)
- {
- pAc->Start(pDataList, this);
- delete pAc;
+Contacts::SetEmails(Contact& contact, const int cid) {
+ // Getting phone numbers length
+ String* lengthStr = NULL;
+ String eval;
+ eval.Format(64, L"navigator.service.contacts.records[%d].emails.length", cid);
+ lengthStr = pWeb->EvaluateJavascriptN(eval);
+ if(!lengthStr->IsEmpty()) {
+ int length;
+ result r = Integer::Parse(*lengthStr, length);
+ if(IsFailed(r)) {
+ AppLogException("Could not get emails length");
+ return;
+ }
+ delete lengthStr;
+ for(int i = 0 ; i < length ; i++) {
+ String* type = NULL;
+ String* address = NULL;
+
+ // Getting phone number type
+ eval.Clear();
+ eval.Format(64, L"navigator.service.contacts.records[%d].emails[%d].type", cid, i);
+ type = pWeb->EvaluateJavascriptN(eval);
+
+ // Getting phone number
+ eval.Clear();
+ eval.Format(64, L"navigator.service.contacts.records[%d].emails[%d].value", cid, i);
+ address = pWeb->EvaluateJavascriptN(eval);
+
+ if(type != NULL && address != NULL) {
+ if(*type == EMAIL_TYPE_PERSONAL) {
+ Email email(EMAIL_TYPE_PERSONAL, *address);
+ contact.AddEmail(email);
+ } else if(*type == EMAIL_TYPE_WORK) {
+ Email email(EMAIL_TYPE_WORK, *address);
+ contact.AddEmail(email);
+ } else if(*type == EMAIL_TYPE_OTHER) {
+ Email email(EMAIL_TYPE_OTHER, *address);
+ contact.AddEmail(email);
+ }
+ }
+ delete type;
+ delete address;
+ }
}
- pDataList->RemoveAll(true);
- delete pDataList;
+}
+
+void
+Contacts::SetUrls(Contact& contact, const int cid) {
+}
+
+void
+Contacts::SetOrganization(Contact& contact, const int cid) {
+
+}
+void
+Contacts::SetBirthday(Contact& contact, const int cid) {
+}
+
+void
+Contacts::SetAddress(Contact& contact, const int cid) {
+}
+
+void
+Contacts::Create(const int cid) {
+ result r = E_SUCCESS;
+ Addressbook addressbook;
+
+ r = addressbook.Construct();
+
+ if(IsFailed(r)) {
+ AppLogException("Could not create AddressBook");
+ return;
+ }
+
+ Contact contact;
+ SetNickname(contact, cid);
+ SetFirstName(contact, cid);
+ SetLastName(contact, cid);
+ SetPhoneNumbers(contact, cid);
+ SetEmails(contact, cid);
+ SetUrls(contact, cid);
+ SetOrganization(contact, cid);
+ SetBirthday(contact, cid);
+ SetAddress(contact, cid);
+
+ r = addressbook.AddContact(contact);
+
+ if(IsFailed(r)) {
+ AppLogException("Could not add contact");
+ } else {
+ AppLogDebug("Contact Successfully Added");
+ }
}
void