Эх сурвалжийг харах

feat: 当遇到新的礼物的时候,触发礼物资源列表的更新

陈文艺 1 долоо хоног өмнө
parent
commit
c65d70b218

+ 12 - 2
Lanu/Manager/Gift/LNGiftManager.swift

@@ -40,10 +40,15 @@ class LNGiftManager {
     }
     
     func fetchGiftList(roomId: String, queue: DispatchQueue = .main, handler: @escaping ([LNGiftItemVO]?) -> Void) {
-        LNHttpManager.shared.loadGiftList(roomId: roomId) { res, err in
+        LNHttpManager.shared.loadGiftList(roomId: roomId) { [weak self] res, err in
             queue.asyncIfNotGlobal {
                 handler(res?.list)
             }
+            if let res, let self, res.list.contains(where: {
+                self.resourceMap[$0.resId] == nil
+            }) {
+                updateGiftResource()
+            }
             if let err {
                 showToast(err.errorDesc)
             }
@@ -52,14 +57,18 @@ class LNGiftManager {
 }
 
 extension LNGiftManager {
-    private func updateGiftResource() {
+    func updateGiftResource() {
+        guard !isRefreshing else { return }
+        
         var changedGifts: [LNGiftResource] = []
         var newVersion = ""
+        isRefreshing = true
         
         func _fetchResource(next: String) {
             LNHttpManager.shared.loadResourceList(version: resourceVersion, size: pageSize, next: next) { [weak self] res, err in
                 guard let self else { return }
                 guard let res else {
+                    isRefreshing = false
                     return
                 }
                 if !res.list.isEmpty {
@@ -70,6 +79,7 @@ extension LNGiftManager {
                 }
                 if res.list.isEmpty || res.next.isEmpty != false {
                     mergeChangedResources(changedGifts, version: newVersion)
+                    isRefreshing = false
                 } else {
                     _fetchResource(next: next)
                 }

+ 6 - 0
Lanu/Views/Room/ViewModel/Message/LNRoomPushMessage.swift

@@ -54,6 +54,7 @@ class LNRoomPushMessage {
             list.append(item)
         case .RoomGift:
             if let messages: [LNRoomGiftMessage] = decodeCmdMessage() {
+                var needUpdate = false
                 for message in messages {
                     for user in message.receivers {
                         let item = LNRoomGiftMessageItem()
@@ -63,6 +64,8 @@ class LNRoomPushMessage {
                         if let giftRes = LNGiftManager.shared.resource(for: message.resId) {
                             item.giftName = giftRes.name
                             item.giftIcon = giftRes.icon
+                        } else {
+                            needUpdate = true
                         }
                         item.giftCount = message.quantity
                         
@@ -71,6 +74,9 @@ class LNRoomPushMessage {
                         list.append(item)
                     }
                 }
+                if needUpdate {
+                    LNGiftManager.shared.updateGiftResource()
+                }
             }
         case .MicClear:
             break