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 ?? ""
)
}
Logger.shared.log("Successfully extracted \(resultItems.count) details", type: "Info")
} else {
Logger.shared.log("Failed to parse JSON of extractDetails", type: "Error")
}
@ -162,12 +161,27 @@ extension JSController {
promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails as Any])
dispatchGroup.enter()
let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString])
var hasLeftEpisodesGroup = false
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 {
Logger.shared.log("extractEpisodes did not return a Promise", type: "Error")
timeoutWorkItem.cancel()
episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else { return }
hasLeftEpisodesGroup = true
@ -178,6 +192,7 @@ extension JSController {
}
let thenBlockEpisodes: @convention(block) (JSValue) -> Void = { result in
timeoutWorkItem.cancel()
episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else {
Logger.shared.log("extractEpisodes: thenBlock called but group already left", type: "Debug")
@ -197,7 +212,6 @@ extension JSController {
duration: nil
)
}
Logger.shared.log("Successfully extracted \(episodeLinks.count) episodes", type: "Info")
} else {
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
timeoutWorkItem.cancel()
episodesGroupQueue.sync {
guard !hasLeftEpisodesGroup else {
Logger.shared.log("extractEpisodes: catchBlock called but group already left", type: "Debug")