Fix updating video watches

This commit is contained in:
Arkadiusz Fal 2022-12-04 12:07:06 +01:00
parent 210f28da37
commit 82cd08d44e
2 changed files with 19 additions and 11 deletions

View File

@ -58,7 +58,7 @@ extension PlayerModel {
let results = try? backgroundContext.fetch(watchFetchRequest)
backgroundContext.perform { [weak self] in
guard let self else {
guard let self, finished || self.backend.isPlaying else {
return
}
@ -74,13 +74,16 @@ extension PlayerModel {
watch = results?.first
}
if let seconds = self.playerItemDuration?.seconds {
watch.videoDuration = seconds
let duration = self.playerTime.duration.seconds
if duration.isFinite, duration > 0 {
watch.videoDuration = duration
}
if finished {
watch.stoppedAt = watch.videoDuration
} else if self.resetWatchedStatusOnPlaying, seconds.isFinite, seconds > 0 {
if watch.finished {
if !finished, self.resetWatchedStatusOnPlaying, seconds.isFinite, seconds > 0 {
watch.stoppedAt = seconds
}
} else if seconds.isFinite, seconds > 0 {
watch.stoppedAt = seconds
}

View File

@ -187,7 +187,7 @@ struct VideoCell: View {
}
}
if !timeOnThumbnail, let time = video.length.formattedAsPlaybackTime() {
if !timeOnThumbnail, let time = videoDuration {
VStack {
Image(systemName: "clock")
.frame(height: 15)
@ -202,13 +202,13 @@ struct VideoCell: View {
.frame(minHeight: 180)
#if os(tvOS)
if let time = video.length.formattedAsPlaybackTime() || video.live || video.upcoming {
if let time = videoDuration || video.live || video.upcoming {
Spacer()
VStack {
Spacer()
if let time = video.length.formattedAsPlaybackTime() {
if let time = videoDuration {
HStack(spacing: 4) {
Image(systemName: "clock")
Text(time)
@ -230,6 +230,11 @@ struct VideoCell: View {
}
#endif
private var videoDuration: String? {
let length = video.length.isZero ? watch?.videoDuration : video.length
return length?.formattedAsPlaybackTime()
}
private var verticalRow: some View {
VStack(alignment: .leading, spacing: 0) {
thumbnail
@ -332,7 +337,7 @@ struct VideoCell: View {
private var additionalDetailsAvailable: Bool {
video.publishedDate != nil || video.views != 0 ||
(!timeOnThumbnail && !video.length.formattedAsPlaybackTime().isNil)
(!timeOnThumbnail && !videoDuration.isNil)
}
private var thumbnail: some View {
@ -438,7 +443,7 @@ struct VideoCell: View {
}
private var time: String? {
guard var videoTime = video.length.formattedAsPlaybackTime() else {
guard var videoTime = videoDuration else {
return nil
}