When removing a meeting you organized, send a cancel ICS
This commit is contained in:
parent
795ee0d40c
commit
2050ed93eb
3 changed files with 61 additions and 17 deletions
|
@ -77,10 +77,10 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
||||||
private val listener = object : ConferenceSchedulerListenerStub() {
|
private val listener = object : ConferenceSchedulerListenerStub() {
|
||||||
override fun onStateChanged(
|
override fun onStateChanged(
|
||||||
conferenceScheduler: ConferenceScheduler,
|
conferenceScheduler: ConferenceScheduler,
|
||||||
state: ConferenceSchedulerState
|
state: ConferenceScheduler.State
|
||||||
) {
|
) {
|
||||||
Log.i("[Conference Creation] Conference scheduler state is $state")
|
Log.i("[Conference Creation] Conference scheduler state is $state")
|
||||||
if (state == ConferenceSchedulerState.Ready) {
|
if (state == ConferenceScheduler.State.Ready) {
|
||||||
val conferenceAddress = conferenceScheduler.info?.uri
|
val conferenceAddress = conferenceScheduler.info?.uri
|
||||||
Log.i("[Conference Creation] Conference info created, address will be ${conferenceAddress?.asStringUriOnly()}")
|
Log.i("[Conference Creation] Conference info created, address will be ${conferenceAddress?.asStringUriOnly()}")
|
||||||
conferenceAddress ?: return
|
conferenceAddress ?: return
|
||||||
|
@ -90,21 +90,12 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
||||||
if (scheduleForLater.value == true && sendInviteViaChat.value == true) {
|
if (scheduleForLater.value == true && sendInviteViaChat.value == true) {
|
||||||
// Send conference info even when conf is not scheduled for later
|
// Send conference info even when conf is not scheduled for later
|
||||||
// as the conference server doesn't invite participants automatically
|
// as the conference server doesn't invite participants automatically
|
||||||
val chatRoomParams = coreContext.core.createDefaultChatRoomParams()
|
val chatRoomParams = LinphoneUtils.getConferenceInvitationsChatRoomParams()
|
||||||
chatRoomParams.isGroupEnabled = false
|
|
||||||
if (LinphoneUtils.isEndToEndEncryptedChatAvailable()) {
|
|
||||||
chatRoomParams.backend = ChatRoomBackend.FlexisipChat
|
|
||||||
chatRoomParams.isEncryptionEnabled = true
|
|
||||||
} else {
|
|
||||||
chatRoomParams.backend = ChatRoomBackend.Basic
|
|
||||||
chatRoomParams.isEncryptionEnabled = false
|
|
||||||
}
|
|
||||||
chatRoomParams.subject = subject.value
|
|
||||||
conferenceScheduler.sendInvitations(chatRoomParams)
|
conferenceScheduler.sendInvitations(chatRoomParams)
|
||||||
} else {
|
} else {
|
||||||
// Will be done in coreListener
|
// Will be done in coreListener
|
||||||
}
|
}
|
||||||
} else if (state == ConferenceSchedulerState.Error) {
|
} else if (state == ConferenceScheduler.State.Error) {
|
||||||
Log.e("[Conference Creation] Failed to create conference!")
|
Log.e("[Conference Creation] Failed to create conference!")
|
||||||
conferenceCreationInProgress.value = false
|
conferenceCreationInProgress.value = false
|
||||||
onMessageToNotifyEvent.value = Event(R.string.conference_creation_failed)
|
onMessageToNotifyEvent.value = Event(R.string.conference_creation_failed)
|
||||||
|
@ -115,7 +106,6 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
||||||
conferenceScheduler: ConferenceScheduler,
|
conferenceScheduler: ConferenceScheduler,
|
||||||
failedInvitations: Array<out Address>?
|
failedInvitations: Array<out Address>?
|
||||||
) {
|
) {
|
||||||
Log.i("[Conference Creation] Conference information successfully sent to all participants")
|
|
||||||
conferenceCreationInProgress.value = false
|
conferenceCreationInProgress.value = false
|
||||||
|
|
||||||
if (failedInvitations?.isNotEmpty() == true) {
|
if (failedInvitations?.isNotEmpty() == true) {
|
||||||
|
@ -123,6 +113,8 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
||||||
Log.e("[Conference Creation] Conference information wasn't sent to participant ${address.asStringUriOnly()}")
|
Log.e("[Conference Creation] Conference information wasn't sent to participant ${address.asStringUriOnly()}")
|
||||||
}
|
}
|
||||||
onMessageToNotifyEvent.value = Event(R.string.conference_schedule_info_not_sent_to_participant)
|
onMessageToNotifyEvent.value = Event(R.string.conference_schedule_info_not_sent_to_participant)
|
||||||
|
} else {
|
||||||
|
Log.i("[Conference Creation] Conference information successfully sent to all participants")
|
||||||
}
|
}
|
||||||
|
|
||||||
val conferenceAddress = conferenceScheduler.info?.uri
|
val conferenceAddress = conferenceScheduler.info?.uri
|
||||||
|
|
|
@ -23,16 +23,21 @@ import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.activities.main.conference.data.ScheduledConferenceData
|
import org.linphone.activities.main.conference.data.ScheduledConferenceData
|
||||||
import org.linphone.core.ConferenceInfo
|
import org.linphone.core.*
|
||||||
import org.linphone.core.Core
|
|
||||||
import org.linphone.core.CoreListenerStub
|
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
|
import org.linphone.utils.LinphoneUtils
|
||||||
|
|
||||||
class ScheduledConferencesViewModel : ViewModel() {
|
class ScheduledConferencesViewModel : ViewModel() {
|
||||||
val conferences = MutableLiveData<ArrayList<ScheduledConferenceData>>()
|
val conferences = MutableLiveData<ArrayList<ScheduledConferenceData>>()
|
||||||
|
|
||||||
val showTerminated = MutableLiveData<Boolean>()
|
val showTerminated = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
|
private val conferenceScheduler: ConferenceScheduler by lazy {
|
||||||
|
val scheduler = coreContext.core.createConferenceScheduler()
|
||||||
|
scheduler.addListener(conferenceListener)
|
||||||
|
scheduler
|
||||||
|
}
|
||||||
|
|
||||||
private val listener = object : CoreListenerStub() {
|
private val listener = object : CoreListenerStub() {
|
||||||
override fun onConferenceInfoReceived(core: Core, conferenceInfo: ConferenceInfo) {
|
override fun onConferenceInfoReceived(core: Core, conferenceInfo: ConferenceInfo) {
|
||||||
Log.i("[Scheduled Conferences] New conference info received")
|
Log.i("[Scheduled Conferences] New conference info received")
|
||||||
|
@ -40,6 +45,33 @@ class ScheduledConferencesViewModel : ViewModel() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val conferenceListener = object : ConferenceSchedulerListenerStub() {
|
||||||
|
override fun onStateChanged(
|
||||||
|
conferenceScheduler: ConferenceScheduler,
|
||||||
|
state: ConferenceScheduler.State
|
||||||
|
) {
|
||||||
|
Log.i("[Scheduled Conferences] Conference scheduler state is $state")
|
||||||
|
if (state == ConferenceScheduler.State.Ready) {
|
||||||
|
Log.i("[Scheduled Conferences] Conference ${conferenceScheduler.info?.subject} cancelled")
|
||||||
|
val chatRoomParams = LinphoneUtils.getConferenceInvitationsChatRoomParams()
|
||||||
|
conferenceScheduler.sendInvitations(chatRoomParams) // Send cancel ICS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onInvitationsSent(
|
||||||
|
conferenceScheduler: ConferenceScheduler,
|
||||||
|
failedInvitations: Array<out Address>?
|
||||||
|
) {
|
||||||
|
if (failedInvitations?.isNotEmpty() == true) {
|
||||||
|
for (address in failedInvitations) {
|
||||||
|
Log.e("[Scheduled Conferences] Conference cancelled ICS wasn't sent to participant ${address.asStringUriOnly()}")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.i("[Scheduled Conferences] Conference cancelled ICS successfully sent to all participants")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
coreContext.core.addListener(listener)
|
coreContext.core.addListener(listener)
|
||||||
|
|
||||||
|
@ -51,6 +83,7 @@ class ScheduledConferencesViewModel : ViewModel() {
|
||||||
override fun onCleared() {
|
override fun onCleared() {
|
||||||
coreContext.core.removeListener(listener)
|
coreContext.core.removeListener(listener)
|
||||||
conferences.value.orEmpty().forEach(ScheduledConferenceData::destroy)
|
conferences.value.orEmpty().forEach(ScheduledConferenceData::destroy)
|
||||||
|
|
||||||
super.onCleared()
|
super.onCleared()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,6 +97,11 @@ class ScheduledConferencesViewModel : ViewModel() {
|
||||||
conferenceInfoList.addAll(conferences.value.orEmpty())
|
conferenceInfoList.addAll(conferences.value.orEmpty())
|
||||||
conferenceInfoList.remove(data)
|
conferenceInfoList.remove(data)
|
||||||
|
|
||||||
|
if (data.conferenceInfo.state != ConferenceInfo.State.Cancelled && data.canEdit.value == true) {
|
||||||
|
Log.i("[Scheduled Conferences] Cancelling conference ${data.conferenceInfo.subject}")
|
||||||
|
conferenceScheduler.cancelConference(data.conferenceInfo)
|
||||||
|
}
|
||||||
|
|
||||||
data.delete()
|
data.delete()
|
||||||
data.destroy()
|
data.destroy()
|
||||||
conferences.value = conferenceInfoList
|
conferences.value = conferenceInfoList
|
||||||
|
|
|
@ -140,6 +140,20 @@ class LinphoneUtils {
|
||||||
?: core.createChatRoom(params, defaultAccount?.params?.identityAddress, participants)
|
?: core.createChatRoom(params, defaultAccount?.params?.identityAddress, participants)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getConferenceInvitationsChatRoomParams(): ChatRoomParams {
|
||||||
|
val chatRoomParams = coreContext.core.createDefaultChatRoomParams()
|
||||||
|
chatRoomParams.isGroupEnabled = false
|
||||||
|
if (isEndToEndEncryptedChatAvailable()) {
|
||||||
|
chatRoomParams.backend = ChatRoomBackend.FlexisipChat
|
||||||
|
chatRoomParams.isEncryptionEnabled = true
|
||||||
|
} else {
|
||||||
|
chatRoomParams.backend = ChatRoomBackend.Basic
|
||||||
|
chatRoomParams.isEncryptionEnabled = false
|
||||||
|
}
|
||||||
|
chatRoomParams.subject = "Meeting invitation" // Won't be used
|
||||||
|
return chatRoomParams
|
||||||
|
}
|
||||||
|
|
||||||
fun deleteFilesAttachedToEventLog(eventLog: EventLog) {
|
fun deleteFilesAttachedToEventLog(eventLog: EventLog) {
|
||||||
if (eventLog.type == EventLog.Type.ConferenceChatMessage) {
|
if (eventLog.type == EventLog.Type.ConferenceChatMessage) {
|
||||||
val message = eventLog.chatMessage
|
val message = eventLog.chatMessage
|
||||||
|
|
Loading…
Reference in a new issue