refactor: observe call events from LocalCache instead of EventProcessor
Remove callManager injection from EventProcessor — let the existing gift wrap pipeline consume and index call events normally. Instead, observe new notes from LocalCache.live.newEventBundles in AccountViewModel and route call signaling events to CallManager from there. This keeps the EventProcessor clean and follows the existing pattern for UI-layer event observation. https://claude.ai/code/session_017hZm7yu7CzmcQgZGSaqSXS
This commit is contained in:
+23
-4
@@ -146,6 +146,12 @@ import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent
|
||||
import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent
|
||||
import com.vitorpamplona.quartz.nip90Dvms.contentDiscoveryResponse.NIP90ContentDiscoveryResponseEvent
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.DimensionTag
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallAnswerEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallHangupEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallIceCandidateEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallOfferEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallRejectEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallRenegotiateEvent
|
||||
import com.vitorpamplona.quartz.utils.Hex
|
||||
import com.vitorpamplona.quartz.utils.Log
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
@@ -219,10 +225,6 @@ class AccountViewModel(
|
||||
callController = controller
|
||||
}
|
||||
|
||||
init {
|
||||
account.newNotesPreProcessor.callManager = callManager
|
||||
}
|
||||
|
||||
val eventSync =
|
||||
EventSync(
|
||||
accountPubKey = account.signer.pubKey,
|
||||
@@ -1413,6 +1415,23 @@ class AccountViewModel(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
LocalCache.live.newEventBundles.collect { newNotes ->
|
||||
newNotes.forEach { note ->
|
||||
val event = note.event ?: return@forEach
|
||||
when (event) {
|
||||
is CallOfferEvent,
|
||||
is CallAnswerEvent,
|
||||
is CallIceCandidateEvent,
|
||||
is CallHangupEvent,
|
||||
is CallRejectEvent,
|
||||
is CallRenegotiateEvent,
|
||||
-> callManager.onSignalingEvent(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
|
||||
-20
@@ -20,7 +20,6 @@
|
||||
*/
|
||||
package com.vitorpamplona.amethyst.ui.screen.loggedIn
|
||||
|
||||
import com.vitorpamplona.amethyst.commons.call.CallManager
|
||||
import com.vitorpamplona.amethyst.commons.model.privateChats.ChatroomList
|
||||
import com.vitorpamplona.amethyst.model.Account
|
||||
import com.vitorpamplona.amethyst.model.LocalCache
|
||||
@@ -37,19 +36,12 @@ import com.vitorpamplona.quartz.nip57Zaps.LnZapRequestEvent
|
||||
import com.vitorpamplona.quartz.nip57Zaps.PrivateZapCache
|
||||
import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent
|
||||
import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallAnswerEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallHangupEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallIceCandidateEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallOfferEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallRejectEvent
|
||||
import com.vitorpamplona.quartz.nipACWebRtcCalls.events.CallRenegotiateEvent
|
||||
import com.vitorpamplona.quartz.utils.Log
|
||||
import kotlinx.coroutines.CancellationException
|
||||
|
||||
class EventProcessor(
|
||||
private val account: Account,
|
||||
private val cache: LocalCache,
|
||||
var callManager: CallManager? = null,
|
||||
) {
|
||||
private val chatHandler = ChatHandler(account.chatroomList)
|
||||
private val draftHandler = DraftEventHandler(account, cache)
|
||||
@@ -76,22 +68,10 @@ class EventProcessor(
|
||||
publicNote: Note,
|
||||
) {
|
||||
when (event) {
|
||||
is CallOfferEvent,
|
||||
is CallAnswerEvent,
|
||||
is CallIceCandidateEvent,
|
||||
is CallHangupEvent,
|
||||
is CallRejectEvent,
|
||||
is CallRenegotiateEvent,
|
||||
-> callManager?.onSignalingEvent(event)
|
||||
|
||||
is ChatroomKeyable -> chatHandler.add(event, eventNote, publicNote)
|
||||
|
||||
is DraftWrapEvent -> draftHandler.add(event, eventNote, publicNote)
|
||||
|
||||
is GiftWrapEvent -> giftWrapHandler.add(event, eventNote, publicNote)
|
||||
|
||||
is SealedRumorEvent -> sealHandler.add(event, eventNote, publicNote)
|
||||
|
||||
is LnZapRequestEvent -> zapRequest.add(event, eventNote, publicNote)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user