diff --git a/Model/Player/PlayerQueue.swift b/Model/Player/PlayerQueue.swift index 62ca6c39..55b8a9c9 100644 --- a/Model/Player/PlayerQueue.swift +++ b/Model/Player/PlayerQueue.swift @@ -179,10 +179,6 @@ extension PlayerModel { } func restoreQueue() { - guard !accounts.current.isNil else { - return - } - var restoredQueue = [PlayerQueueItem?]() if let lastPlayed = Defaults[.lastPlayed], @@ -194,12 +190,14 @@ extension PlayerModel { restoredQueue.append(contentsOf: Defaults[.queue]) queue = restoredQueue.compactMap { $0 } + } - queue.forEach { item in - accounts.api.loadDetails(item) { newItem in - if let index = self.queue.firstIndex(where: { $0.id == item.id }) { - self.queue[index] = newItem - } + func loadQueueVideoDetails(_ item: PlayerQueueItem) { + guard !accounts.current.isNil, !item.hasDetailsLoaded else { return } + + accounts.api.loadDetails(item) { newItem in + if let index = self.queue.firstIndex(where: { $0.id == item.id }) { + self.queue[index] = newItem } } } diff --git a/Model/Player/PlayerQueueItem.swift b/Model/Player/PlayerQueueItem.swift index afe8b372..cfa18c7c 100644 --- a/Model/Player/PlayerQueueItem.swift +++ b/Model/Player/PlayerQueueItem.swift @@ -39,6 +39,10 @@ struct PlayerQueueItem: Hashable, Identifiable, Defaults.Serializable { return duration - seconds <= 10 } + var hasDetailsLoaded: Bool { + !video.isNil + } + func hash(into hasher: inout Hasher) { hasher.combine(id) } diff --git a/Shared/Player/VideoDetails.swift b/Shared/Player/VideoDetails.swift index 069120a7..801894be 100644 --- a/Shared/Player/VideoDetails.swift +++ b/Shared/Player/VideoDetails.swift @@ -159,7 +159,7 @@ struct VideoDetails: View { .font(.system(size: 10).bold()) .overlay( RoundedRectangle(cornerRadius: 2) - .stroke(active ? Color.accentColor : .gray, lineWidth: 2) + .stroke(active ? Color.accentColor : .gray, lineWidth: 1.2) .foregroundColor(.clear) ) .frame(maxWidth: .infinity) diff --git a/Shared/Videos/VideoBanner.swift b/Shared/Videos/VideoBanner.swift index 52623061..6f8eca60 100644 --- a/Shared/Videos/VideoBanner.swift +++ b/Shared/Videos/VideoBanner.swift @@ -24,14 +24,14 @@ struct VideoBanner: View { #endif } VStack(alignment: .leading, spacing: 4) { - Text(video?.title ?? "Unknown title") + Text(video?.title ?? "Loading...") .truncationMode(.middle) .lineLimit(2) .font(.headline) .frame(alignment: .leading) HStack { - Text(video?.author ?? "Unknown author") + Text(video?.author ?? "") .lineLimit(1) Spacer() diff --git a/tvOS/NowPlayingView.swift b/tvOS/NowPlayingView.swift index e231e4aa..f1ee777b 100644 --- a/tvOS/NowPlayingView.swift +++ b/tvOS/NowPlayingView.swift @@ -68,6 +68,9 @@ struct NowPlayingView: View { } label: { VideoBanner(video: item.video) } + .onAppear { + player.loadQueueVideoDetails(item) + } .contextMenu { Button("Remove", role: .destructive) { player.remove(item)