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