parent
b55d2c22f8
commit
ee34c9a0f8
|
@ -95,7 +95,7 @@ extension LiveApi: TargetType {
|
||||||
return "/live/room/info/\(roomId)"
|
return "/live/room/info/\(roomId)"
|
||||||
|
|
||||||
case .donation:
|
case .donation:
|
||||||
return "/live/room/donation"
|
return "/live/room/donation/v2"
|
||||||
|
|
||||||
case .refundDonation(let roomId):
|
case .refundDonation(let roomId):
|
||||||
return "/live/room/donation/refund/\(roomId)"
|
return "/live/room/donation/refund/\(roomId)"
|
||||||
|
|
|
@ -15,6 +15,7 @@ struct LiveRoomChatRawMessage: Codable {
|
||||||
let type: LiveRoomChatRawMessageType
|
let type: LiveRoomChatRawMessageType
|
||||||
let message: String
|
let message: String
|
||||||
let can: Int
|
let can: Int
|
||||||
|
var signature: LiveRoomDonationResponse? = nil
|
||||||
var signatureImageUrl: String? = nil
|
var signatureImageUrl: String? = nil
|
||||||
let donationMessage: String?
|
let donationMessage: String?
|
||||||
var isActiveRoulette: Bool? = nil
|
var isActiveRoulette: Bool? = nil
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
//
|
||||||
|
// LiveRoomDonationResponse.swift
|
||||||
|
// SodaLive
|
||||||
|
//
|
||||||
|
// Created by klaus on 5/1/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct LiveRoomDonationResponse: Codable {
|
||||||
|
let imageUrl: String
|
||||||
|
let time: Int
|
||||||
|
}
|
|
@ -159,17 +159,13 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
|
|
||||||
@Published var signatureImageUrl = "" {
|
@Published var signatureImageUrl = "" {
|
||||||
didSet {
|
didSet {
|
||||||
if signatureImageUrl.trimmingCharacters(in: .whitespacesAndNewlines).count > 0 {
|
showSignatureImage()
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 7) {
|
}
|
||||||
if let imageUrl = self.signatureImageUrls.first {
|
}
|
||||||
self.signatureImageUrl = imageUrl
|
|
||||||
self.signatureImageUrls.removeFirst()
|
@Published var signature: LiveRoomDonationResponse? = nil {
|
||||||
} else {
|
didSet {
|
||||||
self.signatureImageUrl = ""
|
showSignatureImage()
|
||||||
self.isShowSignatureImage = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,6 +183,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
@Published var selectedMenu: SelectedMenu? = nil
|
@Published var selectedMenu: SelectedMenu? = nil
|
||||||
|
|
||||||
var signatureImageUrls = [String]()
|
var signatureImageUrls = [String]()
|
||||||
|
var signatureList = [LiveRoomDonationResponse]()
|
||||||
var isShowSignatureImage = false
|
var isShowSignatureImage = false
|
||||||
|
|
||||||
var timer: DispatchSourceTimer?
|
var timer: DispatchSourceTimer?
|
||||||
|
@ -399,7 +396,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let jsonDecoder = JSONDecoder()
|
let jsonDecoder = JSONDecoder()
|
||||||
let decoded = try jsonDecoder.decode(ApiResponse<String>.self, from: responseData)
|
let decoded = try jsonDecoder.decode(ApiResponse<LiveRoomDonationResponse>.self, from: responseData)
|
||||||
|
|
||||||
self.isLoading = false
|
self.isLoading = false
|
||||||
|
|
||||||
|
@ -409,7 +406,8 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
type: .DONATION,
|
type: .DONATION,
|
||||||
message: rawMessage,
|
message: rawMessage,
|
||||||
can: can,
|
can: can,
|
||||||
signatureImageUrl: decoded.data,
|
signature: decoded.data,
|
||||||
|
signatureImageUrl: decoded.data?.imageUrl,
|
||||||
donationMessage: message
|
donationMessage: message
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -431,7 +429,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
)
|
)
|
||||||
|
|
||||||
totalDonationCan += can
|
totalDonationCan += can
|
||||||
showSignatureImage(imageUrl: decoded.data ?? "")
|
addSignature(signature: decoded.data)
|
||||||
|
|
||||||
self.messageChangeFlag.toggle()
|
self.messageChangeFlag.toggle()
|
||||||
if self.messages.count > 100 {
|
if self.messages.count > 100 {
|
||||||
|
@ -1689,7 +1687,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
.store(in: &subscription)
|
.store(in: &subscription)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func showSignatureImage(imageUrl: String) {
|
private func addSignatureImage(imageUrl: String) {
|
||||||
if imageUrl.trimmingCharacters(in: .whitespacesAndNewlines).count > 0 {
|
if imageUrl.trimmingCharacters(in: .whitespacesAndNewlines).count > 0 {
|
||||||
if !isShowSignatureImage {
|
if !isShowSignatureImage {
|
||||||
isShowSignatureImage = true
|
isShowSignatureImage = true
|
||||||
|
@ -1699,6 +1697,41 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func addSignature(signature: LiveRoomDonationResponse?) {
|
||||||
|
if let signature = signature {
|
||||||
|
if !isShowSignatureImage {
|
||||||
|
self.signature = signature
|
||||||
|
isShowSignatureImage = true
|
||||||
|
} else {
|
||||||
|
self.signatureList.append(signature)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func showSignatureImage() {
|
||||||
|
if let signature = signature {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(signature.time)) {
|
||||||
|
if let nextSignature = self.signatureList.first {
|
||||||
|
self.signature = nextSignature
|
||||||
|
self.signatureList.removeFirst()
|
||||||
|
} else {
|
||||||
|
self.signature = nil
|
||||||
|
self.isShowSignatureImage = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if signatureImageUrl.trimmingCharacters(in: .whitespacesAndNewlines).count > 0 {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 7) {
|
||||||
|
if let imageUrl = self.signatureImageUrls.first {
|
||||||
|
self.signatureImageUrl = imageUrl
|
||||||
|
self.signatureImageUrls.removeFirst()
|
||||||
|
} else {
|
||||||
|
self.signatureImageUrl = ""
|
||||||
|
self.isShowSignatureImage = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension LiveRoomViewModel: AgoraRtcEngineDelegate {
|
extension LiveRoomViewModel: AgoraRtcEngineDelegate {
|
||||||
|
@ -1863,7 +1896,12 @@ extension LiveRoomViewModel: AgoraRtmChannelDelegate {
|
||||||
)
|
)
|
||||||
|
|
||||||
self.totalDonationCan += decoded.can
|
self.totalDonationCan += decoded.can
|
||||||
self.showSignatureImage(imageUrl: decoded.signatureImageUrl ?? "")
|
|
||||||
|
if let signature = decoded.signature {
|
||||||
|
self.addSignature(signature: signature)
|
||||||
|
} else if let imageUrl = decoded.signatureImageUrl {
|
||||||
|
self.addSignatureImage(imageUrl: imageUrl)
|
||||||
|
}
|
||||||
} else if decoded.type == .ROULETTE_DONATION {
|
} else if decoded.type == .ROULETTE_DONATION {
|
||||||
self.messages.append(
|
self.messages.append(
|
||||||
LiveRoomRouletteDonationChat(
|
LiveRoomRouletteDonationChat(
|
||||||
|
|
|
@ -272,6 +272,21 @@ struct LiveRoomViewV2: View {
|
||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let signature = viewModel.signature {
|
||||||
|
VStack {
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
AnimatedImage(url: URL(string: signature.imageUrl))
|
||||||
|
.resizable()
|
||||||
|
.aspectRatio(contentMode: .fit)
|
||||||
|
.frame(width: screenSize().width - 64)
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
Spacer()
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue