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.
 
 
 

142 lines
4.8 KiB

//
// Created by Marco Schmickler on 29.04.21.
// Copyright (c) 2021 Marco Schmickler. All rights reserved.
//
import Foundation
class NetworkDelegate: MasterDelegate, DetailDelegate {
func loadItem(selectedItem: MediaItem, completionHandler: @escaping (MediaItem) -> Void) {
if selectedItem.loaded {
completionHandler(selectedItem)
return
}
let p = selectedItem.superRoot()
let dir = selectedItem.encodedDir!
let weiter:Weiter = {
(g) in
ItemModel().sortItems(selectedItem: selectedItem, children: g)
completionHandler(selectedItem)
}
if p.type == ItemType.FAVROOT {
NetworkManager.sharedInstance.loadFavDirs(dir, completionHandler: weiter)
}
else if p.type == ItemType.VIDEOROOT {
NetworkManager.sharedInstance.loadVideoDirs(dir, completionHandler: weiter)
}
else if p.type == ItemType.WEBROOT {
weiter(p.children)
}
else {
NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter)
}
}
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 {
NetworkManager.sharedInstance.loadFavDirs("dir", completionHandler: weiter)
return
}
NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!, completionHandler: {
(i, leaf) in
let details = MediaItem(name: selectedItem.name, path: selectedItem.path, root: selectedItem.root, type: ItemType.DETAILS)
let neu = MediaItem(name: selectedItem.name, path: "", root: "", type: ItemType.FOLDER)
let newFolder = MediaItem(name: ".", path: "", root: selectedItem.root, type: ItemType.DETAILS)
newFolder.loaded = true
var hasDetails = false
for item in i {
if item.type != ItemType.FOLDER && item.isVideo() {
item.parent = newFolder
newFolder.children.append(item)
} else {
if item.path == "" {
item.path = item.name
item.name = ""
}
if item.type == ItemType.PICS {
if !hasDetails {
neu.children.append(details)
hasDetails = true
}
} else {
// item.type = ItemType.FOLDER
item.parent = selectedItem
neu.children.append(item)
}
}
}
if newFolder.children.count > 0 {
newFolder.parent = selectedItem
neu.children.append(newFolder)
}
let isVideo = selectedItem.parent != nil && selectedItem.parent!.type == ItemType.VIDEOROOT
if leaf || isVideo {
// if selectedItem.type == ItemType.VIDEOROOT {
// NetworkManager.sharedInstance.loadVideoDirs(selectedItem.encodedDir!, completionHandler: {
// (i) in
// selectedItem.children = i
// completionHandler(selectedItem)
// return
// })
// }
if selectedItem.type == ItemType.FOLDER {
selectedItem.type = ItemType.DETAILS
}
completionHandler(selectedItem)
} else {
completionHandler(neu)
}
})
}
func loadDetails(selectedItem: MediaItem, completionHandler: @escaping () -> ()) {
if selectedItem.isPic() {
NetworkManager.sharedInstance.loadPicDetails(items: selectedItem, result: { (im: [MediaItem]) in
selectedItem.children = im
completionHandler()
})
}
else {
completionHandler()
}
}
func deleteThumb(selectedItem c: MediaItem) {
if 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) {
NetworkManager.sharedInstance.saveItem(selectedItem)
}
}