I'm going to sleep

This commit is contained in:
scigward 2025-08-20 09:53:24 +03:00
parent e30de77ad7
commit 1d50bc9985
2 changed files with 52 additions and 7 deletions

View file

@ -162,7 +162,8 @@ extension JSController {
showTitle: animeTitle,
season: season,
episode: episode,
showPosterURL: showPosterURL // Main show poster
showPosterURL: showPosterURL, // Main show poster
isFiller: isFiller
)
// Create the download ID now so we can use it for notifications
@ -1224,15 +1225,43 @@ extension JSController: AVAssetDownloadDelegate {
// If there's a subtitle URL, download it now that the video is saved
// Also fetch OP/ED skip timestamps in parallel and save simple sidecar JSON next to the video
if download.metadata?.episode != nil && download.type == .episode {
fetchSkipTimestampsFor(request: download, persistentURL: persistentURL) { ok in
if ok {
Logger.shared.log("[SkipSidecar] Saved OP/ED sidecar for episode \(download.metadata?.episode ?? -1) at: \(persistentURL.path)", type: "Download")
} else {
Logger.shared.log("[SkipSidecar] Failed to save sidecar for episode \(download.metadata?.episode ?? -1)", type: "Download")
if download.metadata?.episode != nil && download.type == .episode {
// Ensure we have MAL ID just like the streaming path (CustomPlayer)
if download.malID == nil, let aid = download.aniListID {
AniListMutation().fetchMalID(animeId: aid) { [weak self] result in
switch result {
case .success(let mal):
// Update the active download in-place with MAL ID
if let idx = self?.activeDownloads.firstIndex(where: { $0.id == download.id }) {
var updated = self?.activeDownloads[idx]
updated?.malID = mal
if let up = updated { self?.activeDownloads[idx] = up }
self?.fetchSkipTimestampsFor(request: up, persistentURL: persistentURL) { ok in
if ok {
Logger.shared.log("[SkipSidecar] Saved OP/ED sidecar for episode \(up.metadata?.episode ?? -1) at: \(persistentURL.path)", type: "Download")
} else {
Logger.shared.log("[SkipSidecar] Failed to save sidecar for episode \(up.metadata?.episode ?? -1)", type: "Download")
}
}
}
case .failure(let error):
Logger.shared.log("Unable to fetch MAL ID: \(error)", type: "Error")
Logger.shared.log("[SkipSidecar] Missing MAL ID for AniSkip v2 request", type: "Download")
}
}
} else {
fetchSkipTimestampsFor(request: download, persistentURL: persistentURL) { ok in
if ok {
Logger.shared.log("[SkipSidecar] Saved OP/ED sidecar for episode \(download.metadata?.episode ?? -1) at: \(persistentURL.path)", type: "Download")
} else {
Logger.shared.log("[SkipSidecar] Failed to save sidecar for episode \(download.metadata?.episode ?? -1)", type: "Download")
}
}
}
}
}
if let subtitleURL = download.subtitleURL {
downloadSubtitle(subtitleURL: subtitleURL, assetID: newAsset.id.uuidString)

View file

@ -1392,6 +1392,22 @@ struct EnhancedEpisodeRow: View {
VStack(alignment: .leading) {
Text("Episode \(asset.metadata?.episode ?? 0)")
.font(.system(size: 15))
if asset.metadata?.isFiller == true {
Text("Filler")
.font(.system(size: 12, weight: .semibold))
.padding(.horizontal, 8)
.padding(.vertical, 4)
.background(
Capsule()
.fill(Color.red.opacity(colorScheme == .dark ? 0.20 : 0.10))
)
.overlay(
Capsule()
.stroke(Color.red.opacity(0.24), lineWidth: 0.6)
)
.foregroundColor(.red)
}
if let title = asset.metadata?.title {
Text(title)
.font(.system(size: 13))