Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
3a4978b892
commit
55f2e03e68
374
js/ui/cordova/plugins/cordova-plugin-contacts/src/blackberry10/index.js
vendored
Normal file
374
js/ui/cordova/plugins/cordova-plugin-contacts/src/blackberry10/index.js
vendored
Normal file
|
@ -0,0 +1,374 @@
|
|||
/*
|
||||
* Copyright 2013 Research In Motion Limited.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
var pimContacts,
|
||||
contactUtils = require("./contactUtils"),
|
||||
contactConsts = require("./contactConsts"),
|
||||
ContactError = require("./ContactError"),
|
||||
ContactName = require("./ContactName"),
|
||||
ContactFindOptions = require("./ContactFindOptions"),
|
||||
noop = function () {};
|
||||
|
||||
function getAccountFilters(options) {
|
||||
if (options.includeAccounts) {
|
||||
options.includeAccounts = options.includeAccounts.map(function (acct) {
|
||||
return acct.id.toString();
|
||||
});
|
||||
}
|
||||
|
||||
if (options.excludeAccounts) {
|
||||
options.excludeAccounts = options.excludeAccounts.map(function (acct) {
|
||||
return acct.id.toString();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function populateSearchFields(fields) {
|
||||
var i,
|
||||
l,
|
||||
key,
|
||||
searchFieldsObject = {},
|
||||
searchFields = [];
|
||||
|
||||
for (i = 0, l = fields.length; i < l; i++) {
|
||||
if (fields[i] === "*") {
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_GIVEN_NAME] = true;
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_FAMILY_NAME] = true;
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_PHONE] = true;
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_EMAIL] = true;
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_ORGANIZATION_NAME] = true;
|
||||
} else if (fields[i] === "displayName" || fields[i] === "name") {
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_GIVEN_NAME] = true;
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_FAMILY_NAME] = true;
|
||||
} else if (fields[i] === "nickname") {
|
||||
// not supported by Cascades
|
||||
} else if (fields[i] === "phoneNumbers") {
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_PHONE] = true;
|
||||
} else if (fields[i] === "emails") {
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_EMAIL] = true;
|
||||
} else if (field === "addresses") {
|
||||
// not supported by Cascades
|
||||
} else if (field === "ims") {
|
||||
// not supported by Cascades
|
||||
} else if (field === "organizations") {
|
||||
searchFieldsObject[ContactFindOptions.SEARCH_FIELD_ORGANIZATION_NAME] = true;
|
||||
} else if (field === "birthday") {
|
||||
// not supported by Cascades
|
||||
} else if (field === "note") {
|
||||
// not supported by Cascades
|
||||
} else if (field === "photos") {
|
||||
// not supported by Cascades
|
||||
} else if (field === "categories") {
|
||||
// not supported by Cascades
|
||||
} else if (field === "urls") {
|
||||
// not supported by Cascades
|
||||
}
|
||||
}
|
||||
|
||||
for (key in searchFieldsObject) {
|
||||
if (searchFieldsObject.hasOwnProperty(key)) {
|
||||
searchFields.push(window.parseInt(key));
|
||||
}
|
||||
}
|
||||
|
||||
return searchFields;
|
||||
}
|
||||
|
||||
function convertBirthday(birthday) {
|
||||
//Convert date string from native to milliseconds since epoch for cordova-js
|
||||
var birthdayInfo;
|
||||
if (birthday) {
|
||||
birthdayInfo = birthday.split("-");
|
||||
return new Date(birthdayInfo[0], birthdayInfo[1] - 1, birthdayInfo[2]).getTime();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function processJnextSaveData(result, JnextData) {
|
||||
var data = JnextData,
|
||||
birthdayInfo;
|
||||
|
||||
if (data._success === true) {
|
||||
data.birthday = convertBirthday(data.birthday);
|
||||
result.callbackOk(data, false);
|
||||
} else {
|
||||
result.callbackError(data.code, false);
|
||||
}
|
||||
}
|
||||
|
||||
function processJnextRemoveData(result, JnextData) {
|
||||
var data = JnextData;
|
||||
|
||||
if (data._success === true) {
|
||||
result.callbackOk(data);
|
||||
} else {
|
||||
result.callbackError(ContactError.UNKNOWN_ERROR, false);
|
||||
}
|
||||
}
|
||||
|
||||
function processJnextFindData(eventId, eventHandler, JnextData) {
|
||||
var data = JnextData,
|
||||
i,
|
||||
l,
|
||||
more = false,
|
||||
resultsObject = {},
|
||||
birthdayInfo;
|
||||
|
||||
if (data.contacts) {
|
||||
for (i = 0, l = data.contacts.length; i < l; i++) {
|
||||
data.contacts[i].birthday = convertBirthday(data.contacts[i].birthday);
|
||||
data.contacts[i].name = new ContactName(data.contacts[i].name);
|
||||
}
|
||||
} else {
|
||||
data.contacts = []; // if JnextData.contacts return null, return an empty array
|
||||
}
|
||||
|
||||
if (data._success === true) {
|
||||
eventHandler.error = false;
|
||||
}
|
||||
|
||||
if (eventHandler.multiple) {
|
||||
// Concatenate results; do not add the same contacts
|
||||
for (i = 0, l = eventHandler.searchResult.length; i < l; i++) {
|
||||
resultsObject[eventHandler.searchResult[i].id] = true;
|
||||
}
|
||||
|
||||
for (i = 0, l = data.contacts.length; i < l; i++) {
|
||||
if (resultsObject[data.contacts[i].id]) {
|
||||
// Already existing
|
||||
} else {
|
||||
eventHandler.searchResult.push(data.contacts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// check if more search is required
|
||||
eventHandler.searchFieldIndex++;
|
||||
if (eventHandler.searchFieldIndex < eventHandler.searchFields.length) {
|
||||
more = true;
|
||||
}
|
||||
} else {
|
||||
eventHandler.searchResult = data.contacts;
|
||||
}
|
||||
|
||||
if (more) {
|
||||
pimContacts.getInstance().invokeJnextSearch(eventId);
|
||||
} else {
|
||||
if (eventHandler.error) {
|
||||
eventHandler.result.callbackError(data.code, false);
|
||||
} else {
|
||||
eventHandler.result.callbackOk(eventHandler.searchResult, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
search: function (successCb, failCb, args, env) {
|
||||
var cordovaFindOptions = {},
|
||||
result = new PluginResult(args, env),
|
||||
key;
|
||||
|
||||
for (key in args) {
|
||||
if (args.hasOwnProperty(key)) {
|
||||
cordovaFindOptions[key] = JSON.parse(decodeURIComponent(args[key]));
|
||||
}
|
||||
}
|
||||
|
||||
pimContacts.getInstance().find(cordovaFindOptions, result, processJnextFindData);
|
||||
result.noResult(true);
|
||||
},
|
||||
save: function (successCb, failCb, args, env) {
|
||||
var attributes = {},
|
||||
result = new PluginResult(args, env),
|
||||
key,
|
||||
nativeEmails = [];
|
||||
|
||||
attributes = JSON.parse(decodeURIComponent(args[0]));
|
||||
|
||||
//convert birthday format for our native .so file
|
||||
if (attributes.birthday) {
|
||||
attributes.birthday = new Date(attributes.birthday).toDateString();
|
||||
}
|
||||
|
||||
if (attributes.emails) {
|
||||
attributes.emails.forEach(function (email) {
|
||||
if (email.value) {
|
||||
if (email.type) {
|
||||
nativeEmails.push({ "type" : email.type, "value" : email.value });
|
||||
} else {
|
||||
nativeEmails.push({ "type" : "home", "value" : email.value });
|
||||
}
|
||||
}
|
||||
});
|
||||
attributes.emails = nativeEmails;
|
||||
}
|
||||
|
||||
if (attributes.id !== null) {
|
||||
attributes.id = window.parseInt(attributes.id);
|
||||
}
|
||||
|
||||
attributes._eventId = result.callbackId;
|
||||
pimContacts.getInstance().save(attributes, result, processJnextSaveData);
|
||||
result.noResult(true);
|
||||
},
|
||||
remove: function (successCb, failCb, args, env) {
|
||||
var result = new PluginResult(args, env),
|
||||
attributes = {
|
||||
"contactId": window.parseInt(JSON.parse(decodeURIComponent(args[0]))),
|
||||
"_eventId": result.callbackId
|
||||
};
|
||||
|
||||
if (!window.isNaN(attributes.contactId)) {
|
||||
pimContacts.getInstance().remove(attributes, result, processJnextRemoveData);
|
||||
result.noResult(true);
|
||||
} else {
|
||||
result.error(ContactError.UNKNOWN_ERROR);
|
||||
result.noResult(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// JavaScript wrapper for JNEXT plugin
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
JNEXT.PimContacts = function ()
|
||||
{
|
||||
var self = this,
|
||||
hasInstance = false;
|
||||
|
||||
self.find = function (cordovaFindOptions, pluginResult, handler) {
|
||||
//register find eventHandler for when JNEXT onEvent fires
|
||||
self.eventHandlers[cordovaFindOptions.callbackId] = {
|
||||
"result" : pluginResult,
|
||||
"action" : "find",
|
||||
"multiple" : cordovaFindOptions[1].filter ? true : false,
|
||||
"fields" : cordovaFindOptions[0],
|
||||
"searchFilter" : cordovaFindOptions[1].filter,
|
||||
"searchFields" : cordovaFindOptions[1].filter ? populateSearchFields(cordovaFindOptions[0]) : null,
|
||||
"searchFieldIndex" : 0,
|
||||
"searchResult" : [],
|
||||
"handler" : handler,
|
||||
"error" : true
|
||||
};
|
||||
|
||||
self.invokeJnextSearch(cordovaFindOptions.callbackId);
|
||||
return "";
|
||||
};
|
||||
|
||||
self.invokeJnextSearch = function(eventId) {
|
||||
var jnextArgs = {},
|
||||
findHandler = self.eventHandlers[eventId];
|
||||
|
||||
jnextArgs._eventId = eventId;
|
||||
jnextArgs.fields = findHandler.fields;
|
||||
jnextArgs.options = {};
|
||||
jnextArgs.options.filter = [];
|
||||
|
||||
if (findHandler.multiple) {
|
||||
jnextArgs.options.filter.push({
|
||||
"fieldName" : findHandler.searchFields[findHandler.searchFieldIndex],
|
||||
"fieldValue" : findHandler.searchFilter
|
||||
});
|
||||
//findHandler.searchFieldIndex++;
|
||||
}
|
||||
|
||||
JNEXT.invoke(self.m_id, "find " + JSON.stringify(jnextArgs));
|
||||
}
|
||||
|
||||
self.getContact = function (args) {
|
||||
return JSON.parse(JNEXT.invoke(self.m_id, "getContact " + JSON.stringify(args)));
|
||||
};
|
||||
|
||||
self.save = function (args, pluginResult, handler) {
|
||||
//register save eventHandler for when JNEXT onEvent fires
|
||||
self.eventHandlers[args._eventId] = {
|
||||
"result" : pluginResult,
|
||||
"action" : "save",
|
||||
"handler" : handler
|
||||
};
|
||||
JNEXT.invoke(self.m_id, "save " + JSON.stringify(args));
|
||||
return "";
|
||||
};
|
||||
|
||||
self.remove = function (args, pluginResult, handler) {
|
||||
//register remove eventHandler for when JNEXT onEvent fires
|
||||
self.eventHandlers[args._eventId] = {
|
||||
"result" : pluginResult,
|
||||
"action" : "remove",
|
||||
"handler" : handler
|
||||
};
|
||||
JNEXT.invoke(self.m_id, "remove " + JSON.stringify(args));
|
||||
return "";
|
||||
};
|
||||
|
||||
self.getId = function () {
|
||||
return self.m_id;
|
||||
};
|
||||
|
||||
self.getContactAccounts = function () {
|
||||
var value = JNEXT.invoke(self.m_id, "getContactAccounts");
|
||||
return JSON.parse(value);
|
||||
};
|
||||
|
||||
self.init = function () {
|
||||
if (!JNEXT.require("libpimcontacts")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
self.m_id = JNEXT.createObject("libpimcontacts.PimContacts");
|
||||
|
||||
if (self.m_id === "") {
|
||||
return false;
|
||||
}
|
||||
|
||||
JNEXT.registerEvents(self);
|
||||
};
|
||||
|
||||
// Handle data coming back from JNEXT native layer. Each async function registers a handler and a PluginResult object.
|
||||
// When JNEXT fires onEvent we parse the result string back into JSON and trigger the appropriate handler (eventHandlers map
|
||||
// uses callbackId as key), along with the actual data coming back from the native layer. Each function may have its own way of
|
||||
// processing native data so we do not do any processing here.
|
||||
|
||||
self.onEvent = function (strData) {
|
||||
var arData = strData.split(" "),
|
||||
strEventDesc = arData[0],
|
||||
eventHandler,
|
||||
args = {};
|
||||
|
||||
if (strEventDesc === "result") {
|
||||
args.result = escape(strData.split(" ").slice(2).join(" "));
|
||||
eventHandler = self.eventHandlers[arData[1]];
|
||||
if (eventHandler.action === "save" || eventHandler.action === "remove") {
|
||||
eventHandler.handler(eventHandler.result, JSON.parse(decodeURIComponent(args.result)));
|
||||
} else if (eventHandler.action === "find") {
|
||||
eventHandler.handler(arData[1], eventHandler, JSON.parse(decodeURIComponent(args.result)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
self.m_id = "";
|
||||
self.eventHandlers = {};
|
||||
|
||||
self.getInstance = function () {
|
||||
if (!hasInstance) {
|
||||
self.init();
|
||||
hasInstance = true;
|
||||
}
|
||||
return self;
|
||||
};
|
||||
};
|
||||
|
||||
pimContacts = new JNEXT.PimContacts();
|
Loading…
Reference in New Issue
Block a user