mirror of
https://github.com/yattee/yattee.git
synced 2025-08-06 10:44:06 +00:00
Add ReturnYoutubeDislike API
This commit is contained in:
@@ -62,6 +62,8 @@ final class PlayerModel: ObservableObject {
|
||||
@Published var lastSkipped: Segment? { didSet { rebuildTVMenu() } }
|
||||
@Published var restoredSegments = [Segment]()
|
||||
|
||||
@Published var returnYouTubeDislike = ReturnYouTubeDislikeAPI()
|
||||
|
||||
#if os(iOS)
|
||||
@Published var motionManager: CMMotionManager!
|
||||
@Published var lockedOrientation: UIInterfaceOrientation?
|
||||
@@ -223,6 +225,10 @@ final class PlayerModel: ObservableObject {
|
||||
self?.loadCurrentItemChannelDetails()
|
||||
}
|
||||
}
|
||||
|
||||
self?.returnYouTubeDislike.loadDislikes(videoID: video.videoID) { [weak self] dislikes in
|
||||
self?.currentItem?.video?.dislikes = dislikes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
48
Model/ReturnYouTubeDislike/ReturnYouTubeDislikeAPI.swift
Normal file
48
Model/ReturnYouTubeDislike/ReturnYouTubeDislikeAPI.swift
Normal file
@@ -0,0 +1,48 @@
|
||||
import Alamofire
|
||||
import Defaults
|
||||
import Foundation
|
||||
import Logging
|
||||
import SwiftyJSON
|
||||
|
||||
final class ReturnYouTubeDislikeAPI: ObservableObject {
|
||||
let logger = Logger(label: "stream.yattee.app.rytd")
|
||||
|
||||
@Published var videoID: String?
|
||||
@Published var dislikes = -1
|
||||
|
||||
func loadDislikes(videoID: String, completionHandler: @escaping (Int) -> Void = { _ in }) {
|
||||
guard self.videoID != videoID else {
|
||||
completionHandler(dislikes)
|
||||
return
|
||||
}
|
||||
|
||||
self.videoID = videoID
|
||||
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.requestDislikes(completionHandler: completionHandler)
|
||||
}
|
||||
}
|
||||
|
||||
private func requestDislikes(completionHandler: @escaping (Int) -> Void = { _ in }) {
|
||||
AF.request(votesURL).responseDecodable(of: JSON.self) { [weak self] response in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
switch response.result {
|
||||
case let .success(value):
|
||||
let value = JSON(value).dictionaryValue["dislikes"]?.int
|
||||
self.dislikes = value ?? -1
|
||||
|
||||
case let .failure(error):
|
||||
self.logger.error("failed to load dislikes: \(error.localizedDescription)")
|
||||
}
|
||||
|
||||
completionHandler(self.dislikes)
|
||||
}
|
||||
}
|
||||
|
||||
private var votesURL: String {
|
||||
"https://returnyoutubedislikeapi.com/Votes?videoId=\(videoID ?? "")"
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user