1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-13 13:50:32 +05:30

Improve subscriptions count

Piped API now includes it in the streams response, no need for separate
query
This commit is contained in:
Arkadiusz Fal 2022-04-16 19:50:02 +02:00
parent db5765a84b
commit b70697e1be
6 changed files with 8 additions and 54 deletions

View File

@ -319,6 +319,7 @@ final class PipedAPI: Service, ObservableObject, VideosAPI {
let author = details["uploaderName"]?.stringValue ?? details["uploader"]!.stringValue let author = details["uploaderName"]?.stringValue ?? details["uploader"]!.stringValue
let authorThumbnailURL = details["avatarUrl"]?.url ?? details["uploaderAvatar"]?.url ?? details["avatar"]?.url let authorThumbnailURL = details["avatarUrl"]?.url ?? details["uploaderAvatar"]?.url ?? details["avatar"]?.url
let subscriptionsCount = details["uploaderSubscriberCount"]?.int
let uploaded = details["uploaded"]?.doubleValue let uploaded = details["uploaded"]?.doubleValue
var published = uploaded.isNil ? nil : (uploaded! / 1000).formattedAsRelativeTime() var published = uploaded.isNil ? nil : (uploaded! / 1000).formattedAsRelativeTime()
@ -336,7 +337,7 @@ final class PipedAPI: Service, ObservableObject, VideosAPI {
published: published!, published: published!,
views: details["views"]!.intValue, views: details["views"]!.intValue,
description: extractDescription(from: content), description: extractDescription(from: content),
channel: Channel(id: channelId, name: author, thumbnailURL: authorThumbnailURL), channel: Channel(id: channelId, name: author, thumbnailURL: authorThumbnailURL, subscriptionsCount: subscriptionsCount),
thumbnails: thumbnails, thumbnails: thumbnails,
live: live, live: live,
likes: details["likes"]?.int, likes: details["likes"]?.int,

View File

@ -45,8 +45,6 @@ final class PlayerModel: ObservableObject {
@Published var lastSkipped: Segment? { didSet { rebuildTVMenu() } } @Published var lastSkipped: Segment? { didSet { rebuildTVMenu() } }
@Published var restoredSegments = [Segment]() @Published var restoredSegments = [Segment]()
@Published var channelWithDetails: Channel?
#if os(iOS) #if os(iOS)
@Published var motionManager: CMMotionManager! @Published var motionManager: CMMotionManager!
@Published var lockedOrientation: UIInterfaceOrientation? @Published var lockedOrientation: UIInterfaceOrientation?
@ -210,11 +208,7 @@ final class PlayerModel: ObservableObject {
self?.sponsorBlock.loadSegments( self?.sponsorBlock.loadSegments(
videoID: video.videoID, videoID: video.videoID,
categories: Defaults[.sponsorBlockCategories] categories: Defaults[.sponsorBlockCategories]
) { [weak self] in )
if Defaults[.showChannelSubscribers] {
self?.loadCurrentItemChannelDetails()
}
}
} }
} }
@ -706,36 +700,6 @@ final class PlayerModel: ObservableObject {
currentArtwork = MPMediaItemArtwork(boundsSize: image!.size) { _ in image! } currentArtwork = MPMediaItemArtwork(boundsSize: image!.size) { _ in image! }
} }
func loadCurrentItemChannelDetails() {
guard let video = currentVideo,
!video.channel.detailsLoaded
else {
return
}
if restoreLoadedChannel() {
return
}
accounts.api.channel(video.channel.id).load().onSuccess { [weak self] response in
if let channel: Channel = response.typedContent() {
self?.channelWithDetails = channel
withAnimation {
self?.currentItem?.video.channel = channel
}
}
}
}
@discardableResult func restoreLoadedChannel() -> Bool {
if !currentVideo.isNil, channelWithDetails?.id == currentVideo!.channel.id {
currentItem.video.channel = channelWithDetails!
return true
}
return false
}
func rateLabel(_ rate: Float) -> String { func rateLabel(_ rate: Float) -> String {
let formatter = NumberFormatter() let formatter = NumberFormatter()
formatter.minimumFractionDigits = 0 formatter.minimumFractionDigits = 0

View File

@ -74,7 +74,6 @@ extension PlayerModel {
} }
preservedTime = currentItem.playbackTime preservedTime = currentItem.playbackTime
restoreLoadedChannel()
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
guard let video = self?.currentVideo else { guard let video = self?.currentVideo else {

View File

@ -48,7 +48,6 @@ extension Defaults.Keys {
static let playerInstanceID = Key<Instance.ID?>("playerInstance") static let playerInstanceID = Key<Instance.ID?>("playerInstance")
static let showKeywords = Key<Bool>("showKeywords", default: false) static let showKeywords = Key<Bool>("showKeywords", default: false)
static let showHistoryInPlayer = Key<Bool>("showHistoryInPlayer", default: false) static let showHistoryInPlayer = Key<Bool>("showHistoryInPlayer", default: false)
static let showChannelSubscribers = Key<Bool>("showChannelSubscribers", default: true)
static let commentsInstanceID = Key<Instance.ID?>("commentsInstance", default: kavinPipedInstanceID) static let commentsInstanceID = Key<Instance.ID?>("commentsInstance", default: kavinPipedInstanceID)
#if !os(tvOS) #if !os(tvOS)
static let commentsPlacement = Key<CommentsPlacement>("commentsPlacement", default: .separate) static let commentsPlacement = Key<CommentsPlacement>("commentsPlacement", default: .separate)

View File

@ -30,7 +30,6 @@ struct VideoDetails: View {
@EnvironmentObject<RecentsModel> private var recents @EnvironmentObject<RecentsModel> private var recents
@EnvironmentObject<SubscriptionsModel> private var subscriptions @EnvironmentObject<SubscriptionsModel> private var subscriptions
@Default(.showChannelSubscribers) private var showChannelSubscribers
@Default(.showKeywords) private var showKeywords @Default(.showKeywords) private var showKeywords
init( init(
@ -208,15 +207,13 @@ struct VideoDetails: View {
.font(.system(size: 14)) .font(.system(size: 14))
.bold() .bold()
if showChannelSubscribers { Group {
Group { if let subscribers = video!.channel.subscriptionsString {
if let subscribers = video!.channel.subscriptionsString { Text("\(subscribers) subscribers")
Text("\(subscribers) subscribers")
}
} }
.foregroundColor(.secondary)
.font(.caption2)
} }
.foregroundColor(.secondary)
.font(.caption2)
} }
} }
} }

View File

@ -14,7 +14,6 @@ struct PlayerSettings: View {
@Default(.playerSidebar) private var playerSidebar @Default(.playerSidebar) private var playerSidebar
@Default(.showHistoryInPlayer) private var showHistory @Default(.showHistoryInPlayer) private var showHistory
@Default(.showKeywords) private var showKeywords @Default(.showKeywords) private var showKeywords
@Default(.showChannelSubscribers) private var channelSubscribers
@Default(.pauseOnHidingPlayer) private var pauseOnHidingPlayer @Default(.pauseOnHidingPlayer) private var pauseOnHidingPlayer
#if os(iOS) #if os(iOS)
@Default(.honorSystemOrientationLock) private var honorSystemOrientationLock @Default(.honorSystemOrientationLock) private var honorSystemOrientationLock
@ -83,7 +82,6 @@ struct PlayerSettings: View {
keywordsToggle keywordsToggle
showHistoryToggle showHistoryToggle
channelSubscribersToggle
} }
Section(header: SettingsHeader(text: "Picture in Picture")) { Section(header: SettingsHeader(text: "Picture in Picture")) {
@ -196,10 +194,6 @@ struct PlayerSettings: View {
Toggle("Show history", isOn: $showHistory) Toggle("Show history", isOn: $showHistory)
} }
private var channelSubscribersToggle: some View {
Toggle("Show subscribers count", isOn: $channelSubscribers)
}
private var pauseOnHidingPlayerToggle: some View { private var pauseOnHidingPlayerToggle: some View {
Toggle("Pause when player is closed", isOn: $pauseOnHidingPlayer) Toggle("Pause when player is closed", isOn: $pauseOnHidingPlayer)
} }