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
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)
|
|
}
|
|
}
|