From 1e00b3c5547873d866bf10010a3b561439aa9345 Mon Sep 17 00:00:00 2001 From: Marco Schmickler Date: Wed, 16 Dec 2015 20:39:26 +0100 Subject: [PATCH] =?UTF-8?q?aufr=C3=A4umen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kplayer/AppDelegate.swift | 2 +- kplayer/core/ItemModel.swift | 8 +- kplayer/core/MediaItem.swift | 17 ++ kplayer/core/NetworkManager.swift | 78 ++++---- kplayer/master/MasterViewController.swift | 221 ++++++++++------------ 5 files changed, 161 insertions(+), 165 deletions(-) diff --git a/kplayer/AppDelegate.swift b/kplayer/AppDelegate.swift index 4d64cab..fe48985 100644 --- a/kplayer/AppDelegate.swift +++ b/kplayer/AppDelegate.swift @@ -25,7 +25,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController let controller = masterNavigationController.topViewController as! MasterViewController - controller.items = [ + controller.model.items = [ MediaItem(name: "fav", path:"", root: "/srv/samba/ren/fav", type: ItemType.VIDEOROOT), MediaItem(name: "knk", path:"", root: "/srv/samba/ren/knk", type: ItemType.VIDEOROOT), MediaItem(name: "knk_archiv", path:"", root: "/srv/samba/ren/knk_archiv", type: ItemType.VIDEOROOT), diff --git a/kplayer/core/ItemModel.swift b/kplayer/core/ItemModel.swift index 2e8ae3a..69aa86e 100644 --- a/kplayer/core/ItemModel.swift +++ b/kplayer/core/ItemModel.swift @@ -10,8 +10,7 @@ class ItemModel { var itemsMap = Dictionary() func addItem(item: MediaItem) { - let path = item.root + "/" + item.path - print(path) + let path = item.encodedDir! var folder = itemsMap[path] if folder == nil { @@ -25,4 +24,9 @@ class ItemModel { item.parent = folder } + func removeAll() { + items.removeAll() + itemsMap.removeAll() + } + } diff --git a/kplayer/core/MediaItem.swift b/kplayer/core/MediaItem.swift index 449b5c8..28495f8 100644 --- a/kplayer/core/MediaItem.swift +++ b/kplayer/core/MediaItem.swift @@ -177,4 +177,21 @@ class MediaItem: CustomDebugStringConvertible { return self } + func sort() { + children.sortInPlace({ + $0.sortName < $1.sortName + }) + } + + func isPic() -> Bool { + return superRoot().type == ItemType.ROOT + } + + func isVideo() -> Bool { + return superRoot().type == ItemType.VIDEOROOT + } + + func isFolder() -> Bool { + return type == ItemType.ROOT || type == ItemType.VIDEOROOT || type == ItemType.FOLDER + } } diff --git a/kplayer/core/NetworkManager.swift b/kplayer/core/NetworkManager.swift index de2636f..58880c2 100644 --- a/kplayer/core/NetworkManager.swift +++ b/kplayer/core/NetworkManager.swift @@ -32,19 +32,20 @@ class NetworkManager { Alamofire.request(.GET, url).responseJSON { (_, _, response) in - if let json = response.value { - - for s in json as! [String] { - print(s) + if let json = response.value as? [String] { + print("Empfange \(json.count) Ergebnisse") + + for s in json { +// print(s) if s.hasSuffix(".mp4") || s.hasSuffix(".m4v") { let l = s.length let name = NSURL(fileURLWithPath: s).lastPathComponent! var pathlen = l - len - name.length // if (pathlen > 1000) { - print(pathlen) - print(name) - print(s) +// print(pathlen) +// print(name) +// print(s) // } if (pathlen < 2) { pathlen = 2 @@ -75,18 +76,20 @@ class NetworkManager { if let json = response.value { var items = Dictionary() - for s in json as! [String] { - print(s) + let result = json as! [String] + print("Empfange \(result.count) Ergebnisse") + + for s in result { +// print(s) if s.lowercaseString.hasSuffix(".jpg") { let l = s.length let name = (s as NSString).lastPathComponent var pathlen = l - len - name.length -// if (pathlen > 1000) { - print(pathlen) - print(name) - print(s) -// } +// print(pathlen) +// print(name) +// print(s) + if (pathlen < 2) { pathlen = 2 } @@ -97,7 +100,7 @@ class NetworkManager { let fl = path.length let pfl = fl - folderName.length - print("\(folderName) \(pfl)") +// print("\(folderName) \(pfl)") let fpath = (path as NSString).substringWithRange(NSMakeRange(0, pfl)) let i = MediaItem(name: folderName, path: fpath, root: root, type: ItemType.PICS) @@ -132,52 +135,39 @@ class NetworkManager { if let json = response.value { var res = [MediaItem]() var leaf = false + var hasPics = false + + let result = json as! [String] + + print("Empfange \(result.count) Ergebnisse") - for s in json as! [String] { + for s in result { if s == "!!LEAF!!" { leaf = true } else { - - // let (a,b) = j # - let index1 = s.startIndex.advancedBy(len) let st = s.substringFromIndex(index1) - print(st) +// print(st) if (st.endsWith("/")) { let i = MediaItem(name: st, path: st, root: root, type: ItemType.FOLDER) res.append(i) } else { if s.lowercaseString.hasSuffix(".jpg") { - let l = s.length - let name = (s as NSString).lastPathComponent - let pathlen = l - len - name.length - -// if (pathlen > 1000) { - print(pathlen) - print(name) - print(s) -// } - if (pathlen > 2) { - let path = (s as NSString).substringWithRange(NSMakeRange(len, pathlen - 1)) - - let folderName = NSURL(fileURLWithPath: path).lastPathComponent! - let fl = path.length - let pfl = fl - folderName.length - - print("\(folderName) \(pfl)") - let fpath = (path as NSString).substringWithRange(NSMakeRange(0, pfl)) - - let i = MediaItem(name: folderName, path: fpath, root: root, type: ItemType.PICS) - i.thumbUrl = "\(s)?preview=true" + if !hasPics { + hasPics = true + + let name = (root as NSString).lastPathComponent + let namelen = name.characters.count + let idx = root.endIndex.advancedBy(namelen * -1) + let rootstart = root.substringToIndex(idx) + let i = MediaItem(name: name, path: "", root: rootstart, type: ItemType.DETAILS) res.append(i) - } else { - print(st) } } else { - let i = MediaItem(name: st, path: "", root: root, type: ItemType.PICS) + let i = MediaItem(name: st, path: "", root: root, type: ItemType.FOLDER) res.append(i) } } diff --git a/kplayer/master/MasterViewController.swift b/kplayer/master/MasterViewController.swift index a841410..77ca848 100644 --- a/kplayer/master/MasterViewController.swift +++ b/kplayer/master/MasterViewController.swift @@ -11,8 +11,7 @@ import CoreData class MasterViewController: UITableViewController { - var items = [MediaItem]() - var itemsMap = Dictionary() + let model = ItemModel() override func awakeFromNib() { super.awakeFromNib() @@ -22,23 +21,6 @@ class MasterViewController: UITableViewController { } } - func addItem(item: MediaItem) { - let path = item.encodedDir! - print(path) - - var folder = itemsMap[path] - - if folder == nil { - folder = MediaItem(name: "", path: item.path, root: item.root, type: ItemType.FOLDER) - itemsMap[path] = folder! - items.append(folder!) - } - - item.index = folder!.children.count - folder!.children.append(item) - item.parent = folder - } - override func viewDidLoad() { } @@ -50,126 +32,139 @@ class MasterViewController: UITableViewController { // Dispose of any resources that can be recreated. } - override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - print("\(indexPath.row)") - let selectedItem = items[indexPath.row] - - if (selectedItem.type == ItemType.DETAILS) { - performSegueWithIdentifier("showDetail", sender: self) - return - } + func selectLoadedItem(selectedItem: MediaItem) { + switch selectedItem.type { + case ItemType.DETAILS: + performSegueWithIdentifier("showDetail", sender: self) - if (selectedItem.type == ItemType.FOLDER) { - if (!selectedItem.children.isEmpty) { - if selectedItem.children[0].type == ItemType.VIDEO { + case ItemType.FOLDER: + if selectedItem.children.first?.type == ItemType.VIDEO { performSegueWithIdentifier("showDetail", sender: self) - return } - } + else { + gotoNextFolder(selectedItem) + } + default: + print(selectedItem.type) } + } - let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) - let vc = mainStoryboard.instantiateViewControllerWithIdentifier("mastertable") as! MasterViewController - - if (selectedItem.type == ItemType.FOLDER) { - vc.navigationItem.title = selectedItem.name; + override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { + print("\(indexPath.row)") + let selectedItem = model.items[indexPath.row] - if selectedItem.loaded { - vc.items = selectedItem.children - navigationController!.pushViewController(vc, animated: true) - return - } + if selectedItem.type == ItemType.DETAILS { + gotoDetails(selectedItem) + return + // selectLoadedItem(selectedItem) } - if (selectedItem.type == ItemType.ROOT) || (selectedItem.type == ItemType.VIDEOROOT) || (selectedItem.type == ItemType.FOLDER) { - print (selectedItem.path) - NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!, completionHandler: { - (i, leaf) in + if (selectedItem.isFolder()) { + print(selectedItem.path) - let supertype = selectedItem.superRoot().type + NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!) { + (i, leaf) in - var neu = [MediaItem]() + 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 && supertype != ItemType.VIDEOROOT { + if item.type != ItemType.FOLDER && item.isVideo() { item.parent = newFolder newFolder.children.append(item) - } - else { + } else { if item.path == "" { item.path = item.name item.name = "" } - item.type = ItemType.FOLDER - item.parent = selectedItem - neu.append(item) + + 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.append(newFolder) + neu.children.append(newFolder) } let isVideo = selectedItem.parent != nil && selectedItem.parent!.type == ItemType.VIDEOROOT if leaf || isVideo { - let weiter: NetworkManager.Weiter = { - (g) in - - vc.items.removeAll() - vc.itemsMap.removeAll() + self.gotoDetails(selectedItem) + } else { + self.gotoNextFolder(neu) + } + } + } + } - for f in g { - vc.addItem(f) - } - selectedItem.children = vc.items - selectedItem.loaded = true + private func gotoNextFolder(selectedItem: MediaItem) { + let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) + let vc = mainStoryboard.instantiateViewControllerWithIdentifier("mastertable") as! MasterViewController + vc.navigationItem.title = selectedItem.name; + vc.model.items = selectedItem.children + navigationController!.pushViewController(vc, animated: true) + } - var all: [MediaItem]? + private func gotoDetails(selectedItem: MediaItem) { + let weiter: NetworkManager.Weiter = { + (g) in - for f in selectedItem.children { - print(f.path) - if f.type == ItemType.FOLDER && f.path == "" { - all = f.children - break - } - } + let model = ItemModel() - if all != nil { - selectedItem.children = all! - selectedItem.loaded = false + for f in g { + model.addItem(f) + } + selectedItem.children = model.items + selectedItem.loaded = false - for f in all! { - f.loaded = false - f.parent = selectedItem - } - } + var all: [MediaItem]? - self.performSegueWithIdentifier("showDetail", sender: self) - return - } + for f in selectedItem.children { + print(f.path) + if f.type == ItemType.FOLDER && f.path == "" { + all = f.children + break + } + } - selectedItem.type = ItemType.DETAILS - - let p = selectedItem.superRoot() - let dir = selectedItem.encodedDir! + if all != nil { + selectedItem.children = all! + selectedItem.loaded = false - if p.type == ItemType.VIDEOROOT { - NetworkManager.sharedInstance.loadDirs(dir, completionHandler: weiter) - } - else { - NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter) - } - return + for f in all! { + f.loaded = false + f.parent = selectedItem } + } - vc.items = neu - vc.tableView.reloadData() - vc.navigationItem.title = selectedItem.name; - self.navigationController!.pushViewController(vc, animated: true) - }) + self.performSegueWithIdentifier("showDetail", sender: self) + return + } + + selectedItem.type = ItemType.DETAILS + + let p = selectedItem.superRoot() + let dir = selectedItem.encodedDir! + + if p.type == ItemType.VIDEOROOT { + NetworkManager.sharedInstance.loadDirs(dir, completionHandler: weiter) + } else { + NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter) } } @@ -181,23 +176,16 @@ class MasterViewController: UITableViewController { override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow { - let item = items[indexPath.row] + let item = model.items[indexPath.row] let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController controller.detailItem = item - var root = item - - while root.parent != nil { - root = root.parent! - } - - if root.type == ItemType.ROOT { + if item.isPic() { + // größere Vorschau für Fotos controller.defaultItemSize = CGSize(width: 300, height: 300) } - item.children.sortInPlace({ - $0.sortName < $1.sortName - }) + item.sort() var j = 0 for i in item.children { @@ -218,11 +206,11 @@ class MasterViewController: UITableViewController { } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return items.count + return model.items.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) + let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) self.configureCell(cell, atIndexPath: indexPath) @@ -240,17 +228,14 @@ class MasterViewController: UITableViewController { } func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) { - let object = items[indexPath.row] + let object = model.items[indexPath.row] if (object.path.characters.count == 0) { cell.textLabel!.text = "'" + object.name - } - else { + } else { cell.textLabel!.text = object.path } cell.accessoryType = UITableViewCellAccessoryType.None } - - }