Skip to content

Commit df9bc6d

Browse files
committed
Fixed Novels fetching
1 parent 9271c3e commit df9bc6d

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

Sora/Utlis & Misc/JSLoader/JSController-Details.swift

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ extension JSController {
128128
airdate: item["airdate"] as? String ?? ""
129129
)
130130
}
131-
Logger.shared.log("Successfully extracted \(resultItems.count) details", type: "Info")
132131
} else {
133132
Logger.shared.log("Failed to parse JSON of extractDetails", type: "Error")
134133
}
@@ -162,12 +161,27 @@ extension JSController {
162161
promiseDetails.invokeMethod("catch", withArguments: [catchFunctionDetails as Any])
163162

164163
dispatchGroup.enter()
164+
let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString])
165+
165166
var hasLeftEpisodesGroup = false
166167
let episodesGroupQueue = DispatchQueue(label: "episodes.group")
167168

168-
let promiseValueEpisodes = extractEpisodesFunction.call(withArguments: [url.absoluteString])
169+
let timeoutWorkItem = DispatchWorkItem {
170+
Logger.shared.log("Timeout for extractEpisodes", type: "Warning")
171+
episodesGroupQueue.sync {
172+
guard !hasLeftEpisodesGroup else {
173+
Logger.shared.log("extractEpisodes: timeout called but group already left", type: "Debug")
174+
return
175+
}
176+
hasLeftEpisodesGroup = true
177+
dispatchGroup.leave()
178+
}
179+
}
180+
DispatchQueue.main.asyncAfter(deadline: .now() + 15.0, execute: timeoutWorkItem)
181+
169182
guard let promiseEpisodes = promiseValueEpisodes else {
170183
Logger.shared.log("extractEpisodes did not return a Promise", type: "Error")
184+
timeoutWorkItem.cancel()
171185
episodesGroupQueue.sync {
172186
guard !hasLeftEpisodesGroup else { return }
173187
hasLeftEpisodesGroup = true
@@ -178,6 +192,7 @@ extension JSController {
178192
}
179193

180194
let thenBlockEpisodes: @convention(block) (JSValue) -> Void = { result in
195+
timeoutWorkItem.cancel()
181196
episodesGroupQueue.sync {
182197
guard !hasLeftEpisodesGroup else {
183198
Logger.shared.log("extractEpisodes: thenBlock called but group already left", type: "Debug")
@@ -197,7 +212,6 @@ extension JSController {
197212
duration: nil
198213
)
199214
}
200-
Logger.shared.log("Successfully extracted \(episodeLinks.count) episodes", type: "Info")
201215
} else {
202216
Logger.shared.log("Failed to parse JSON of extractEpisodes", type: "Error")
203217
}
@@ -212,6 +226,7 @@ extension JSController {
212226
}
213227

214228
let catchBlockEpisodes: @convention(block) (JSValue) -> Void = { error in
229+
timeoutWorkItem.cancel()
215230
episodesGroupQueue.sync {
216231
guard !hasLeftEpisodesGroup else {
217232
Logger.shared.log("extractEpisodes: catchBlock called but group already left", type: "Debug")

0 commit comments

Comments
 (0)