mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-30 12:11:59 +00:00 
			
		
		
		
	hopefully fixes #629
should also get rid of empty comments if they couldn't be loaded
This commit is contained in:
		| @@ -113,8 +113,11 @@ final class PipedAPI: Service, ObservableObject, VideosAPI { | ||||
|             content.json.arrayValue.compactMap { self.extractVideo(from: $0) } | ||||
|         } | ||||
|  | ||||
|         configureTransformer(pathPattern("comments/*")) { (content: Entity<JSON>) -> CommentsPage in | ||||
|             let details = content.json.dictionaryValue | ||||
|         configureTransformer(pathPattern("comments/*")) { (content: Entity<JSON>?) -> CommentsPage in | ||||
|             guard let details = content?.json.dictionaryValue else { | ||||
|                 return CommentsPage(comments: [], nextPage: nil, disabled: true) | ||||
|             } | ||||
|  | ||||
|             let comments = details["comments"]?.arrayValue.compactMap { self.extractComment(from: $0) } ?? [] | ||||
|             let nextPage = details["nextpage"]?.string | ||||
|             let disabled = details["disabled"]?.bool ?? false | ||||
| @@ -663,16 +666,16 @@ final class PipedAPI: Service, ObservableObject, VideosAPI { | ||||
|  | ||||
|         let videoStreams = content.dictionaryValue["videoStreams"]?.arrayValue ?? [] | ||||
|  | ||||
|         videoStreams.forEach { videoStream in | ||||
|         for videoStream in videoStreams { | ||||
|             let videoCodec = videoStream.dictionaryValue["codec"]?.string ?? "" | ||||
|             if Self.disallowedVideoCodecs.contains(where: videoCodec.contains) { | ||||
|                 return | ||||
|                 continue | ||||
|             } | ||||
|  | ||||
|             guard let audioAssetUrl = audioStream.dictionaryValue["url"]?.url, | ||||
|                   let videoAssetUrl = videoStream.dictionaryValue["url"]?.url | ||||
|             else { | ||||
|                 return | ||||
|                 continue | ||||
|             } | ||||
|  | ||||
|             let audioAsset = AVURLAsset(url: audioAssetUrl) | ||||
|   | ||||
| @@ -35,32 +35,35 @@ final class CommentsModel: ObservableObject { | ||||
|  | ||||
|     func load(page: String? = nil) { | ||||
|         guard let video = player.currentVideo else { return } | ||||
|  | ||||
|         if !firstPage && !nextPageAvailable { | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         firstPage = page.isNil || page!.isEmpty | ||||
|         guard firstPage || nextPageAvailable else { return } | ||||
|  | ||||
|         player | ||||
|             .playerAPI(video)? | ||||
|             .comments(video.videoID, page: page)? | ||||
|             .load() | ||||
|             .onSuccess { [weak self] response in | ||||
|                 if let page: CommentsPage = response.typedContent() { | ||||
|                     self?.all += page.comments | ||||
|                     self?.nextPage = page.nextPage | ||||
|                     self?.disabled = page.disabled | ||||
|                 guard let self = self else { return } | ||||
|                 if let commentsPage: CommentsPage = response.typedContent() { | ||||
|                     self.all += commentsPage.comments | ||||
|                     self.nextPage = commentsPage.nextPage | ||||
|                     self.disabled = commentsPage.disabled | ||||
|                 } else { | ||||
|                     print("Failed to parse response: \(response)") | ||||
|                 } | ||||
|             } | ||||
|             .onFailure { [weak self] requestError in | ||||
|                 self?.disabled = !requestError.json.dictionaryValue["error"].isNil | ||||
|             .onFailure { [weak self] error in | ||||
|                 self?.handleFailure(error: error) | ||||
|             } | ||||
|             .onCompletion { [weak self] _ in | ||||
|                 self?.loaded = true | ||||
|             } | ||||
|     } | ||||
|  | ||||
|     func handleFailure(error: Error) { | ||||
|         disabled = true | ||||
|         print("Encountered an error: \(error)") | ||||
|     } | ||||
|  | ||||
|     func loadNextPageIfNeeded(current comment: Comment) { | ||||
|         let thresholdIndex = all.index(all.endIndex, offsetBy: -5) | ||||
|         if all.firstIndex(where: { $0 == comment }) == thresholdIndex { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Toni Förster
					Toni Förster