Browse Source

dirty

master
schmicma 4 years ago
parent
commit
370ddd9cea
  1. 3
      kplayer/core/KSettings.swift
  2. 3
      kplayer/master/KSettingsView.swift
  3. 3
      kplayer/video/SVideoModel.swift
  4. 15
      kplayer/video/SVideoPlayer.swift
  5. 52
      kplayer/web/KBrowserView.swift

3
kplayer/core/KSettings.swift

@ -18,6 +18,9 @@ class KSettings: ObservableObject {
@Published
var edit = false
@Published
var automaticallyWaitsToMinimizeStalling = true
convenience init(model: KSettingsModel) {
self.init()
scale = model.scale

3
kplayer/master/KSettingsView.swift

@ -27,6 +27,9 @@ struct KSettingsView: View {
Toggle(isOn: $kSettings.edit, label: {
Text("Edit")
})
Toggle(isOn: $kSettings.automaticallyWaitsToMinimizeStalling, label: {
Text("Stalling")
})
}
}
Button(action: {

3
kplayer/video/SVideoModel.swift

@ -36,7 +36,8 @@ class SVideoModel : ObservableObject {
@Published var proxy: GeometryProxy?
var observer: Any?
@Published var observer: Any?
@Published var observed: AVPlayer?
init(allItems: [MediaItem], currentSnapshot: MediaItem, baseItem: MediaItem) {
self.allItems = allItems

15
kplayer/video/SVideoPlayer.swift

@ -51,9 +51,14 @@ struct SVideoPlayer: View, EditItemDelegate {
}
func cleanup() {
if model.observer != nil {
player.removeTimeObserver(model.observer)
model.observer = nil
if model.observer != nil && model.observed != nil && model.observed! === player {
do {
player.removeTimeObserver(model.observer)
model.observer = nil
}
catch {
print("exception")
}
}
}
@ -304,6 +309,7 @@ struct SVideoPlayer: View, EditItemDelegate {
}
.onAppear() {
model.observed = player
model.observer = player.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.02, preferredTimescale: 600), queue: nil) { time in
if timeCounter >= 1 {
timeCounter -= 1
@ -348,7 +354,7 @@ struct SVideoPlayer: View, EditItemDelegate {
}
}
player.automaticallyWaitsToMinimizeStalling = true
player.automaticallyWaitsToMinimizeStalling = LocalManager.sharedInstance.settings.automaticallyWaitsToMinimizeStalling
let item = model.currentPlayerItem()
@ -385,7 +391,6 @@ struct SVideoPlayer: View, EditItemDelegate {
player.pause()
player.replaceCurrentItem(with: nil)
model.currentURL = nil
cleanup()
completionHandler!(withSave)
}

52
kplayer/web/KBrowserView.swift

@ -17,6 +17,7 @@ struct KBrowserView: View {
@State var webTitle = ""
@State var serverMessage = "On Server"
@State var dlUrls = [String]()
@State var cookieString = ""
var item: String
var completionHandler: (() -> Void)?
@ -83,6 +84,7 @@ struct KBrowserView: View {
Spacer()
Text (serverMessage).foregroundColor(Color.blue)
Button(action: {
getCookieHeader()
NetworkManager.sharedInstance.dlserverlen { c in
serverMessage = "On Server: \(c)";
}
@ -92,18 +94,15 @@ struct KBrowserView: View {
})
.buttonStyle(BorderlessButtonStyle()).confirmationDialog("Open", isPresented: $downloadOptions) {
ForEach(dlUrls, id: \.self) { ur in
ForEach(dlUrls, id: \.self) { urlspace in
let ur = urlspace.replacingOccurrences(of: " ", with: "%20")
let name = makeLabel(url: ur)
HStack {
Button(name) {
Task {
await self.preview(url: ur, dl: false)
}
self.preview(url: ur, dl: false)
}
Button("download \(name)") {
Task {
await self.preview(url: ur, dl: true)
}
self.preview(url: ur, dl: true)
}
}
}
@ -151,7 +150,7 @@ struct KBrowserView: View {
}.fullScreenCover(isPresented: $showVideoView, content: {
SVideoPlayer(completionHandler: { saved in
showVideoView = false
}, model: videoModel!)
}, model: videoModel!).background(Color.black)
})
}
@ -173,7 +172,7 @@ struct KBrowserView: View {
return name
}
func preview(url: String, dl: Bool) async {
func preview(url: String, dl: Bool) {
showVideoView = false
let url2 = URL(string: url)!
@ -193,23 +192,19 @@ struct KBrowserView: View {
let hostcomp = host.split(separator: ".")
let site = String(hostcomp[hostcomp.count-2])
let item = MediaItem(name: name, path: name, root: site, type: ItemType.VIDEO)
let mitem = MediaItem(name: name, path: name, root: site, type: ItemType.VIDEO)
if url.starts(with: "/") {
item.externalURL = host + url
mitem.externalURL = host + url
}
else {
item.externalURL = url
mitem.externalURL = url
}
if hostcomp.count > 2 {
let hostEnd = String(hostcomp[1] + "." + hostcomp[2])
item.cookies = await getCookieHeader(for: hostEnd)
}
mitem.cookies = cookieString
if ((url2.pathExtension == "mp4" || url2.pathExtension == "m3u8") && dl) {
NetworkManager.sharedInstance.downloadToServer(path: site, url: URL(string: item.externalURL!)!, cookies: item.cookies, result: {
NetworkManager.sharedInstance.downloadToServer(path: site, url: URL(string: mitem.externalURL!)!, cookies: mitem.cookies, result: {
(r) in
print(r)
// self.showAlert(title: "download ready", message: r)
@ -219,24 +214,29 @@ struct KBrowserView: View {
})
}
else {
showVideo(selectedItem: item)
showVideo(selectedItem: mitem)
}
}
func getCookieHeader(for domain: String? = nil) async -> String {
func getCookieHeader() {
var domain = item
if let dotRange = domain.range(of: ".") {
domain.removeSubrange(domain.startIndex..<dotRange.lowerBound)
}
let httpCookieStore = viewModel.httpCookieStore!
var cookieDict = [HTTPCookie]()
let cookies = await httpCookieStore.allCookies()
for cookie in cookies {
if let domain = domain {
let cookies = httpCookieStore.getAllCookies { cookies in
for cookie in cookies {
if cookie.domain.contains(domain) {
cookieDict.append(cookie)
}
}
}
let values = HTTPCookie.requestHeaderFields(with: cookieDict)
let values = HTTPCookie.requestHeaderFields(with: cookieDict)
return values["Cookie"]!
cookieString = values["Cookie"]!
}
}
func showVideo(selectedItem: MediaItem) {

Loading…
Cancel
Save