fix(live-room): 방장 종료 후 오래된 룸 정보 오류 노출을 막는다

This commit is contained in:
Yu Sung
2026-04-13 13:39:19 +09:00
parent 3e524f121d
commit 7db825cd41
2 changed files with 84 additions and 7 deletions

View File

@@ -287,6 +287,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
private var blockedMemberIdList = Set<Int>()
private var hasInvokedJoinChannel = false
private var hasDetectedHostOffline = false
private var v2vMessageAssembler = V2vMessageAssembler()
private var v2vAgentId: String?
private var v2vSourceLanguage: String?
@@ -322,6 +323,35 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
liveRoomInfo?.creatorId == UserDefaults.int(forKey: .userId)
}
private func shouldSuppressMissingRoomInfoError(_ message: String?) -> Bool {
let ignorableLiveRoomNotFoundMessages: Set<String> = [
"해당하는 라이브의 정보가 없습니다.",
"Live session information not found.",
"該当するライブの情報がありません。"
]
guard let message, ignorableLiveRoomNotFoundMessages.contains(message) else {
return false
}
return liveRoomInfo != nil
|| hasInvokedJoinChannel
|| hasDetectedHostOffline
|| AppState.shared.roomId == 0
}
private func shouldRefreshRoomInfoOnMemberLeave(memberId: Int) -> Bool {
guard let liveRoomInfo = liveRoomInfo else {
return false
}
guard !hasDetectedHostOffline else {
return false
}
return liveRoomInfo.creatorId != memberId
}
func stopV2VTranslationIfJoined(clearCaptionText: Bool = true) {
guard isV2VJoined else { return }
stopV2VTranslation(clearCaptionText: clearCaptionText)
@@ -616,6 +646,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
let previousIsChatFrozen = self.isChatFrozen
let syncedIsChatFrozen = data.isChatFrozen ?? false
self.hasDetectedHostOffline = false
self.liveRoomInfo = data
self.updateV2VAvailability(roomInfo: data)
@@ -662,13 +693,17 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
onSuccess(nickname)
}
} else {
if let message = decoded.message {
self.errorMessage = message
if self.shouldSuppressMissingRoomInfoError(decoded.message) {
DEBUG_LOG("Suppress stale getRoomInfo error during live-room teardown: \(decoded.message ?? "")")
} else {
self.errorMessage = I18n.Common.commonError
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = I18n.Common.commonError
}
self.isShowErrorPopup = true
}
self.isShowErrorPopup = true
}
self.isLoading = false
@@ -2973,12 +3008,13 @@ extension LiveRoomViewModel: AgoraRtcEngineDelegate {
if uid == UInt(creatorId) {
//
self.hasDetectedHostOffline = true
self.deInitAgoraEngine()
self.liveRoomInfo = nil
AppState.shared.errorMessage = I18n.LiveRoom.liveEndedMessage
AppState.shared.isShowErrorPopup = true
AppState.shared.roomId = 0
} else {
} else if self.shouldRefreshRoomInfoOnMemberLeave(memberId: Int(uid)) {
// get room info
self.getRoomInfo()
}
@@ -3265,7 +3301,7 @@ extension LiveRoomViewModel: AgoraRtmClientDelegate {
}
}
} else if eventType == .remoteLeaveChannel {
if let liveRoomInfo = liveRoomInfo, liveRoomInfo.creatorId != Int(memberId)! {
if shouldRefreshRoomInfoOnMemberLeave(memberId: Int(memberId)!) {
getRoomInfo()
}
}