From 9781c63c0d984c79ddbee6bb0a1019e93ca8a2fd Mon Sep 17 00:00:00 2001 From: Andrzej Popowski Date: Tue, 10 May 2016 13:55:22 +0200 Subject: [PATCH] [Contact] - Improving performance of the functions find [Verification] - TCT results 100% (459/459/0/0/0) Change-Id: I7de61960bb809ac56b65a807d0e1bfb0cd11f66d Signed-off-by: Andrzej Popowski --- src/contact/addressbook.cc | 8 +++--- src/contact/contact_manager.cc | 31 +++++++++------------- src/contact/contact_search_engine.cc | 50 ++++++++++++++++++++++++----------- src/contact/contact_util.cc | 10 +++---- src/contact/contact_util.h | 2 +- src/contact/js/address_book.js | 51 ++++++++++++++++++------------------ src/contact/js/contact_manager.js | 10 +++++-- 7 files changed, 91 insertions(+), 71 deletions(-) diff --git a/src/contact/addressbook.cc b/src/contact/addressbook.cc index 25e1c25..8431eff 100755 --- a/src/contact/addressbook.cc +++ b/src/contact/addressbook.cc @@ -73,7 +73,7 @@ PlatformResult AddressBookGet(const JsonObject& args, JsonObject& out) { ContactUtil::ImportContactFromContactsRecord(*contacts_record_ptr, &out); if (status.IsError()) return status; - status = ContactUtil::UpdateAdditionalInformation(contacts_record_ptr, &out); + status = ContactUtil::UpdateAdditionalInformation(*contacts_record_ptr, &out); if (status.IsError()) return status; return PlatformResult(ErrorCode::NO_ERROR); @@ -131,7 +131,7 @@ PlatformResult AddressBookAdd(const JsonObject& args, JsonObject& out) { out.insert(std::make_pair("id", JsonValue{std::to_string(id)})); - status = ContactUtil::UpdateAdditionalInformation(contacts_record_ptr, &out); + status = ContactUtil::UpdateAdditionalInformation(*contacts_record_ptr, &out); if (status.IsError()) return status; return PlatformResult(ErrorCode::NO_ERROR); @@ -178,7 +178,7 @@ PlatformResult AddressBookUpdate(const JsonObject& args, JsonObject& out) { } } - status = ContactUtil::UpdateAdditionalInformation(contacts_record_ptr, &out); + status = ContactUtil::UpdateAdditionalInformation(*contacts_record_ptr, &out); if (status.IsError()) return status; return PlatformResult(ErrorCode::NO_ERROR); @@ -329,7 +329,7 @@ PlatformResult AddressBookUpdateBatch(const JsonObject& args, JsonArray& out) { to_update, JsonCast(item)); if (status.IsError()) return status; JsonObject out_object; - status = ContactUtil::UpdateAdditionalInformation(x, &out_object); + status = ContactUtil::UpdateAdditionalInformation(*x, &out_object); if (status.IsError()) return status; out.push_back(JsonValue{out_object}); diff --git a/src/contact/contact_manager.cc b/src/contact/contact_manager.cc index 5ec5d99..319811f 100755 --- a/src/contact/contact_manager.cc +++ b/src/contact/contact_manager.cc @@ -851,22 +851,19 @@ PlatformResult ContactManagerFind(const JsonObject& args, JsonArray& out) { for (int i = 0; i < record_count; i++) { contacts_record_h contacts_record; - error_code = - contacts_list_get_current_record_p(person_list, &contacts_record); + error_code = contacts_list_get_current_record_p(person_list, &contacts_record); if (error_code != CONTACTS_ERROR_NONE || contacts_record == NULL) { LoggerW("Failed group record (ret:%d)", error_code); continue; } - int id_value = 0; - error_code = contacts_record_get_int(contacts_record, _contacts_person.id, - &id_value); - - status = - ContactUtil::ErrorChecker(error_code, "Failed contacts_record_get_int"); - if (status.IsError()) return status; + JsonObject obj; + status = ContactUtil::ImportPersonFromContactsRecord(contacts_record, &obj); + if (status.IsError()) { + return status; + } - out.push_back(JsonValue(static_cast(id_value))); + out.push_back(JsonValue(obj)); contacts_list_next(person_list); } @@ -1049,15 +1046,13 @@ PlatformResult ContactManagerFindByUsageCount(const JsonObject& args, JsonArray& continue; } - int id_value = 0; - error_code = contacts_record_get_int(contacts_record, _contacts_person_usage.person_id, - &id_value); - - status = - ContactUtil::ErrorChecker(error_code, "Failed contacts_record_get_int"); - if (status.IsError()) return status; + JsonObject obj; + status = ContactUtil::ImportPersonFromContactsRecord(contacts_record, &obj); + if (status.IsError()) { + return status; + } - out.push_back(JsonValue(static_cast(id_value))); + out.push_back(JsonValue(obj)); contacts_list_next(person_list); } diff --git a/src/contact/contact_search_engine.cc b/src/contact/contact_search_engine.cc index e2581e9..1457318 100644 --- a/src/contact/contact_search_engine.cc +++ b/src/contact/contact_search_engine.cc @@ -576,12 +576,19 @@ PlatformResult ContactSearchEngine::GetAllContacts(picojson::array* out) { continue; } - int id_value = 0; - error_code = contacts_record_get_int(record, _contacts_contact.id, &id_value); - status = ContactUtil::ErrorChecker(error_code, "Failed contacts_record_get_int"); - if (!status) return status; + JsonObject obj; + + status = ContactUtil::ImportContactFromContactsRecord(record, &obj); + if (!status) { + return status; + } + + status = ContactUtil::UpdateAdditionalInformation(record, &obj); + if (!status) { + return status; + } - out->push_back(picojson::value(static_cast(id_value))); + out->push_back(picojson::value(obj)); error_code = contacts_list_next(list); @@ -601,16 +608,17 @@ PlatformResult ContactSearchEngine::GetContacts(Iterator begin, Iterator end, for (auto iter = begin; iter != end; ++iter) { const auto id = *iter; - if (is_addressbook_id_is_set_) { - contacts_record_h record = nullptr; - int error_code = contacts_db_get_record(_contacts_contact._uri, id, &record); - if (CONTACTS_ERROR_NONE != error_code) { - LoggerE("Failed to get contact with ID: %d", id); - continue; - } + contacts_record_h record = nullptr; + int error_code = contacts_db_get_record(_contacts_contact._uri, id, &record); + if (CONTACTS_ERROR_NONE != error_code) { + LoggerE("Failed to get contact with ID: %d", id); + continue; + } - ContactUtil::ContactsRecordHPtr record_ptr(&record, - ContactUtil::ContactsDeleter); + ContactUtil::ContactsRecordHPtr record_ptr(&record, + ContactUtil::ContactsDeleter); + + if (is_addressbook_id_is_set_) { int address_book_id = 0; error_code = contacts_record_get_int(record, @@ -627,7 +635,19 @@ PlatformResult ContactSearchEngine::GetContacts(Iterator begin, Iterator end, } } - out->push_back(picojson::value(static_cast(id))); + JsonObject obj; + + PlatformResult status = ContactUtil::ImportContactFromContactsRecord(record, &obj); + if (!status) { + return status; + } + + status = ContactUtil::UpdateAdditionalInformation(*record_ptr, &obj); + if (!status) { + return status; + } + + out->push_back(picojson::value(obj)); } return PlatformResult(ErrorCode::NO_ERROR); diff --git a/src/contact/contact_util.cc b/src/contact/contact_util.cc index ff55144..bcccd3b 100755 --- a/src/contact/contact_util.cc +++ b/src/contact/contact_util.cc @@ -3211,11 +3211,11 @@ PlatformResult ExportPersonToContactsRecord(contacts_record_h record, } PlatformResult UpdateAdditionalInformation( - const ContactsRecordHPtr& contacts_record_ptr, JsonObject* out_ptr) { + const contacts_record_h contacts_record, JsonObject* out_ptr) { JsonObject& out = *out_ptr; int int_value = -1; PlatformResult status = ContactUtil::GetIntFromRecord( - *contacts_record_ptr, _contacts_contact.person_id, &int_value); + contacts_record, _contacts_contact.person_id, &int_value); if (status.IsError()) { LoggerE("Error: %s", status.message().c_str()); return status; @@ -3223,7 +3223,7 @@ PlatformResult UpdateAdditionalInformation( out.insert(std::make_pair("personId", JsonValue{std::to_string(int_value)})); status = ContactUtil::GetIntFromRecord( - *contacts_record_ptr, _contacts_contact.address_book_id, &int_value); + contacts_record, _contacts_contact.address_book_id, &int_value); if (status.IsError()) { LoggerE("Error: %s", status.message().c_str()); return status; @@ -3232,7 +3232,7 @@ PlatformResult UpdateAdditionalInformation( out.insert( std::make_pair("addressBookId", JsonValue{std::to_string(int_value)})); status = ContactUtil::GetIntFromRecord( - *contacts_record_ptr, _contacts_contact.changed_time, &int_value); + contacts_record, _contacts_contact.changed_time, &int_value); if (status.IsError()) { LoggerE("Error: %s", status.message().c_str()); return status; @@ -3242,7 +3242,7 @@ PlatformResult UpdateAdditionalInformation( std::make_pair("lastUpdated", JsonValue{static_cast(int_value)})); bool bool_value = false; status = ContactUtil::GetBoolFromRecord( - *contacts_record_ptr, _contacts_contact.is_favorite, &bool_value); + contacts_record, _contacts_contact.is_favorite, &bool_value); if (status.IsError()) { LoggerE("Error: %s", status.message().c_str()); return status; diff --git a/src/contact/contact_util.h b/src/contact/contact_util.h index f44b1f6..219e2ea 100644 --- a/src/contact/contact_util.h +++ b/src/contact/contact_util.h @@ -83,7 +83,7 @@ common::PlatformResult GetNumberOfChildRecord(contacts_record_h contacts_record, int *child_count); common::PlatformResult UpdateAdditionalInformation( - const ContactsRecordHPtr &contacts_record_ptr, JsonObject *out); + const contacts_record_h contacts_record, JsonObject *out); common::PlatformResult ImportContactNameFromContactsRecord( contacts_record_h contacts_record, JsonObject *out, bool *is_contact_name); diff --git a/src/contact/js/address_book.js b/src/contact/js/address_book.js index 8c36832..b99dbb1 100755 --- a/src/contact/js/address_book.js +++ b/src/contact/js/address_book.js @@ -97,7 +97,6 @@ var _contactChangeListener = function(result) { } }; - var AddressBook = function(accountId, name) { validator_.isConstructorCall(this, AddressBook); @@ -161,6 +160,28 @@ var AddressBook = function(accountId, name) { }); }; +function _prepareContact(data) { + return _editGuard.run(function() { + var contact = new Contact(data); + + if (contact.name instanceof ContactName) { + contact.name.displayName = ''; + if (type_.isString(contact.name.firstName)) { + contact.name.displayName = contact.name.firstName; + if (type_.isString(contact.name.lastName)) { + contact.name.displayName += ' ' + contact.name.lastName; + } + } else if (type_.isArray(contact.name.nicknames) && + type_.isString(contact.name.nicknames[0])) { + contact.name.displayName = contact.name.nicknames[0]; + } else if (type_.isString(contact.name.nicknames)) { + contact.name.displayName = contact.name.nicknames; + } + } + return contact; + }); +} + AddressBook.prototype.get = function() { var args = validator_.validateArgs(arguments, [{ name: 'id', @@ -182,28 +203,7 @@ AddressBook.prototype.get = function() { throw native_.getErrorObject(result); } - return _editGuard.run(function() { - var contact = new Contact(native_.getResultObject(result)); - - if (contact.name instanceof ContactName) { - contact.name.displayName = ''; - if (type_.isString(contact.name.firstName)) { - contact.name.displayName = contact.name.firstName; - if (type_.isString(contact.name.lastName)) { - contact.name.displayName += ' ' + contact.name.lastName; - } - } else if (type_.isArray(contact.name.nicknames) && - type_.isString(contact.name.nicknames[0])) { - contact.name.displayName = contact.name.nicknames[0]; - } else if (type_.isString(contact.name.nicknames)) { - contact.name.displayName = contact.name.nicknames; - } - } - - - - return contact; - }); + return _prepareContact(native_.getResultObject(result)); }; AddressBook.prototype.add = function() { @@ -510,9 +510,8 @@ AddressBook.prototype.find = function(successCallback, errorCallback, filter, so var _contacts = []; var _result = native_.getResultObject(result); _result.forEach(function(data) { - try { - _contacts.push(self.get(String(data))); - } catch (e) {} + var contact = _prepareContact(data); + _contacts.push(contact); }); native_.callIfPossible(successCallback, _contacts); diff --git a/src/contact/js/contact_manager.js b/src/contact/js/contact_manager.js index 12123c3..3b52644 100755 --- a/src/contact/js/contact_manager.js +++ b/src/contact/js/contact_manager.js @@ -396,7 +396,10 @@ ContactManager.prototype.find = function() { var _result = native_.getResultObject(result); var retval = []; for (var i = 0; i < _result.length; ++i) { - retval.push(self.get(String(_result[i]))); + var person = _editGuard.run(function() { + return new Person(_result[i]); + }); + retval.push(person); } args.successCallback(retval); } else { @@ -466,7 +469,10 @@ ContactManager.prototype.findByUsageCount = function() { var _result = native_.getResultObject(result); var retval = []; for (var i = 0; i < _result.length; ++i) { - retval.push(self.get(String(_result[i]))); + var person = _editGuard.run(function() { + return new Person(_result[i]); + }); + retval.push(person); } args.successCallback(retval); } else { -- 2.7.4