// Contact Manager
REGISTER_ASYNC("ContactManager_getAddressBooks", ContactManager_getAddressBooks);
REGISTER_SYNC("ContactManager_getAddressBook", ContactManager_getAddressBook);
+ REGISTER_SYNC("ContactManager_addAddressBook", ContactManager_addAddressBook);
+ REGISTER_SYNC("ContactManager_removeAddressBook", ContactManager_removeAddressBook);
REGISTER_SYNC("ContactManager_get", ContactManager_get);
REGISTER_SYNC("ContactManager_update", ContactManager_update);
REGISTER_ASYNC("ContactManager_updateBatch", ContactManager_updateBatch);
std::shared_ptr<JsonValue>(new JsonValue(JsonObject())));
}
-void ContactInstance::ContactManager_getAddressBook(const JsonValue& args,
- JsonObject& out) {
+void ContactInstance::ContactManager_getAddressBook(const JsonValue& args, JsonObject& out) {
JsonValue val{JsonObject{}};
ContactManager::ContactManager_getAddressBook(
common::JsonCast<JsonObject>(args), val.get<JsonObject>());
ReportSuccess(val, out);
}
+void ContactInstance::ContactManager_addAddressBook(const JsonValue& args, JsonObject& out) {
+ JsonValue val{JsonObject{}};
+ ContactManager::ContactManager_addAddressBook(
+ common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+ ReportSuccess(val, out);
+}
+
+void ContactInstance::ContactManager_removeAddressBook(const JsonValue& args, JsonObject& out) {
+ JsonValue val{JsonObject{}};
+ ContactManager::ContactManager_removeAddressBook(
+ common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+ ReportSuccess(val, out);
+}
+
void ContactInstance::AddressBook_startListening(const JsonValue& args, JsonObject& out) {
JsonValue val{JsonObject{}};
AddressBook::AddressBook_startListening(common::JsonCast<JsonObject>(args),
*/
void ContactManager_getAddressBook(const JsonValue& args, JsonObject& out);
+ void ContactManager_addAddressBook(const JsonValue& args, JsonObject& out);
+ void ContactManager_removeAddressBook(const JsonValue& args, JsonObject& out);
+
/**
* Signature: @code Person get(personId); @endcode
* JSON: @code data: {method: 'ContactManager_get',
}
int id = 0;
+ int account_id = 0;
int mode = 0;
char *name = nullptr;
- try {
- ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.id, &id);
- ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.mode, &mode);
- ContactUtil::GetStrFromRecord(contacts_record, _contacts_address_book.name, &name);
- }
- catch (...) {
- LoggerW("Fail to get data from address book");
- continue;
- }
+ ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.id, &id);
+ ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.account_id, &account_id);
+ ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.mode, &mode);
+ ContactUtil::GetStrFromRecord(contacts_record, _contacts_address_book.name, &name);
JsonValue single = JsonValue(JsonObject());
JsonObject &single_obj = single.get<JsonObject>();
+
single_obj["id"] = JsonValue(std::to_string(id));
+ single_obj["accountId"] = JsonValue(static_cast<double>(account_id));
single_obj["name"] = JsonValue(name);
single_obj["readOnly"] = JsonValue(CONTACTS_ADDRESS_BOOK_MODE_READONLY == mode);
out.push_back(single);
ContactUtil::CheckDBConnection();
long address_book_id;
try {
- address_book_id = common::stol(FromJson<JsonString>(args, "addressBookID"));
- }
- catch (const common::InvalidValuesException&) {
+ address_book_id = common::stol(FromJson<JsonString>(args, "addressBookId"));
+ } catch (const common::InvalidValuesException&) {
throw common::NotFoundException("Invalid id");
}
contacts_record_h contacts_record;
int error_code = contacts_db_get_record(_contacts_address_book._uri,
- address_book_id, &contacts_record);
+ static_cast<int>(address_book_id), &contacts_record);
if (CONTACTS_ERROR_NONE != error_code || nullptr == contacts_record) {
LoggerE("Fail to get addressbook record, error code: %d", error_code);
throw NotFoundException("Fail to get address book with given id");
}
- ContactUtil::ContactsRecordHPtr contacts_record_ptr(
- &contacts_record, ContactUtil::ContactsDeleter);
+ ContactUtil::ContactsRecordHPtr contacts_record_ptr(&contacts_record,
+ ContactUtil::ContactsDeleter);
+
+ int account_id;
+ ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.account_id, &account_id);
- int mode = 0;
- ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.mode,
- &mode);
+ int mode;
+ ContactUtil::GetIntFromRecord(contacts_record, _contacts_address_book.mode, &mode);
- char* name = nullptr;
- ContactUtil::GetStrFromRecord(contacts_record, _contacts_address_book.name,
- &name);
+ char* name;
+ ContactUtil::GetStrFromRecord(contacts_record, _contacts_address_book.name, &name);
+ out.insert(std::make_pair("accountId", static_cast<double>(account_id)));
out.insert(std::make_pair("name", std::string(name)));
- out.insert(std::make_pair(
- "readOnly",
- ((CONTACTS_ADDRESS_BOOK_MODE_READONLY == mode) ? "true" : "false")));
+ out.insert(std::make_pair("readOnly", (CONTACTS_ADDRESS_BOOK_MODE_READONLY == mode)));
}
namespace {
}
}
+void ContactManager_addAddressBook(const JsonObject &args, JsonObject &out) {
+ ContactUtil::CheckDBConnection();
+
+ const JsonObject &addressBook = FromJson<JsonObject>(args, "addressBook");
+
+ if (!IsNull(addressBook, "id")) {
+ LoggerW("AddressBook already exists");
+ throw common::UnknownException("AddressBook already exists");
+ }
+
+ contacts_record_h contacts_record;
+ int ret = contacts_record_create(_contacts_address_book._uri, &contacts_record);
+ if (CONTACTS_ERROR_NONE != ret) {
+ LoggerE("Failed to create address book record, error code : %d", ret);
+ throw UnknownException("Failed to create address book record");
+ }
+ ContactUtil::ContactsRecordHPtr contacts_record_ptr(&contacts_record,
+ ContactUtil::ContactsDeleter);
+
+ ContactUtil::SetStrInRecord(contacts_record, _contacts_address_book.name,
+ FromJson<JsonString>(addressBook, "name").c_str());
+
+ contacts_address_book_mode_e mode = FromJson<bool>(addressBook, "readOnly") ?
+ CONTACTS_ADDRESS_BOOK_MODE_READONLY : CONTACTS_ADDRESS_BOOK_MODE_NONE;
+ ContactUtil::SetIntInRecord(contacts_record, _contacts_address_book.mode,
+ static_cast<int>(mode));
+
+ double account_id = FromJson<double>(addressBook, "accountId");
+ ContactUtil::SetIntInRecord(contacts_record, _contacts_address_book.account_id,
+ static_cast<int>(account_id));
+
+ int address_book_id;
+ ret = contacts_db_insert_record(*contacts_record_ptr, &address_book_id);
+ if (CONTACTS_ERROR_NONE != ret) {
+ LoggerE("Failed to insert address book record, error code: %d", ret);
+ throw UnknownException("Failed to insert address book record");
+ }
+
+ out.insert(std::make_pair("id", std::to_string(address_book_id)));
+}
+
+void ContactManager_removeAddressBook(const JsonObject &args, JsonObject &out) {
+ ContactUtil::CheckDBConnection();
+ long address_book_id;
+ try {
+ address_book_id = common::stol(FromJson<JsonString>(args, "addressBookId"));
+ } catch (const common::InvalidValuesException&) {
+ throw common::NotFoundException("Invalid id");
+ }
+
+ contacts_record_h contacts_record;
+ int error_code = contacts_db_get_record(_contacts_address_book._uri,
+ static_cast<int>(address_book_id), &contacts_record);
+ if (CONTACTS_ERROR_NONE != error_code || nullptr == contacts_record) {
+ LoggerE("Fail to get addressbook record, error code: %d", error_code);
+ throw NotFoundException("Fail to get address book with given id");
+ }
+
+ int ret = contacts_db_delete_record(_contacts_address_book._uri,
+ static_cast<int>(address_book_id));
+ if (CONTACTS_ERROR_NONE != ret) {
+ LOGE("Failed to delete address book record, error code : %d", ret);
+ throw UnknownException("Failed to delete address book record");
+ }
+}
+
void ContactManager_get(const JsonObject& args, JsonObject& out) {
ContactUtil::CheckDBConnection();
long person_id = common::stol(FromJson<JsonString>(args, "personId"));
void ContactManager_getAddressBook(const JsonObject& args, JsonObject& out);
+void ContactManager_addAddressBook(const JsonObject& args, JsonObject& out);
+
+void ContactManager_removeAddressBook(const JsonObject& args, JsonObject& out);
+
void ContactManager_get(const JsonObject& args, JsonObject& out);
void ContactManager_update(const JsonObject& args, JsonObject&);
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+var DEFAULT_ADDRESSBOOK_ID = '0';
+var UNIFIED_ADDRESSBOOK_ID = '-1';
+
var _contactListenerRegistered = false;
var _contactCallbackMap = {};
};
var _contactChangeListener = function(result) {
- var unifiedId = -1;
+ var unifiedId = UNIFIED_ADDRESSBOOK_ID;
var watchId;
var i;
}
for (var callbackAddressbookId in _contactCallbackMap) {
- if (callbackAddressbookId !== -1 &&
+ if (callbackAddressbookId !== UNIFIED_ADDRESSBOOK_ID &&
_contactCallbackMap.hasOwnProperty(callbackAddressbookId)) {
var filteredAdded = [];
};
-var AddressBook = function(id, name, readOnly) {
+var AddressBook = function(accountId, name) {
AV.isConstructorCall(this, AddressBook);
- var _id = '';
- var _name = '';
- var _readOnly = false;
+ var id_ = null;
+ var name_ = '';
+ var readOnly_ = false;
+ var accountId_ = null;
- if (Type.isString(id)) {
- _id = id;
+ if (Type.isNumber(accountId)) {
+ accountId_ = accountId;
}
if (Type.isString(name)) {
- _name = name;
- }
- if (Type.isBoolean(readOnly)) {
- _readOnly = readOnly;
+ name_ = name;
}
Object.defineProperties(this, {
id: {
get: function() {
- return _id;
+ return id_;
+ },
+ set: function(v) {
+ if (_editGuard.isEditEnabled()) {
+ id_ = Converter.toString(v, false);
+ }
+ },
+ enumerable: true
+ },
+ accountId: {
+ get: function() {
+ return accountId_;
},
set: function(v) {
if (_editGuard.isEditEnabled()) {
- _id = Converter.toString(v, false);
+ accountId_ = Converter.toLong(v, true);
}
},
enumerable: true
},
name: {
get: function() {
- return _name;
+ return name_;
},
set: function(v) {
if (_editGuard.isEditEnabled()) {
- _name = Converter.toString(v, false);
+ name_ = Converter.toString(v, false);
}
},
enumerable: true
},
readOnly: {
get: function() {
- return _readOnly;
+ return readOnly_;
},
set: function(v) {
if (_editGuard.isEditEnabled()) {
- _readOnly = Converter.toBoolean(v, false);
+ readOnly_ = Converter.toBoolean(v, false);
}
},
enumerable: true
var tmp = [];
books.forEach(function(data) {
- tmp.push(new AddressBook(data.id, data.name, data.readOnly));
+ return _editGuard.run(function() {
+ var addressBook = new AddressBook(result.accountId, result.name);
+ addressBook.id = data.id;
+ addressBook.readOnly = result.readOnly;
+
+ tmp.push(addressBook);
+ });
});
native_.callIfPossible(args.successCallback, tmp);
// 'You do not have privileges for this operation');
//}
- return new AddressBook(-1, 'Unified address book', false);
+ return _editGuard.run(function() {
+ var addressBook = new AddressBook(0, 'Unified address book');
+ addressBook.id = UNIFIED_ADDRESSBOOK_ID;
+ addressBook.readOnly = false;
+
+ return addressBook;
+ });
};
// Gets the default address book.
ContactManager.prototype.getDefaultAddressBook = function() {
//privileges are checked in getAddressBook function
- return this.getAddressBook(0);
+ return this.getAddressBook(DEFAULT_ADDRESSBOOK_ID);
};
// Gets the address book with the specified identifier.
}
var result = native_.callSync('ContactManager_getAddressBook', {
- addressBookID: args.addressBookId
+ addressBookId: args.addressBookId
});
if (native_.isFailure(result)) {
result = native_.getResultObject(result);
- return new AddressBook(args.addressBookId, result.name, Boolean(result.readOnly === 'true'));
+ return _editGuard.run(function() {
+ var addressBook = new AddressBook(result.accountId, result.name);
+ addressBook.id = args.addressBookId;
+ addressBook.readOnly = result.readOnly;
+
+ return addressBook;
+ });
+};
+
+ContactManager.prototype.addAddressBook = function() {
+ var args = AV.validateArgs(arguments, [{
+ name: 'addressBook',
+ type: AV.Types.PLATFORM_OBJECT,
+ values: tizen.AddressBook,
+ optional: false,
+ nullable: false
+ }]);
+
+ var result = native_.callSync('ContactManager_addAddressBook', {
+ addressBook: args.addressBook
+ });
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
+
+ var data = native_.getResultObject(result);
+ _editGuard.run(function() {
+ for (var prop in data) {
+ if (args.addressBook.hasOwnProperty(prop)) {
+ args.addressBook[prop] = data[prop];
+ }
+ }
+ });
+};
+
+ContactManager.prototype.removeAddressBook = function() {
+ // TCT: ContactManager_removeAddressBook_misarg
+ if (Type.isNullOrUndefined(arguments[0])) {
+ throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR);
+ }
+
+ var args = AV.validateArgs(arguments, [{
+ name: 'addressBookId',
+ type: AV.Types.STRING,
+ optional: false,
+ nullable: false
+ }]);
+
+ if (args.addressBookId === UNIFIED_ADDRESSBOOK_ID) {
+ throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR,
+ 'Unified address book can not be deleted');
+ }
+
+ if (args.addressBookId === DEFAULT_ADDRESSBOOK_ID) {
+ throw new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR,
+ 'Default address book can not be deleted');
+ }
+
+ var result = native_.callSync('ContactManager_removeAddressBook', {
+ addressBookId: args.addressBookId
+ });
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ }
};
// Gets the person with the specified identifier.