mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-22 06:08:07 +00:00
183 lines
4.4 KiB
JavaScript
183 lines
4.4 KiB
JavaScript
// =============================================================================
|
|
// `Calls.qml` Logic.
|
|
// =============================================================================
|
|
|
|
.import Linphone 1.0 as Linphone
|
|
|
|
// =============================================================================
|
|
|
|
var MAP_STATUS_TO_PARAMS = (function () {
|
|
var CallModel = Linphone.CallModel
|
|
var map = {}
|
|
|
|
map[CallModel.CallStatusConnected] = (function (call) {
|
|
return {
|
|
actions: [{
|
|
handler: (function () { call.pausedByUser = true }),
|
|
name: qsTr('pauseCall')
|
|
}, {
|
|
handler: call.askForTransfer,
|
|
name: qsTr('transferCall')
|
|
}, {
|
|
handler: call.terminate,
|
|
name: qsTr('terminateCall')
|
|
}],
|
|
component: callActions,
|
|
string: 'connected'
|
|
}
|
|
})
|
|
|
|
map[CallModel.CallStatusEnded] = (function (call) {
|
|
return {
|
|
string: 'ended'
|
|
}
|
|
})
|
|
|
|
map[CallModel.CallStatusIncoming] = (function (call) {
|
|
return {
|
|
actions: [{
|
|
name: qsTr('acceptAudioCall'),
|
|
handler: (function () { call.accept() })
|
|
}, {
|
|
name: qsTr('acceptVideoCall'),
|
|
handler: call.acceptWithVideo
|
|
}, {
|
|
name: qsTr('terminateCall'),
|
|
handler: call.terminate
|
|
}],
|
|
component: callActions,
|
|
string: 'incoming'
|
|
}
|
|
})
|
|
|
|
map[CallModel.CallStatusOutgoing] = (function (call) {
|
|
return {
|
|
component: callAction,
|
|
handler: call.terminate,
|
|
icon: 'hangup',
|
|
string: 'outgoing'
|
|
}
|
|
})
|
|
|
|
map[CallModel.CallStatusPaused] = (function (call) {
|
|
return {
|
|
actions: [(call.pausedByUser ? {
|
|
handler: (function () { call.pausedByUser = false }),
|
|
name: qsTr('resumeCall')
|
|
} : {
|
|
handler: (function () { call.pausedByUser = true }),
|
|
name: qsTr('pauseCall')
|
|
}), {
|
|
handler: call.askForTransfer,
|
|
name: qsTr('transferCall')
|
|
}, {
|
|
handler: call.terminate,
|
|
name: qsTr('terminateCall')
|
|
}],
|
|
component: callActions,
|
|
string: 'paused'
|
|
}
|
|
})
|
|
|
|
return map;
|
|
})()
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function getParams (call) {
|
|
if (call) {
|
|
return MAP_STATUS_TO_PARAMS[call.status](call)
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Helpers.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function updateSelectedCall (call, index) {
|
|
calls._selectedCall = call
|
|
if (index != null) {
|
|
calls.currentIndex = index
|
|
}
|
|
}
|
|
|
|
function resetSelectedCall () {
|
|
updateSelectedCall(null, -1)
|
|
}
|
|
|
|
function setIndexWithCall (call) {
|
|
var count = calls.count
|
|
var model = calls.model
|
|
|
|
for (var i = 0; i < count; i++) {
|
|
if (call === model.data(model.index(i, 0))) {
|
|
updateSelectedCall(call, i)
|
|
return
|
|
}
|
|
}
|
|
|
|
updateSelectedCall(call, -1)
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// View handlers.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function handleCountChanged (count) {
|
|
if (count === 0) {
|
|
return
|
|
}
|
|
|
|
var call = calls._selectedCall
|
|
|
|
if (call == null) {
|
|
if (calls.conferenceModel.count > 0) {
|
|
return
|
|
}
|
|
|
|
var model = calls.model
|
|
var index = count - 1
|
|
updateSelectedCall(model.data(model.index(index, 0)), index)
|
|
} else {
|
|
setIndexWithCall(call)
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Model handlers.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
function handleCallRunning (call) {
|
|
if (!call.isInConference) {
|
|
setIndexWithCall(call)
|
|
}
|
|
}
|
|
|
|
function handleRowsAboutToBeRemoved (_, first, last) {
|
|
var index = calls.currentIndex
|
|
|
|
if (index >= first && index <= last) {
|
|
resetSelectedCall()
|
|
}
|
|
}
|
|
|
|
function handleRowsInserted (_, first, last) {
|
|
// The last inserted outgoing element become the selected call.
|
|
var model = calls.model
|
|
for (var index = last; index >= first; index--) {
|
|
var call = model.data(model.index(index, 0))
|
|
|
|
if (call.isOutgoing && !call.isInConference) {
|
|
updateSelectedCall(call)
|
|
return
|
|
}
|
|
}
|
|
|
|
// First received call.
|
|
if (first === 0 && model.rowCount() === 1) {
|
|
var call = model.data(model.index(0, 0))
|
|
if (!call.isInConference) {
|
|
updateSelectedCall(model.data(model.index(0, 0)))
|
|
}
|
|
}
|
|
}
|