From 13b7e8f4000e4c1e990da224222da2c92c78e1e8 Mon Sep 17 00:00:00 2001 From: marcoschmickler Date: Mon, 1 Nov 2021 08:32:37 +0100 Subject: [PATCH] Downloads --- download.js | 8 +++-- kplayer.xcodeproj/project.pbxproj | 8 ++--- kplayer/AppDelegate.swift | 2 ++ kplayer/core/KSettings.swift | 22 +++++++++++++- kplayer/core/KSettingsModel.swift | 11 +++++++ kplayer/core/MediaItem.swift | 1 - kplayer/core/NetworkManager.swift | 37 +++++++++++++++++++++-- kplayer/detail/BrowserController.swift | 34 +++++++++++++++++++-- kplayer/detail/DetailViewController.swift | 11 ++++++- kplayer/detail/VideoController.swift | 15 +++++++-- kplayer/master/KSettingsView.swift | 17 ++++++++--- kplayer/server/kplayer.js | 4 +++ kplayer/video/BMPlayer.swift | 7 +++-- 13 files changed, 155 insertions(+), 22 deletions(-) create mode 100644 kplayer/core/KSettingsModel.swift diff --git a/download.js b/download.js index cb0280c..d700b40 100644 --- a/download.js +++ b/download.js @@ -7,7 +7,11 @@ var linkname = "href" window.kplayerUrls = [] - if (window.location.hostname.endsWith("hegre.com")) { + if (window.location.hostname.endsWith("doorway.com")) { + links = document.querySelectorAll('a[title="Right click the link below and select save as to download:"]') + linkname = "href" + } + else if (window.location.hostname.endsWith("hegre.com")) { links = document.querySelectorAll('a[class="members-only"], a[class="image-download"]') linkname = "href" } @@ -78,7 +82,7 @@ ); window.webkit.messageHandlers.openDocument.postMessage(JSON.stringify(window.kplayerUrls)); - // window.webkit.messageHandlers.jsError.postMessage("k"+links); + // window.webkit.messageHandlers.jsError.postMessage("k"+links); // we use a second try block here to have more detailed error information // because of the nature of JS the outer try-catch doesn't know anything where the error happended let res; diff --git a/kplayer.xcodeproj/project.pbxproj b/kplayer.xcodeproj/project.pbxproj index 92423be..22c1ef3 100644 --- a/kplayer.xcodeproj/project.pbxproj +++ b/kplayer.xcodeproj/project.pbxproj @@ -20,7 +20,7 @@ 1C736503B656C999E5E12081 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7365B06FA66294E99AC2D3 /* NetworkManager.swift */; }; 1C73654C9EA6D255CFC039C5 /* NetworkHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C73620D01687FB4F1811C5C /* NetworkHelper.swift */; }; 1C7365885FAF292F2221ED44 /* PhotoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C73673DC671535E3A049F54 /* PhotoController.swift */; }; - 1C736662E43C6E8FFED11AC4 /* download.js in Sources */ = {isa = PBXBuildFile; fileRef = 1C736C1368E0DE89BAA2DF60 /* download.js */; }; + 1C73666A07CF2416B1B8D3F0 /* KSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736C94157754DE1C808173 /* KSettingsModel.swift */; }; 1C7366A0CFD2B55BF8C3BAF0 /* NetworkDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7364F10BED5DA0F1C0423C /* NetworkDelegate.swift */; }; 1C7366DAC06047DE335EFC37 /* BMPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736927EA28AFBEB25D7487 /* BMPlayer.swift */; }; 1C73671FC2CCCACAA2FFC153 /* ThumbnailCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736EA15A11AF7D57F85824 /* ThumbnailCache.swift */; }; @@ -108,8 +108,8 @@ 1C736B41C6AC33F3FA592C63 /* MediaModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaModel.swift; sourceTree = ""; }; 1C736B794396F2E50387B8F2 /* stringutil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = stringutil.swift; sourceTree = ""; }; 1C736BC4450890C45F8FBC63 /* LayoutTools.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LayoutTools.swift; sourceTree = ""; }; - 1C736C1368E0DE89BAA2DF60 /* download.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = download.js; sourceTree = ""; }; 1C736C7FFBDAC665AE04CB65 /* VideoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoController.swift; sourceTree = ""; }; + 1C736C94157754DE1C808173 /* KSettingsModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KSettingsModel.swift; sourceTree = ""; }; 1C736D9BB5498E7E8F11C754 /* HeaderCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderCell.swift; sourceTree = ""; }; 1C736DBB6986A8B62963FBB3 /* HtmlParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HtmlParser.swift; sourceTree = ""; }; 1C736DCCE3AA9993E15F7652 /* UIImageExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageExtension.swift; sourceTree = ""; }; @@ -168,7 +168,6 @@ isa = PBXGroup; children = ( 1C73625012D50E457D18A785 /* kplayer.js */, - 1C736C1368E0DE89BAA2DF60 /* download.js */, 1C73615FFA2AA98BD1C56CD4 /* links.html */, ); path = server; @@ -222,6 +221,7 @@ 1C73631C96E6C860833052CA /* ItemType.swift */, 1C736DBB6986A8B62963FBB3 /* HtmlParser.swift */, 1C736AE5021E3D985FE3402D /* KSettings.swift */, + 1C736C94157754DE1C808173 /* KSettingsModel.swift */, ); path = core; sourceTree = ""; @@ -533,9 +533,9 @@ 1C736A06A2AD75B8C14EEBBE /* HtmlParser.swift in Sources */, 1C736048BFA120F5C7D36874 /* readme.md in Sources */, 1C736771C503FB0D52AEB8F7 /* kplayer.js in Sources */, - 1C736662E43C6E8FFED11AC4 /* download.js in Sources */, 1C7361B3AF46CEB30D3F4FA0 /* KSettings.swift in Sources */, 1C73600CB93F16F4F28C116F /* KSettingsView.swift in Sources */, + 1C73666A07CF2416B1B8D3F0 /* KSettingsModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/kplayer/AppDelegate.swift b/kplayer/AppDelegate.swift index 9fcd472..dc98bad 100644 --- a/kplayer/AppDelegate.swift +++ b/kplayer/AppDelegate.swift @@ -26,6 +26,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele let controller = masterNavigationController.topViewController as! MasterViewController controller.delegate = NetworkDelegate() + NetworkManager.sharedInstance.loadSettings() + let url = URL(string: NetworkManager.sharedInstance.vidurl)?.appendingPathComponent("ren").appendingPathComponent("kplayer.txt") var roots = [MediaItem]() diff --git a/kplayer/core/KSettings.swift b/kplayer/core/KSettings.swift index 1b9c10a..2f32d9d 100644 --- a/kplayer/core/KSettings.swift +++ b/kplayer/core/KSettings.swift @@ -7,5 +7,25 @@ import Foundation class KSettings: ObservableObject { @Published - var scale = 0.5 + var scale = Float(0.5) + + @Published + var autoloop = false + + convenience init(model: KSettingsModel) { + self.init() + scale = model.scale + autoloop = model.autoloop + } + + func toModel() -> KSettingsModel { + KSettingsModel(scale: scale, autoloop: autoloop) + } + + func toJSON() -> String { + let jsonEncoder = JSONEncoder() + let jsonData = try! jsonEncoder.encode(toModel()) + let json = String(data: jsonData, encoding: String.Encoding.utf8) + return json! + } } diff --git a/kplayer/core/KSettingsModel.swift b/kplayer/core/KSettingsModel.swift new file mode 100644 index 0000000..bacbe86 --- /dev/null +++ b/kplayer/core/KSettingsModel.swift @@ -0,0 +1,11 @@ +// +// Created by Marco Schmickler on 28.10.21. +// Copyright (c) 2021 Marco Schmickler. All rights reserved. +// + +import Foundation + +struct KSettingsModel: Codable { + var scale = Float(0.5) + var autoloop = false +} diff --git a/kplayer/core/MediaItem.swift b/kplayer/core/MediaItem.swift index e8e8db0..1edcdd3 100644 --- a/kplayer/core/MediaItem.swift +++ b/kplayer/core/MediaItem.swift @@ -108,7 +108,6 @@ class MediaItem: CustomDebugStringConvertible { children = [MediaItem]() sortName = computeSortName(name) - length = 5.0 } diff --git a/kplayer/core/NetworkManager.swift b/kplayer/core/NetworkManager.swift index f8e8ada..c0c8f5c 100644 --- a/kplayer/core/NetworkManager.swift +++ b/kplayer/core/NetworkManager.swift @@ -13,7 +13,7 @@ class NetworkManager { let baseurl = "http://linkstation:8080/tomcat/media" let vidurl = "http://linkstation:8089" - let settings = KSettings() + var settings = KSettings() var authenticated = false var offline = false @@ -53,6 +53,29 @@ class NetworkManager { } } + func loadSettings() { + do { + let jsonData = try FileHelper.getData(name: "settings.json") + let model = try JSONDecoder().decode(KSettingsModel.self, from: jsonData) + settings = KSettings(model: model) + } catch { + print(error.localizedDescription) + } + } + + func saveSettings() { + let json = settings.toJSON() + let url = FileHelper.getDocumentsDirectory().appendingPathComponent("settings.json") + do { + print (url) + try json.write(to: url, atomically: true, encoding: .utf8) + let input = try String(contentsOf: url) + print(input) + } catch { + print(json) + } + } + func loadFavDirs(_ rootParam: String, completionHandler: @escaping Weiter) -> Void { var res = [MediaItem]() @@ -472,6 +495,14 @@ class NetworkManager { } } + func dlserverlen(result: @escaping (String) -> ()) { + let p = self.nodeurl + "wgetcount" + print("wgetcount") + AF.request(p).responseString { response in + result(response.value!) + } + } + func favItem(_ item: MediaItem) { let url = baseurl + "/service/linkfav" + item.fullPath @@ -583,7 +614,7 @@ class NetworkManager { } } - func downloadToServer(path: String, url: URL) { + func downloadToServer(path: String, url: URL, result: @escaping (String) -> ()) { let name = path + "/" + url.lastPathComponent let queryItems = [URLQueryItem(name: "url", value: url.absoluteString), URLQueryItem(name: "name", value: name)] @@ -600,7 +631,7 @@ class NetworkManager { let p = urlComps.url! print("ffmpeg \(url.lastPathComponent)") AF.request(p).responseString { response in - print(response) + result(response.value!) } } diff --git a/kplayer/detail/BrowserController.swift b/kplayer/detail/BrowserController.swift index 93eb89d..f2aeacb 100644 --- a/kplayer/detail/BrowserController.swift +++ b/kplayer/detail/BrowserController.swift @@ -16,6 +16,8 @@ class BrowserController : UIViewController, ItemController, WebBrowserDelegate, var web : WebBrowserViewController? + var dl = false + func setItems(items: [MediaItem]) { } @@ -86,11 +88,13 @@ class BrowserController : UIViewController, ItemController, WebBrowserDelegate, //self.navigationController?.popViewController(animated: true) } let backButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(BrowserController.back(_:))) - webBrowserViewController.navigationItem.leftBarButtonItems = [backButton] + let closeButton = UIBarButtonItem(barButtonSystemItem: .close, target: self, action: #selector(BrowserController.close(_:))) + webBrowserViewController.navigationItem.leftBarButtonItems = [backButton, closeButton] let reviewButton = UIBarButtonItem(title:"download", style:UIBarButtonItem.Style.plain, target: self, action: #selector(BrowserController.doDownload(_:))) + let dlButton = UIBarButtonItem(title:"server", style:UIBarButtonItem.Style.plain, target: self, action: #selector(BrowserController.doServerDownload(_:))) - webBrowserViewController.navigationItem.rightBarButtonItems = [reviewButton] + webBrowserViewController.navigationItem.rightBarButtonItems = [dlButton, reviewButton] navigationController?.delegate = self navigationController?.pushViewController(webBrowserViewController, animated: true) @@ -98,9 +102,19 @@ class BrowserController : UIViewController, ItemController, WebBrowserDelegate, } @objc public func doDownload(_ sender: AnyObject) { + dl=false + executeDocumentDownloadScript(webView: web!.getWKWebView(), forAbsoluteUrl: "hello") + } + + @objc public func doServerDownload(_ sender: AnyObject) { + dl=true executeDocumentDownloadScript(webView: web!.getWKWebView(), forAbsoluteUrl: "hello") } + @IBAction func close(_ sender: AnyObject) { + completionHandler!() + } + @IBAction func back(_ sender: AnyObject) { if (web!.getWKWebView().canGoBack) { web!.getWKWebView().goBack() @@ -135,6 +149,10 @@ class BrowserController : UIViewController, ItemController, WebBrowserDelegate, let alertController = UIAlertController(title: "Download", message: "Videos found", preferredStyle: .alert) + NetworkManager.sharedInstance.dlserverlen { c in + alertController.title = "On Server: \(c)"; + } + for s in strings { var name = s if let u = URL(string: s) { @@ -178,6 +196,18 @@ class BrowserController : UIViewController, ItemController, WebBrowserDelegate, return } + if (url2.pathExtension == "mp4" && dl) { + NetworkManager.sharedInstance.downloadToServer(path: self.currentItem!.root, url: url2, result: { + (r) in + print(r) + self.showAlert(title: "download ready", message: r) + if (r == "exists") { + + } + }) + return + } + let name = url2.lastPathComponent let vc = VideoController() diff --git a/kplayer/detail/DetailViewController.swift b/kplayer/detail/DetailViewController.swift index fcc5d61..545a863 100644 --- a/kplayer/detail/DetailViewController.swift +++ b/kplayer/detail/DetailViewController.swift @@ -241,7 +241,9 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout if i.type == ItemType.VIDEO { let set = IndexSet(integer: index) if index < detail.children.count { - collectionView.reloadSections(set) + if (collectionView != nil) { + collectionView.reloadSections(set) + } } } else { if i.parent! !== detail { @@ -442,6 +444,13 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout } func showWeb(selectedItem: MediaItem) { + if selectedItem.name.contains("strip") { + + let chromeURL = selectedItem.name.replacingOccurrences(of: "https://", with: "googlechrome://") + UIApplication.shared.openURL(URL(string: chromeURL)!) + + return + } let pc = BrowserController() pc.setCurrentItem(item: selectedItem) diff --git a/kplayer/detail/VideoController.swift b/kplayer/detail/VideoController.swift index f62ff80..eae248b 100644 --- a/kplayer/detail/VideoController.swift +++ b/kplayer/detail/VideoController.swift @@ -142,6 +142,10 @@ class VideoController: UIViewController, ItemController, BMPlayerDelegate { let inProgress = NetworkManager.sharedInstance.currentDownloads.count let alertController = UIAlertController(title: "In Progress: \(inProgress)", message: "Download", preferredStyle: .alert) + NetworkManager.sharedInstance.dlserverlen { c in + alertController.title = "On Server: \(c)"; + } + if let c = currentSnapshot { if (c.loop) { let oneAction = UIAlertAction(title: "One", style: .default) { (action) in @@ -173,7 +177,14 @@ class VideoController: UIViewController, ItemController, BMPlayerDelegate { let serverAction = UIAlertAction(title: "Download to server", style: .default) { (action) in let url = self.currentItem!.playerURL - NetworkManager.sharedInstance.downloadToServer(path: self.currentItem!.root, url: url!) + NetworkManager.sharedInstance.downloadToServer(path: self.currentItem!.root, url: url!, result: { + (r) in + print(r) + self.showAlert(title: "download ready", message: r) + if (r == "exists") { + + } + }) } alertController.addAction(serverAction) @@ -414,7 +425,7 @@ print("finish") if currentItem!.type == ItemType.SNAPSHOT { player.seek(currentItem!.time!) - if currentItem!.loop { + if NetworkManager.sharedInstance.settings.autoloop && currentItem!.loop { loopStart = currentItem!.time! loopEnd = currentItem!.time! + currentItem!.length! loopOption = 1 diff --git a/kplayer/master/KSettingsView.swift b/kplayer/master/KSettingsView.swift index d244265..745e96d 100644 --- a/kplayer/master/KSettingsView.swift +++ b/kplayer/master/KSettingsView.swift @@ -12,23 +12,32 @@ struct KSettingsView: View { var completionHandler: (() -> Void)? - @State - var scale = 0.5 - var body: some View { Form { Section(header: Text("K Settings")) { HStack { Text("Size") - Slider(value: $scale, in: 0...1) + Slider(value: $kSettings.scale, in: 0...1) + Toggle(isOn: $kSettings.autoloop, label: { + Text("Autoloop") + }) } } Button(action: { + NetworkManager.sharedInstance.saveSettings() self.completionHandler?() }, label: { Text("ok") + }); + Button(action: { + NetworkManager.sharedInstance.loadSettings() + self.completionHandler?() + }, label: { + Text("cancel") }) } + .onAppear { + } } } diff --git a/kplayer/server/kplayer.js b/kplayer/server/kplayer.js index e0bca03..07e6a1e 100644 --- a/kplayer/server/kplayer.js +++ b/kplayer/server/kplayer.js @@ -1,3 +1,7 @@ +// /srv/samba/daten/node + +// pm2 list + var express = require('express'); var fs = require("fs"); var path = require("path"); diff --git a/kplayer/video/BMPlayer.swift b/kplayer/video/BMPlayer.swift index 37741d5..f602b11 100644 --- a/kplayer/video/BMPlayer.swift +++ b/kplayer/video/BMPlayer.swift @@ -190,8 +190,11 @@ open class BMPlayer: UIView { let size = asset.avURLAsset.videoSize() if (size.height < 1500) { - zoom = 0.75 - xpos = -100 + zoom = NetworkManager.sharedInstance.settings.scale + if (zoom < 1.0) { + xpos = -100 + } + transformLayer() }