Fixed Novels fetching
Some checks failed
Build and Release / Build IPA (push) Has been cancelled
Build and Release / Build macOS App (push) Has been cancelled

This commit is contained in:
cranci1 2025-11-09 09:21:25 +01:00
parent 9271c3e122
commit df9bc6db67

View file

@ -128,7 +128,6 @@ extension JSController {
airdate: item["airdate"] as? String ?? "" airdate: item["airdate"] as? String ?? ""
) )
} }
Logger.shared.log("Successfully extracted \(resultItems.count) details", type: "Info")
} else { } else {
Logger.shared.log("Failed to parse JSON of extractDetails", type: "Error") Logger.shared.log("Failed to parse JSON of extractDetails", type: "Error")
} }
@ -162,12 +161,27 @@ extension JSController {
promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails as Any]) promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails as Any])
dispatchGroup.enter() dispatchGroup.enter()
let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString])
var hasLeftEpisodesGroup = false var hasLeftEpisodesGroup = false
let episodesGroupQueue = DispatchQueue(label: "episodes.group") let episodesGroupQueue = DispatchQueue(label: "episodes.group")
let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString]) let timeoutWorkItem = DispatchWorkItem {
Logger.shared.log("Timeout for extractEpisodes", type: "Warning")
episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else {
Logger.shared.log("extractEpisodes: timeout called but group already left", type: "Debug")
return
}
hasLeftEpisodesGroup = true
dispatchGroup.leave()
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 15.0, execute: timeoutWorkItem)
guard let promiseEpisodes = promiseValueEpisodes else { guard let promiseEpisodes = promiseValueEpisodes else {
Logger.shared.log("extractEpisodes did not return a Promise", type: "Error") Logger.shared.log("extractEpisodes did not return a Promise", type: "Error")
timeoutWorkItem.cancel()
episodesGroupQueue.sync { episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else { return } guard !hasLeftEpisodesGroup else { return }
hasLeftEpisodesGroup = true hasLeftEpisodesGroup = true
@ -178,6 +192,7 @@ extension JSController {
} }
let thenBlockEpisodes: @convention(block) (JSValue) -> Void = { result in let thenBlockEpisodes: @convention(block) (JSValue) -> Void = { result in
timeoutWorkItem.cancel()
episodesGroupQueue.sync { episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else { guard !hasLeftEpisodesGroup else {
Logger.shared.log("extractEpisodes: thenBlock called but group already left", type: "Debug") Logger.shared.log("extractEpisodes: thenBlock called but group already left", type: "Debug")
@ -197,7 +212,6 @@ extension JSController {
duration: nil duration: nil
) )
} }
Logger.shared.log("Successfully extracted \(episodeLinks.count) episodes", type: "Info")
} else { } else {
Logger.shared.log("Failed to parse JSON of extractEpisodes", type: "Error") Logger.shared.log("Failed to parse JSON of extractEpisodes", type: "Error")
} }
@ -212,6 +226,7 @@ extension JSController {
} }
let catchBlockEpisodes: @convention(block) (JSValue) -> Void = { error in let catchBlockEpisodes: @convention(block) (JSValue) -> Void = { error in
timeoutWorkItem.cancel()
episodesGroupQueue.sync { episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else { guard !hasLeftEpisodesGroup else {
Logger.shared.log("extractEpisodes: catchBlock called but group already left", type: "Debug") Logger.shared.log("extractEpisodes: catchBlock called but group already left", type: "Debug")