Swift Media Player
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

153 lines
4.5 KiB

//
// Created by Marco Schmickler on 29.04.21.
// Copyright (c) 2021 Marco Schmickler. All rights reserved.
//
import Foundation
class NetworkDelegate: MasterDelegate, DetailDelegate {
func loadItemDetails(selectedItem: MediaItem, completionHandler: @escaping (MediaItem) -> Void) {
if selectedItem.loaded {
completionHandler(selectedItem)
return
}
let dir = selectedItem.encodedDir!
let weiter:Weiter = {
(g) in
ItemModel().sortItems(selectedItem: selectedItem, children: g)
completionHandler(selectedItem)
}
if selectedItem.type == ItemType.VIDEOFOLDER {
NetworkManager.sharedInstance.loadVideoDirs(dir, completionHandler: weiter)
}
else if selectedItem.type == ItemType.PICFOLDER {
NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter)
}
else {
completionHandler(selectedItem)
}
}
func loadFolder(selectedItem: MediaItem, completionHandler: @escaping (MediaItem) -> Void) -> Void {
let weiter:Weiter = {
(g) in
ItemModel().sortItems(selectedItem: selectedItem, children: g)
completionHandler(selectedItem)
}
if selectedItem.type == ItemType.FOLDER && selectedItem.loaded {
completionHandler(selectedItem)
return
}
if selectedItem.type == ItemType.FAVROOT {
let url = URL(string: selectedItem.externalURL!)
LocalManager.sharedInstance.loadFavDirs(url!, completionHandler: weiter)
return
}
if selectedItem.type == ItemType.TAGROOT {
DatabaseManager.sharedInstance.loadTags(path: selectedItem.path, completionHandler: {
c in
selectedItem.children = c
completionHandler(selectedItem)
})
return
}
if (NetworkManager.sharedInstance.offline) {
completionHandler(selectedItem)
}
else {
NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!, completionHandler: {
(i, leaf) in
selectedItem.children = i
selectedItem.sort()
completionHandler(selectedItem)
})
}
}
func loadDetails(selectedItem: MediaItem, completionHandler: @escaping () -> ()) {
if selectedItem.isPic() && !selectedItem.local {
NetworkManager.sharedInstance.loadPicDetails(items: selectedItem, result: { (im: [MediaItem]) in
selectedItem.children = im
completionHandler()
})
}
else {
completionHandler()
}
}
func deleteThumb(selectedItem c: MediaItem) {
if c.local {
if let url = c.parent?.localURL {
do {
try FileManager.default.removeItem(atPath: c.thumbUrl!)
} catch {
print(c.thumbUrl)
}
LocalManager.sharedInstance.saveFavDir(url: url, item: c.parent!)
}
}
else {
let t = c.time
let ms = Int(t * 1000)
let p = c.snapshotDirPathForVideo + "\(ms).jpg"
let pt = c.snapshotDirPathForVideo + "\(ms)_thumb.jpg"
NetworkManager.sharedInstance.deleteThumb(p)
NetworkManager.sharedInstance.deleteThumb(pt)
}
}
func saveItem(selectedItem: MediaItem) {
var item = selectedItem
var isLocal = selectedItem.local
if (!isLocal) {
if let p = selectedItem.parent {
isLocal = p.local
}
}
if (isLocal) {
if item.type == ItemType.SNAPSHOT {
item = selectedItem.parent!
}
if let name = item.externalURL {
LocalManager.sharedInstance.saveFavDir(url: URL(string: name)!, item: item)
}
else {
DatabaseManager.sharedInstance.saveItemMetaData(item)
}
}
else {
NetworkManager.sharedInstance.saveItem(selectedItem)
}
}
func deleteLocal(selectedItem: MediaItem) {
LocalManager.sharedInstance.deleteLocal(selectedItem: selectedItem)
}
func settings() -> KSettings {
LocalManager.sharedInstance.settings
}
func offline() -> Bool {
NetworkManager.sharedInstance.offline
}
}