From: Rafal Galka Date: Mon, 29 Dec 2014 08:42:45 +0000 (+0100) Subject: [Contact] AddressBook.find implementation (without filters & sorting) X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~727 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a0c41ce7e19b2b48ae6d7cb6d1180c20f505c7d2;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Contact] AddressBook.find implementation (without filters & sorting) [Verification] TCT test "AddressBook_find" should pass Change-Id: Ibde12ed4351ed2d70e1279c209fd009a4f0ad02a Signed-off-by: Wojciech Kosowicz --- diff --git a/src/contact/addressbook.cc b/src/contact/addressbook.cc index 72e6aadd..10a9b081 100644 --- a/src/contact/addressbook.cc +++ b/src/contact/addressbook.cc @@ -268,11 +268,50 @@ void AddressBook_batchFunc(/*NativeFunction impl, */const char* single_arg_name, throw common::NotFoundException("Not implemented"); } -void AddressBook_find(const JsonObject& args, JsonObject&) { +void AddressBook_find(const JsonObject& args, JsonArray& array) { ContactUtil::CheckDBConnection(); - // @todo implement - throw common::NotFoundException("Not implemented"); + // TODO implement contact filter and sorting. + const JsonObject& address_book = FromJson(args, "addressBook"); + long addressbook_id = common::stol(FromJson(address_book, "id")); + // Read calendar by ID + int error_code = 0; + + contacts_query_h query = nullptr; + contacts_filter_h filter = nullptr; + contacts_list_h list = nullptr; + + error_code = contacts_query_create(_contacts_contact._uri, &query); + ContactUtil::ErrorChecker(error_code, "Failed contacts_query_create"); + ContactUtil::ContactsQueryHPtr query_ptr(&query, ContactUtil::ContactsQueryDeleter); + error_code = contacts_filter_create(_contacts_contact._uri, &filter); + ContactUtil::ErrorChecker(error_code, "Failed contacts_filter_create"); + ContactUtil::ContactsFilterPtr filter_ptr(filter, ContactUtil::ContactsFilterDeleter); + error_code = contacts_filter_add_int(filter, _contacts_contact.address_book_id, + CONTACTS_MATCH_EQUAL, addressbook_id); + ContactUtil::ErrorChecker(error_code, "Failed contacts_filter_add_int"); + error_code = contacts_query_set_filter(query, filter); + ContactUtil::ErrorChecker(error_code, "Failed contacts_query_set_filter"); + error_code = contacts_db_get_records_with_query(query, 0, 0, &list); + ContactUtil::ErrorChecker(error_code, "Failed contacts_db_get_records_with_query"); + ContactUtil::ContactsListHPtr list_ptr(&list, ContactUtil::ContactsListDeleter); + + int record_count = 0; + error_code = contacts_list_get_count(list, &record_count); + + contacts_list_first(list); + for (unsigned int i = 0; i < record_count; i++) { + contacts_record_h record; + error_code = contacts_list_get_current_record_p(list, &record); + ContactUtil::ErrorChecker(error_code, "Failed contacts_list_get_current_record_p"); + + int id_value = 0; + error_code = contacts_record_get_int(record, _contacts_contact.id, &id_value); + ContactUtil::ErrorChecker(error_code, "Failed contacts_record_get_int"); + + array.push_back(JsonValue(static_cast(id_value))); + contacts_list_next(list); + } } void AddressBook_addGroup(const JsonObject& args, JsonObject& out) { diff --git a/src/contact/addressbook.h b/src/contact/addressbook.h index c5fe9628..7b01ce18 100644 --- a/src/contact/addressbook.h +++ b/src/contact/addressbook.h @@ -28,7 +28,7 @@ void AddressBook_get(const JsonObject& args, JsonObject& out); void AddressBook_add(const JsonObject& args, JsonObject& out); void AddressBook_update(const JsonObject& args, JsonObject& out); void AddressBook_remove(const JsonObject& args, JsonObject&); -void AddressBook_find(const JsonObject& args, JsonObject&); +void AddressBook_find(const JsonObject& args, JsonArray& array); void AddressBook_addGroup(const JsonObject& args, JsonObject& out); void AddressBook_getGroup(const JsonObject& args, JsonObject& out); void AddressBook_updateGroup(const JsonObject& args, JsonObject&); diff --git a/src/contact/contact_instance.cc b/src/contact/contact_instance.cc index 911389a4..f43209ed 100644 --- a/src/contact/contact_instance.cc +++ b/src/contact/contact_instance.cc @@ -52,7 +52,7 @@ ContactInstance::ContactInstance() { REGISTER_SYNC("AddressBook_add", AddressBook_add); REGISTER_SYNC("AddressBook_update", AddressBook_update); REGISTER_SYNC("AddressBook_remove", AddressBook_remove); - REGISTER_SYNC("AddressBook_find", AddressBook_find); + REGISTER_ASYNC("AddressBook_find", AddressBook_find); REGISTER_SYNC("AddressBook_addGroup", AddressBook_addGroup); REGISTER_SYNC("AddressBook_getGroup", AddressBook_getGroup); REGISTER_SYNC("AddressBook_updateGroup", AddressBook_updateGroup); @@ -129,10 +129,30 @@ void ContactInstance::AddressBook_remove(const JsonValue& args, } void ContactInstance::AddressBook_find(const JsonValue& args, JsonObject& out) { - JsonValue val{JsonObject{}}; - AddressBook::AddressBook_find(common::JsonCast(args), - val.get()); - ReportSuccess(out); + LoggerD("entered"); + const double callback_id = args.get("callbackId").get(); + + auto get = [=](const std::shared_ptr & response) -> void { + try { + JsonValue result = JsonValue(JsonArray()); + AddressBook::AddressBook_find(common::JsonCast(args), + result.get()); + ReportSuccess(result, response->get()); + } catch (const PlatformException& e) { + ReportError(e, response->get()); + } + }; + + auto get_response = [this, callback_id](const std::shared_ptr & response) { + picojson::object& obj = response->get(); + obj.insert(std::make_pair("callbackId", callback_id)); + LoggerD("response is %s", response->serialize().c_str()); + PostMessage(response->serialize().c_str()); + + }; + + TaskQueue::GetInstance().Queue(get, get_response, + std::shared_ptr(new JsonValue(JsonObject()))); } void ContactInstance::AddressBook_addGroup(const JsonValue& args,