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() {
|
||||
override fun onStateChanged(
|
||||
conferenceScheduler: ConferenceScheduler,
|
||||
state: ConferenceSchedulerState
|
||||
state: ConferenceScheduler.State
|
||||
) {
|
||||
Log.i("[Conference Creation] Conference scheduler state is $state")
|
||||
if (state == ConferenceSchedulerState.Ready) {
|
||||
if (state == ConferenceScheduler.State.Ready) {
|
||||
val conferenceAddress = conferenceScheduler.info?.uri
|
||||
Log.i("[Conference Creation] Conference info created, address will be ${conferenceAddress?.asStringUriOnly()}")
|
||||
conferenceAddress ?: return
|
||||
|
@ -90,21 +90,12 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
|||
if (scheduleForLater.value == true && sendInviteViaChat.value == true) {
|
||||
// Send conference info even when conf is not scheduled for later
|
||||
// as the conference server doesn't invite participants automatically
|
||||
val chatRoomParams = coreContext.core.createDefaultChatRoomParams()
|
||||
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
|
||||
val chatRoomParams = LinphoneUtils.getConferenceInvitationsChatRoomParams()
|
||||
conferenceScheduler.sendInvitations(chatRoomParams)
|
||||
} else {
|
||||
// Will be done in coreListener
|
||||
}
|
||||
} else if (state == ConferenceSchedulerState.Error) {
|
||||
} else if (state == ConferenceScheduler.State.Error) {
|
||||
Log.e("[Conference Creation] Failed to create conference!")
|
||||
conferenceCreationInProgress.value = false
|
||||
onMessageToNotifyEvent.value = Event(R.string.conference_creation_failed)
|
||||
|
@ -115,7 +106,6 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
|||
conferenceScheduler: ConferenceScheduler,
|
||||
failedInvitations: Array<out Address>?
|
||||
) {
|
||||
Log.i("[Conference Creation] Conference information successfully sent to all participants")
|
||||
conferenceCreationInProgress.value = false
|
||||
|
||||
if (failedInvitations?.isNotEmpty() == true) {
|
||||
|
@ -123,6 +113,8 @@ class ConferenceSchedulingViewModel : ContactsSelectionViewModel() {
|
|||
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)
|
||||
} else {
|
||||
Log.i("[Conference Creation] Conference information successfully sent to all participants")
|
||||
}
|
||||
|
||||
val conferenceAddress = conferenceScheduler.info?.uri
|
||||
|
|
|
@ -23,16 +23,21 @@ import androidx.lifecycle.MutableLiveData
|
|||
import androidx.lifecycle.ViewModel
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.activities.main.conference.data.ScheduledConferenceData
|
||||
import org.linphone.core.ConferenceInfo
|
||||
import org.linphone.core.Core
|
||||
import org.linphone.core.CoreListenerStub
|
||||
import org.linphone.core.*
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
|
||||
class ScheduledConferencesViewModel : ViewModel() {
|
||||
val conferences = MutableLiveData<ArrayList<ScheduledConferenceData>>()
|
||||
|
||||
val showTerminated = MutableLiveData<Boolean>()
|
||||
|
||||
private val conferenceScheduler: ConferenceScheduler by lazy {
|
||||
val scheduler = coreContext.core.createConferenceScheduler()
|
||||
scheduler.addListener(conferenceListener)
|
||||
scheduler
|
||||
}
|
||||
|
||||
private val listener = object : CoreListenerStub() {
|
||||
override fun onConferenceInfoReceived(core: Core, conferenceInfo: ConferenceInfo) {
|
||||
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 {
|
||||
coreContext.core.addListener(listener)
|
||||
|
||||
|
@ -51,6 +83,7 @@ class ScheduledConferencesViewModel : ViewModel() {
|
|||
override fun onCleared() {
|
||||
coreContext.core.removeListener(listener)
|
||||
conferences.value.orEmpty().forEach(ScheduledConferenceData::destroy)
|
||||
|
||||
super.onCleared()
|
||||
}
|
||||
|
||||
|
@ -64,6 +97,11 @@ class ScheduledConferencesViewModel : ViewModel() {
|
|||
conferenceInfoList.addAll(conferences.value.orEmpty())
|
||||
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.destroy()
|
||||
conferences.value = conferenceInfoList
|
||||
|
|
|
@ -140,6 +140,20 @@ class LinphoneUtils {
|
|||
?: 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) {
|
||||
if (eventLog.type == EventLog.Type.ConferenceChatMessage) {
|
||||
val message = eventLog.chatMessage
|
||||
|
|
Loading…
Reference in a new issue