From 8fedf43478bb8e32bb5f5cd994ba9557455227d0 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:32:01 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- .../src/windows8/ContactProxy.js | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 js/ui/cordova/plugins/cordova-plugin-contacts/src/windows8/ContactProxy.js diff --git a/js/ui/cordova/plugins/cordova-plugin-contacts/src/windows8/ContactProxy.js b/js/ui/cordova/plugins/cordova-plugin-contacts/src/windows8/ContactProxy.js new file mode 100644 index 0000000..c67e771 --- /dev/null +++ b/js/ui/cordova/plugins/cordova-plugin-contacts/src/windows8/ContactProxy.js @@ -0,0 +1,121 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 ContactField = require('./ContactField'), + ContactAddress = require('./ContactAddress'), + ContactName = require('./ContactName'), + Contact = require('./Contact'); + + +function convertToContact(windowsContact) { + var contact = new Contact(); + + // displayName & nickname + contact.displayName = windowsContact.name; + contact.nickname = windowsContact.name; + + // name + contact.name = new ContactName(windowsContact.name); + + // phoneNumbers + contact.phoneNumbers = []; + for (var i = 0; i < windowsContact.phoneNumbers.size; i++) { + var phone = new ContactField(windowsContact.phoneNumbers[i].category, windowsContact.phoneNumbers[i].value); + contact.phoneNumbers.push(phone); + } + + // emails + contact.emails = []; + for (var i = 0; i < windowsContact.emails.size; i++) { + var email = new ContactField(windowsContact.emails[i].category, windowsContact.emails[i].value); + contact.emails.push(email); + } + + // addressres + contact.addresses = []; + for (var i = 0; i < windowsContact.locations.size; i++) { + var address = new ContactAddress(null, windowsContact.locations[i].category, + windowsContact.locations[i].unstructuredAddress, windowsContact.locations[i].street, + null, windowsContact.locations[i].region, windowsContact.locations[i].postalCode, + windowsContact.locations[i].country); + contact.addresses.push(address); + } + + // ims + contact.ims = []; + for (var i = 0; i < windowsContact.instantMessages.size; i++) { + var im = new ContactField(windowsContact.instantMessages[i].category, windowsContact.instantMessages[i].userName); + contact.ims.push(im); + } + + return contact; +}; + +module.exports = { + pickContact: function(win, fail, args) { + + var picker = new Windows.ApplicationModel.Contacts.ContactPicker(); + picker.selectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.contacts; // select entire contact + + // pickContactAsync is available on Windows 8.1 or later, instead of + // pickSingleContactAsync, which is deprecated after Windows 8, + // so try to use newer method, if available. + // see http://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.contacts.contactpicker.picksinglecontactasync.aspx + if (picker.pickContactAsync) { + // TODO: 8.1 has better contact support via the 'Contact' object + } else { + + function success(con) { + // if contact was not picked + if (!con) { + fail && setTimeout(function() { + fail(new Error("User did not pick a contact.")); + }, 0); + return; + } + + // send em back + win(convertToContact(con)); + + } + + picker.pickSingleContactAsync().done(success, fail); + } + }, + + save:function(win,fail,args){ + console && console.error && console.error("Error : Windows 8 does not support creating/saving contacts"); + fail && setTimeout(function () { + fail(new Error("Contact create/save not supported on Windows 8")); + }, 0); + }, + + search: function(win, fail, args) { + console && console.error && console.error("Error : Windows 8 does not support searching contacts"); + fail && setTimeout(function() { + fail(new Error("Contact search not supported on Windows 8")); + }, 0); + } + + +} + +require("cordova/exec/proxy").add("Contacts", module.exports);