mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-20 04:58:09 +00:00
205 lines
5.1 KiB
JavaScript
205 lines
5.1 KiB
JavaScript
// =============================================================================
|
|
// `Conversation.qml` Logic.
|
|
// =============================================================================
|
|
|
|
.import Linphone 1.0 as Linphone
|
|
|
|
.import 'qrc:/ui/scripts/Utils/utils.js' as Utils
|
|
|
|
// =============================================================================
|
|
|
|
function handleContactUpdated () {
|
|
var contact = contactEdit._contact
|
|
|
|
if (!contactEdit._edition) {
|
|
var vcard = contact.vcard
|
|
|
|
if (contactEdit._vcard !== vcard) {
|
|
// Not in edition mode, the contact was updated in other place.
|
|
contactEdit._vcard = vcard
|
|
} else {
|
|
// Edition ended.
|
|
handleVcardChanged(contact.vcard)
|
|
}
|
|
} else {
|
|
// Edition not ended, the contact was updated in other place.
|
|
// Update fields with new data.
|
|
contactEdit._vcard = contact.cloneVcardModel()
|
|
}
|
|
}
|
|
|
|
function handleCreation () {
|
|
var sipAddress = contactEdit.sipAddress
|
|
var contact = contactEdit._contact = Linphone.SipAddressesModel.mapSipAddressToContact(
|
|
sipAddress
|
|
)
|
|
|
|
if (!contact) {
|
|
// Add a new contact.
|
|
var vcard = Linphone.CoreManager.createDetachedVcardModel()
|
|
|
|
if (sipAddress && sipAddress.length > 0) {
|
|
vcard.addSipAddress(sipAddress)
|
|
}
|
|
|
|
contactEdit._vcard = vcard
|
|
contactEdit._edition = true
|
|
} else {
|
|
// See or edit a contact.
|
|
contactEdit._vcard = contact.vcard
|
|
}
|
|
}
|
|
|
|
function handleVcardChanged (vcard) {
|
|
if (!vcard) {
|
|
vcard = {}
|
|
}
|
|
|
|
addresses.setData(vcard.sipAddresses)
|
|
companies.setData(vcard.companies)
|
|
emails.setData(vcard.emails)
|
|
urls.setData(vcard.urls)
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function editContact () {
|
|
var contact = contactEdit._contact
|
|
|
|
contactEdit._vcard = contact.cloneVcardModel()
|
|
contactEdit._edition = true
|
|
|
|
window.lockView({
|
|
descriptionText: qsTr('abortEditDescriptionText')
|
|
})
|
|
}
|
|
|
|
function removeContact () {
|
|
window.attachVirtualWindow(Utils.buildDialogUri('ConfirmDialog'), {
|
|
descriptionText: qsTr('removeContactDescription'),
|
|
}, function (status) {
|
|
if (status) {
|
|
window.unlockView()
|
|
window.setView('Contacts')
|
|
Linphone.ContactsListModel.removeContact(_contact)
|
|
}
|
|
})
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function save () {
|
|
var contact = contactEdit._contact
|
|
var vcard = contactEdit._vcard
|
|
|
|
contactEdit._edition = false
|
|
|
|
if (contact) {
|
|
contact.vcard = vcard
|
|
window.unlockView()
|
|
} else {
|
|
contactEdit._contact = Linphone.ContactsListModel.addContact(vcard)
|
|
handleVcardChanged(vcard) // Called directly, because the vcard is not modified in the view.
|
|
}
|
|
}
|
|
|
|
function cancel () {
|
|
var contact = contactEdit._contact
|
|
|
|
if (contact) {
|
|
contactEdit._vcard = contact.vcard
|
|
window.unlockView()
|
|
|
|
contactEdit._edition = false
|
|
} else {
|
|
window.setView('Contacts')
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function setAvatar (url) {
|
|
contactEdit._vcard.avatar = Utils.getSystemPathFromUri(url)
|
|
}
|
|
|
|
function setUsername (username) {
|
|
var vcard = contactEdit._vcard
|
|
|
|
vcard.username = username
|
|
|
|
// Update current text with new/old username.
|
|
usernameInput.text = _vcard.username
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function handleValueChanged (fields, index, oldValue, newValue, add, update) {
|
|
if (newValue === oldValue) {
|
|
return
|
|
}
|
|
|
|
var vcard = contactEdit._vcard
|
|
var soFarSoGood = (oldValue.length === 0)
|
|
? vcard[add](newValue)
|
|
: vcard[update](oldValue, newValue)
|
|
|
|
fields.setInvalid(index, !soFarSoGood)
|
|
}
|
|
|
|
function handleSipAddressChanged () {
|
|
var args = Array.prototype.slice.call(arguments)
|
|
args.push('addSipAddress', 'updateSipAddress')
|
|
handleValueChanged.apply(this, args)
|
|
}
|
|
|
|
function handleCompanyChanged () {
|
|
var args = Array.prototype.slice.call(arguments)
|
|
args.push('addCompany', 'updateCompany')
|
|
handleValueChanged.apply(this, args)
|
|
}
|
|
|
|
function handleEmailChanged () {
|
|
var args = Array.prototype.slice.call(arguments)
|
|
args.push('addEmail', 'updateEmail')
|
|
handleValueChanged.apply(this, args)
|
|
}
|
|
|
|
function handleUrlChanged () {
|
|
var args = Array.prototype.slice.call(arguments)
|
|
args.push('addUrl', 'updateUrl')
|
|
handleValueChanged.apply(this, args)
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function buildAddressFields () {
|
|
var address = contactEdit._vcard.address
|
|
|
|
return [{
|
|
placeholder: qsTr('street'),
|
|
text: address.street
|
|
}, {
|
|
placeholder: qsTr('locality'),
|
|
text: address.locality
|
|
}, {
|
|
placeholder: qsTr('postalCode'),
|
|
text: address.postalCode
|
|
}, {
|
|
placeholder: qsTr('country'),
|
|
text: address.country
|
|
}]
|
|
}
|
|
|
|
function handleAddressChanged (index, value) {
|
|
var vcard = contactEdit._vcard
|
|
|
|
if (index === 0) { // Street.
|
|
vcard.setStreet(value)
|
|
} else if (index === 1) { // Locality.
|
|
vcard.setLocality(value)
|
|
} else if (index === 2) { // Postal code.
|
|
vcard.setPostalCode(value)
|
|
} else if (index === 3) { // Country.
|
|
vcard.setCountry(value)
|
|
}
|
|
}
|