From 71cd177a3e28e5322131a0f9457d95cb0e632582 Mon Sep 17 00:00:00 2001 From: Andrzej Popowski Date: Thu, 7 Jan 2016 13:51:52 +0100 Subject: [PATCH] [Contact] - ContactExtension added Change-Id: I3be65fce0c7dd8f5ebabf7286b52eb6bc8fef15f Signed-off-by: Andrzej Popowski --- src/contact/contact_extension.cc | 3 +- src/contact/contact_util.cc | 225 ++++++++++++++++++++++ src/contact/contact_util.h | 4 + src/contact/js/contact.js | 56 +++++- src/contact/js/contact_data_structures.js | 82 ++++++++ 5 files changed, 366 insertions(+), 4 deletions(-) diff --git a/src/contact/contact_extension.cc b/src/contact/contact_extension.cc index 3746a005..b7bad1e3 100755 --- a/src/contact/contact_extension.cc +++ b/src/contact/contact_extension.cc @@ -32,7 +32,8 @@ ContactExtension::ContactExtension() { "tizen.ContactPhoneNumber", "tizen.ContactEmailAddress", "tizen.ContactGroup", "tizen.ContactRelationship", "tizen.ContactInstantMessenger", "tizen.Contact", - "tizen.AddressBook", NULL}; + "tizen.AddressBook", "tizen.ContactExtension", + NULL}; SetExtraJSEntryPoints(entry_points); } diff --git a/src/contact/contact_util.cc b/src/contact/contact_util.cc index 3ce66d0b..d12d72a1 100755 --- a/src/contact/contact_util.cc +++ b/src/contact/contact_util.cc @@ -1635,6 +1635,227 @@ PlatformResult ExportContactRelationshipToContactsRecord( return PlatformResult(ErrorCode::NO_ERROR); } +PlatformResult ImportContactExtensionFromContactsRecord( + contacts_record_h contacts_record, unsigned int index, + JsonObject* out_ptr) { + LoggerD("Enter"); + // contacts_record is protected by unique_ptr and its ownership is not passed + // here + if (!contacts_record) { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Contacts record is null"); + } + + contacts_record_h child_record = nullptr; + int err = contacts_record_get_child_record_at_p( + contacts_record, _contacts_contact.extension, index, &child_record); + if (CONTACTS_ERROR_NONE != err && CONTACTS_ERROR_NO_DATA != err) { + return PlatformResult(ErrorCode::NO_ERROR); + } + + int data1 = 0; + PlatformResult status = ContactUtil::GetIntFromRecord(child_record, + _contacts_extension.data1, &data1); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + out_ptr->insert(std::make_pair(std::string("data1"), + picojson::value(data1 ? JsonValue{static_cast(data1)} : JsonValue{}))); + + auto insert_data = [&](unsigned int id, const std::string& label) { + char* data = nullptr; + status = ContactUtil::GetStrFromRecord(child_record, id, &data); + if (status && data) { + out_ptr->insert(std::make_pair(std::string(label), + picojson::value(JsonString{data}))); + } + }; + + insert_data(_contacts_extension.data2, "data2"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data3, "data3"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data4, "data4"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data5, "data5"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data6, "data6"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data7, "data7"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data8, "data8"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data9, "data9"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data10, "data10"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data11, "data11"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + insert_data(_contacts_extension.data12, "data12"); + if (!status) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + return PlatformResult(ErrorCode::NO_ERROR); +} + +PlatformResult ExportContactExtensionToContactsRecord( + contacts_record_h contacts_record, const JsonObject& in) { + LoggerD("Enter"); + // contacts_record is protected by unique_ptr and its ownership is not passed + // here + + if (!contacts_record) { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Contacts record is null"); + } + + contacts_record_h child_record = nullptr; + int err = contacts_record_create(_contacts_extension._uri, &child_record); + PlatformResult status = + ContactUtil::ErrorChecker(err, "Fail to create child_record in database"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + ContactsRecordHPtr record(&child_record, ContactsDeleter); + + status = ContactUtil::SetIntInRecord( + child_record, _contacts_extension.data1, static_cast(FromJson(in, "data1"))); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + auto set_data = [&](int id, const char* label) { + if (!IsNull(in, label)) { + status = ContactUtil::SetStrInRecord( + child_record, id, + FromJson(in, label).c_str()); + } + }; + + set_data(_contacts_extension.data2, "data2"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data3, "data3"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data4, "data4"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data5, "data5"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data6, "data6"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data7, "data7"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data8, "data8"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data9, "data9"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data10, "data10"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data11, "data11"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + set_data(_contacts_extension.data12, "data12"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + err = contacts_record_add_child_record( + contacts_record, _contacts_contact.extension, child_record); + status = ContactUtil::ErrorChecker( + err, "Fail to set number value to child_record"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; + } + + record.release(); + + return PlatformResult(ErrorCode::NO_ERROR); +} + PlatformResult ImportContactInstantMessengerFromContactsRecord( contacts_record_h contacts_record, unsigned int index, JsonObject* out_ptr) { @@ -2242,6 +2463,8 @@ PlatformResult ImportContactFromContactsRecord( ImportContactInstantMessengerFromContactsRecord}, {"relationships", _contacts_contact.relationship, ImportContactRelationshipFromContactsRecord}, + {"extensions", _contacts_contact.extension, + ImportContactExtensionFromContactsRecord} }; for (auto& data : imports) { @@ -2415,6 +2638,8 @@ PlatformResult ExportContactToContactsRecord(contacts_record_h contacts_record, ExportContactInstantMessengerToContactsRecord}, {_contacts_contact.relationship, "relationships", ExportContactRelationshipToContactsRecord}, + {_contacts_contact.extension, "extensions", + ExportContactExtensionToContactsRecord}, }; for (auto& data : exports) { diff --git a/src/contact/contact_util.h b/src/contact/contact_util.h index ed806575..2089693f 100644 --- a/src/contact/contact_util.h +++ b/src/contact/contact_util.h @@ -119,6 +119,10 @@ common::PlatformResult ImportContactRelationshipFromContactsRecord( contacts_record_h contacts_record, unsigned int index, JsonObject *out); common::PlatformResult ExportContactRelationshipToContactsRecord( contacts_record_h contacts_record, const JsonObject &in); +common::PlatformResult ImportContactExtensionFromContactsRecord( + contacts_record_h contacts_record, unsigned int index, JsonObject *out); +common::PlatformResult ExportContactExtensionToContactsRecord( + contacts_record_h contacts_record, const JsonObject &in); common::PlatformResult ImportContactInstantMessengerFromContactsRecord( contacts_record_h contacts_record, unsigned int index, JsonObject *out); common::PlatformResult ExportContactInstantMessengerToContactsRecord( diff --git a/src/contact/js/contact.js b/src/contact/js/contact.js index edf09d37..1db49ffd 100755 --- a/src/contact/js/contact.js +++ b/src/contact/js/contact.js @@ -53,6 +53,7 @@ var Contact = function(data) { var _emails = []; var _messengers = []; var _relationships = []; + var _extensions = []; var _birthday = null; var _anniversaries = []; var _organizations = []; @@ -210,6 +211,15 @@ var Contact = function(data) { }, enumerable: true }, + extensions: { + get: function() { + return _extensions; + }, + set: function(v) { + _extensions = _sanitizeArray(v, ContactExtension, _extensions); + }, + enumerable: true + }, birthday: { get: function() { return _birthday; @@ -479,6 +489,41 @@ var _contactRelationshipsToString = function(obj) { return str; }; +// Convert extension to string +// Format: +// X-EXTENSION:;;...; +var _contactExtensionsToString = function(obj) { + var str = ''; + var label = null; + + if (obj.extensions === null || !type_.isArray(obj.extensions)) { + return ''; + } + for (var i = 0; i < obj.extensions.length; i++) { + if (!obj.extensions[i] instanceof ContactExtension) { + return ''; + } + str += 'X-EXTENSION:'; + + if (obj.extensions[i].data1 === null) { + str += '0'; + } else { + str += String(obj.extensions[i].data1); + } + + for (var j = 2; j <= 12; j++) { + str += ';'; + label = 'data' + j; + if (obj.extensions[i][label] && obj.extensions[i][label].length > 0) { + str += obj.extensions[i][label]; + } + } + + str += '\n'; + } + return str; +}; + // Convert messengers to string var _contactInstantMessengeToString = function(obj) { if (obj.messengers.length === 0 || !obj.messengers[0] instanceof ContactInstantMessenger) { @@ -554,6 +599,9 @@ Contact.prototype.convertToString = function(format) { // set relationship str += _contactRelationshipsToString(this); + // set extension + str += _contactExtensionsToString(this); + // set emails str += _contactEmailToString(this); @@ -579,9 +627,11 @@ Contact.prototype.convertToString = function(format) { str += _contactInstantMessengeToString(this); // set last revision - str += 'REV:' + this.lastUpdated.getYear() + '-' + this.lastUpdated.getMonth() + - '-' + this.lastUpdated.getDay() + 'T' + this.lastUpdated.getHours() + ':' + - this.lastUpdated.getMinutes() + ':' + this.lastUpdated.getSeconds() + 'Z\n'; + if (this.lastUpdated) { + str += 'REV:' + this.lastUpdated.getYear() + '-' + this.lastUpdated.getMonth() + + '-' + this.lastUpdated.getDay() + 'T' + this.lastUpdated.getHours() + ':' + + this.lastUpdated.getMinutes() + ':' + this.lastUpdated.getSeconds() + 'Z\n'; + } str += 'END:VCARD\n'; diff --git a/src/contact/js/contact_data_structures.js b/src/contact/js/contact_data_structures.js index 433f2e57..62fed526 100755 --- a/src/contact/js/contact_data_structures.js +++ b/src/contact/js/contact_data_structures.js @@ -699,6 +699,87 @@ var ContactRelationship = function(relativeName, type) { }); }; +var ContactExtension = function(data) { + validator_.isConstructorCall(this, ContactExtension); + + var _data1 = 0; + + Object.defineProperties(this, { + data1: { + get: function () { + return _data1; + }, + set: function (v) { + _data1 = converter_.toLong(v, false); + }, + enumerable: true + }, + data2: { + value: null, + writable: true, + enumerable: true + }, + data3: { + value: null, + writable: true, + enumerable: true + }, + data4: { + value: null, + writable: true, + enumerable: true + }, + data5: { + value: null, + writable: true, + enumerable: true + }, + data6: { + value: null, + writable: true, + enumerable: true + }, + data7: { + value: null, + writable: true, + enumerable: true + }, + data8: { + value: null, + writable: true, + enumerable: true + }, + data9: { + value: null, + writable: true, + enumerable: true + }, + data10: { + value: null, + writable: true, + enumerable: true + }, + data11: { + value: null, + writable: true, + enumerable: true + }, + data12: { + value: null, + writable: true, + enumerable: true + } + }); + + if (type_.isObject(data)) { + for (var prop in data) { + if (this.hasOwnProperty(prop)) { + this[prop] = data[prop]; + } + } + } +}; + var ContactInstantMessenger = function(imAddress, type) { validator_.isConstructorCall(this, ContactInstantMessenger); @@ -752,4 +833,5 @@ tizen.ContactPhoneNumber = ContactPhoneNumber; tizen.ContactEmailAddress = ContactEmailAddress; tizen.ContactGroup = ContactGroup; tizen.ContactRelationship = ContactRelationship; +tizen.ContactExtension = ContactExtension; tizen.ContactInstantMessenger = ContactInstantMessenger; -- 2.34.1