You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.4 KiB
140 lines
4.4 KiB
import { i18n } from 'boot/i18n'
|
|
import { fetchPhonebookEntries } from 'src/api/call'
|
|
import {
|
|
callAccept,
|
|
callAddCamera,
|
|
callAddScreen,
|
|
callBlindTransfer,
|
|
callEnd,
|
|
callGetLocalMediaStreamId,
|
|
callHasLocalCamera,
|
|
callHasLocalScreen,
|
|
callHasLocalVideo,
|
|
callIsMuted,
|
|
callIsRemoteMuted,
|
|
callRemoveVideo,
|
|
callSendDTMF,
|
|
callStart,
|
|
callToggleHold,
|
|
callToggleMicrophone,
|
|
callToggleRemoteAudio
|
|
} from 'src/api/ngcp-call'
|
|
import { showGlobalError } from 'src/helpers/ui'
|
|
import { errorVisibilityTimeout } from 'src/store/call/common'
|
|
|
|
let errorVisibilityTimer = null
|
|
|
|
export default {
|
|
async start (context, localMedia) {
|
|
const number = context.getters.callNumberNormalized.replaceAll('(', '').replaceAll(')', '').replaceAll(' ', '').replaceAll('-', '')
|
|
context.dispatch('fetchPhonebookEntryName', number)
|
|
context.commit('startCalling', number)
|
|
const isStarted = await callStart({
|
|
number,
|
|
localMedia
|
|
})
|
|
if (isStarted) {
|
|
context.commit('localMediaSuccess', callGetLocalMediaStreamId())
|
|
} else {
|
|
context.commit('inputNumber')
|
|
showGlobalError(i18n.global.t('No microphone authorized.'))
|
|
}
|
|
},
|
|
async fetchPhonebookEntryName (context, number) {
|
|
try {
|
|
const phoneBookEntryArray = await fetchPhonebookEntries(number)
|
|
const phoneBookEntry = phoneBookEntryArray?.items[0] || null
|
|
if (phoneBookEntry) {
|
|
context.commit('fetchPhonebookEntrySuccess', phoneBookEntry.name)
|
|
}
|
|
} catch (err) {
|
|
context.commit('fetchPhonebookEntryFailure')
|
|
}
|
|
},
|
|
async processIncomingCall (context, number) {
|
|
await context.dispatch('fetchPhonebookEntryName', number)
|
|
context.commit('incomingCall', {
|
|
number
|
|
})
|
|
},
|
|
async accept (context, localMedia) {
|
|
await callAccept({
|
|
localMedia
|
|
})
|
|
context.commit('localMediaSuccess', callGetLocalMediaStreamId())
|
|
},
|
|
async toggleMicrophone (context) {
|
|
callToggleMicrophone()
|
|
context.commit('toggleMicrophone', !callIsMuted())
|
|
},
|
|
async toggleHoldon (context) {
|
|
callToggleHold()
|
|
context.commit('toggleHold')
|
|
},
|
|
async toggleTransfer (context, number) {
|
|
try {
|
|
const result = await callBlindTransfer(number)
|
|
if (result) {
|
|
context.dispatch('end')
|
|
}
|
|
} catch (error) {
|
|
showGlobalError(error.message)
|
|
}
|
|
},
|
|
async toggleStateTransfer (context) {
|
|
context.commit('toggleTransfer')
|
|
},
|
|
toggleRemoteAudio (context) {
|
|
callToggleRemoteAudio()
|
|
context.commit('toggleRemoteAudio', !callIsRemoteMuted())
|
|
},
|
|
async toggleCamera (context) {
|
|
if (!callHasLocalVideo() || callHasLocalScreen()) {
|
|
await callAddCamera()
|
|
context.commit('disableVideo')
|
|
context.commit('enableCamera')
|
|
} else {
|
|
await callRemoveVideo()
|
|
context.commit('disableVideo')
|
|
}
|
|
},
|
|
async toggleScreen (context) {
|
|
try {
|
|
if (!callHasLocalVideo() || callHasLocalCamera()) {
|
|
await callAddScreen()
|
|
context.commit('disableVideo')
|
|
context.commit('enableScreen')
|
|
} else {
|
|
await callRemoveVideo()
|
|
context.commit('disableVideo')
|
|
}
|
|
} catch (error) {
|
|
showGlobalError(error.message || i18n.global.t('Failed to toggle screen sharing'))
|
|
}
|
|
},
|
|
end (context, options = { cause: null }) {
|
|
callEnd()
|
|
if (!options.cause) {
|
|
if (errorVisibilityTimer) {
|
|
clearTimeout(errorVisibilityTimer)
|
|
errorVisibilityTimer = null
|
|
}
|
|
context.commit('endCall')
|
|
context.commit('hangUpCall')
|
|
} else if (options.cause && !errorVisibilityTimer) {
|
|
context.commit('endCall', options.cause)
|
|
if (options.cause !== 'Busy') {
|
|
errorVisibilityTimer = setTimeout(() => {
|
|
if (context.state.callState === 'ended') {
|
|
context.commit('hangUpCall')
|
|
}
|
|
errorVisibilityTimer = null
|
|
}, errorVisibilityTimeout)
|
|
}
|
|
}
|
|
},
|
|
sendDTMF (context, tone) {
|
|
callSendDTMF(tone)
|
|
}
|
|
}
|