diff --git a/kplayer/core/MediaItem.swift b/kplayer/core/MediaItem.swift index 7f074d1..cd8cc16 100644 --- a/kplayer/core/MediaItem.swift +++ b/kplayer/core/MediaItem.swift @@ -43,6 +43,7 @@ class MediaItem: CustomDebugStringConvertible { var thumbUrl: String? var local = false + var leaf = false convenience init(model: MediaModel) { self.init(name: model.name, path: model.path, root: model.root, type: model.type) @@ -212,24 +213,19 @@ class MediaItem: CustomDebugStringConvertible { } func isWeb() -> Bool { - return superRoot().type == ItemType.WEBROOT + return type == ItemType.WEB } func isPic() -> Bool { - return superRoot().type == ItemType.PICROOT && type == ItemType.PICS + return type == ItemType.PICS || type == ItemType.DETAILS } func isVideo() -> Bool { - return (superRoot().type == ItemType.VIDEOROOT || (superRoot().type == ItemType.VIDEO) || local) && (type == ItemType.VIDEO || type == ItemType.SNAPSHOT) + return type == ItemType.VIDEO || type == ItemType.SNAPSHOT } func isDetails() -> Bool { - if !children.isEmpty { - if (children[0].type == ItemType.VIDEO) { - return true; - } - } - return type == ItemType.DETAILS + return isWeb() || isPic() || isVideo() } func isFolder() -> Bool { diff --git a/kplayer/core/NetworkManager.swift b/kplayer/core/NetworkManager.swift index fe0cab7..05a751e 100644 --- a/kplayer/core/NetworkManager.swift +++ b/kplayer/core/NetworkManager.swift @@ -5,7 +5,6 @@ import Foundation import Alamofire -//import Cent class NetworkManager { static let sharedInstance = NetworkManager() @@ -225,7 +224,7 @@ class NetworkManager { let len = root.count let url = (root as NSString).replacingOccurrences(of: " ", with: "+") - let ux = baseurl + "/service/listdirs" + url + let ux = nodeurl + "listdirs" + url print(ux) AF.request(ux).responseJSON { (response) in @@ -235,40 +234,28 @@ class NetworkManager { var leaf = false var hasPics = false - let result = json as! [String] + let result = json as! [[String]] print("Empfange \(result.count) Ergebnisse") for s in result { + var name = s[0] + var type = s[1] - if s == "!!LEAF!!" { - leaf = true - } else { - let st = s.substringStartingFrom(len) - -// print(st) - - if (st.endsWith("/")) { - let i = MediaItem(name: st, path: st, root: root, type: ItemType.FOLDER) - res.append(i) - } else { - if s.lowercased().hasSuffix(".jpg") { - if !hasPics { - hasPics = true - - let name = (root as NSString).lastPathComponent - let namelen = name.count - let rootstart = root.substringRight(namelen) - let i = MediaItem(name: name, path: "", root: rootstart, type: ItemType.DETAILS) - res.append(i) - } - } else { - let i = MediaItem(name: st, path: "", root: root, type: ItemType.FOLDER) - res.append(i) - } - } + var t = ItemType.FOLDER + if (type == "video") { + t = ItemType.VIDEO + } + if (type == "pictures") { + t = ItemType.DETAILS } + if (type == "web") { + t = ItemType.WEB + } + + let i = MediaItem(name: name, path: name, root: root, type: t) + res.append(i) } completionHandler(res, leaf) } @@ -280,7 +267,7 @@ class NetworkManager { return } - if (item.type != ItemType.FOLDER && item.type != ItemType.DETAILS) { + if (item.type != ItemType.VIDEO && item.type != ItemType.DETAILS) { return } diff --git a/kplayer/core/ThumbnailCache.swift b/kplayer/core/ThumbnailCache.swift index c7d5b3a..a643691 100644 --- a/kplayer/core/ThumbnailCache.swift +++ b/kplayer/core/ThumbnailCache.swift @@ -71,23 +71,25 @@ class ThumbnailCache { } for bild in start ..< end { - let sizeHi = (Int(bytes[index]) << 24) + (Int(bytes[index+1]) << 16) - let size = (Int(bytes[index+2]) << 8) + Int(bytes[index+3]) + sizeHi - index += 4 - - if size > 0 && (d.count >= index + size){ - // var buf = //UnsafeMutablePointer(&bytes[index]) - let part = d.subdata(in: index ..< (index + size)) - if let img = UIImage(data: part) { - let imageRef = img.cgImage; - self.total += d.count - - let i = self.items[bild] + if (bytes.count > index + 3) { + let sizeHi = (Int(bytes[index]) << 24) + (Int(bytes[index + 1]) << 16) + let size = (Int(bytes[index + 2]) << 8) + Int(bytes[index + 3]) + sizeHi + index += 4 + + if size > 0 && (d.count >= index + size) { + // var buf = //UnsafeMutablePointer(&bytes[index]) + let part = d.subdata(in: index..<(index + size)) + if let img = UIImage(data: part) { + let imageRef = img.cgImage; + self.total += d.count + + let i = self.items[bild] // print("\(time) preload combi image loaded \(i.name) cost \(cost) total\(self.total)") - self.imageCache.setObject(img, forKey: i.thumbUrlAbsolute as AnyObject, cost: size) + self.imageCache.setObject(img, forKey: i.thumbUrlAbsolute as AnyObject, cost: size) + } } + index += size } - index += size } } diff --git a/kplayer/detail/DetailViewController.swift b/kplayer/detail/DetailViewController.swift index 8800fc8..5748bc9 100644 --- a/kplayer/detail/DetailViewController.swift +++ b/kplayer/detail/DetailViewController.swift @@ -298,7 +298,7 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout self.showVideo(selectedItem: selectedItem) } else if sectionItem.isPic() { self.showPhotos(sectionItem.children) - } else { + } else if sectionItem.isWeb() { self.showWeb(sectionItem.children) } } diff --git a/kplayer/master/MasterViewController.swift b/kplayer/master/MasterViewController.swift index 16d7962..282e490 100644 --- a/kplayer/master/MasterViewController.swift +++ b/kplayer/master/MasterViewController.swift @@ -131,10 +131,10 @@ class MasterViewController: UITableViewController, UISearchResultsUpdating { delegate!.loadFolder(selectedItem: selectedItem) { (neu) in - if neu.isDetails() || neu.isVideo() { - self.gotoDetails(neu) - } else { + if neu.isFolder() { self.gotoNextFolder(neu) + } else { + self.gotoDetails(neu) } } diff --git a/kplayer/master/NetworkDelegate.swift b/kplayer/master/NetworkDelegate.swift index 8321263..4937cee 100644 --- a/kplayer/master/NetworkDelegate.swift +++ b/kplayer/master/NetworkDelegate.swift @@ -24,15 +24,15 @@ class NetworkDelegate: MasterDelegate, DetailDelegate { if p.type == ItemType.FAVROOT { NetworkManager.sharedInstance.loadFavDirs(dir, completionHandler: weiter) } - else if p.type == ItemType.VIDEOROOT { + else if selectedItem.isVideo() { NetworkManager.sharedInstance.loadVideoDirs(dir, completionHandler: weiter) } + else if selectedItem.isDetails() { + NetworkManager.sharedInstance.loadPicDirs(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 { @@ -55,43 +55,47 @@ class NetworkDelegate: MasterDelegate, DetailDelegate { 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 { + selectedItem.children = i + selectedItem.sort() +// +// 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 { +// item.leaf = leaf +// 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 @@ -100,15 +104,15 @@ class NetworkDelegate: MasterDelegate, DetailDelegate { // return // }) // } - - if selectedItem.type == ItemType.FOLDER { - selectedItem.type = ItemType.DETAILS - } - +// +// if selectedItem.type == ItemType.FOLDER { +// selectedItem.type = ItemType.DETAILS +// } +// completionHandler(selectedItem) - } else { - completionHandler(neu) - } +// } else { +// completionHandler(neu) +// } }) }