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:
parent
db5765a84b
commit
b70697e1be
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user