diff --git a/kplayer/Base.lproj/Main.storyboard b/kplayer/Base.lproj/Main.storyboard index 655215c..41cf79f 100644 --- a/kplayer/Base.lproj/Main.storyboard +++ b/kplayer/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + diff --git a/kplayer/core/ItemModel.swift b/kplayer/core/ItemModel.swift index 69aa86e..6ad2493 100644 --- a/kplayer/core/ItemModel.swift +++ b/kplayer/core/ItemModel.swift @@ -14,7 +14,8 @@ class ItemModel { var folder = itemsMap[path] if folder == nil { - folder = MediaItem(name: "", path: item.path, root: item.root, type: ItemType.FOLDER) + folder = MediaItem(name: item.path, path: item.path, root: item.root, type: ItemType.FOLDER) + folder!.loaded = true itemsMap[path] = folder! items.append(folder!) } diff --git a/kplayer/core/MediaItem.swift b/kplayer/core/MediaItem.swift index 28495f8..dde18e3 100644 --- a/kplayer/core/MediaItem.swift +++ b/kplayer/core/MediaItem.swift @@ -146,7 +146,7 @@ class MediaItem: CustomDebugStringConvertible { } var playerURL: NSURL? { - let enc = name.stringByReplacingOccurrencesOfString(" ", withString: "%20") + let enc = "/" + name.stringByReplacingOccurrencesOfString(" ", withString: "%20") return NSURL(string: NetworkManager.sharedInstance.baseurl + "/service/stream" + encodedDir! + enc) } diff --git a/kplayer/core/NetworkManager.swift b/kplayer/core/NetworkManager.swift index 541f037..ff9b615 100644 --- a/kplayer/core/NetworkManager.swift +++ b/kplayer/core/NetworkManager.swift @@ -22,8 +22,17 @@ class NetworkManager { internal typealias Weiter = ([MediaItem]) -> Void - func loadDirs(root: String, completionHandler: Weiter) -> Void { - let url1 = baseurl + "/service/listvideos" + root + func loadDirs(rootParam: String, completionHandler: Weiter) -> Void { + var root = rootParam + + if root.containsString("*") { + root = rootParam[rootParam.startIndex.. Void { - let url1 = baseurl + "/service/listpicdirs" + root + func loadPicDirs(rootParam: String, completionHandler: Weiter) -> Void { + var root = rootParam + + if root.containsString("*") { + root = rootParam[rootParam.startIndex.. index { - let path = NSIndexPath(forItem: 0, inSection: index) - self.collectionView.reloadItemsAtIndexPaths([path]) + collectionView.performBatchUpdates({ + var newItems = [NSIndexPath]() + var j = 0 - for _ in detail.children[index].children { - if j >= 1 { - newItems.append(NSIndexPath(forItem: j, inSection: index)) + if detail.children.count > index { + let path = NSIndexPath(forItem: 0, inSection: index) + self.collectionView.reloadItemsAtIndexPaths([path]) + + for _ in detail.children[index].children { + if j >= 1 { + newItems.append(NSIndexPath(forItem: j, inSection: index)) + } + j += 1 } - j+=1 + self.collectionView.insertItemsAtIndexPaths(newItems) } - self.collectionView.insertItemsAtIndexPaths(newItems) - } - return - }, completion: nil) + return + }, completion: nil) + } } - } func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) { @@ -248,7 +257,7 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { if let detail: MediaItem = self.detailItem { var items = detail.children[indexPath.section] - if (items.loaded || items.type == ItemType.VIDEO) { + if (items.loaded) { if indexPath.item >= items.children.count { print(items.name) } else { @@ -257,8 +266,12 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout } self.currentItem = items + } + + if items.type == ItemType.VIDEO { performSegueWithIdentifier("showVideo", sender: self) - } else { + } + else { let len = items.root.characters.count let url = NetworkManager.sharedInstance.baseurl + "/service/listfiles" + items.fullPath diff --git a/kplayer/detail/ItemCell.swift b/kplayer/detail/ItemCell.swift index 9ef8ac1..da83aaf 100644 --- a/kplayer/detail/ItemCell.swift +++ b/kplayer/detail/ItemCell.swift @@ -39,7 +39,13 @@ class ItemCell: UICollectionViewCell { } else { if let i = item.image { image.image = i.scaleToSize(15 * 16, height: 15 * 9) - } else { + } else if item.children.count > 0 { + if let _ = item.children[0].thumbUrl, nsurl = NSURL(string: item.children[0].thumbUrlAbsolute) { + image.hnk_setImageFromURL(nsurl, placeholder: defaultImage) + } + } + else + { image.image = defaultImage } } diff --git a/kplayer/master/MasterViewController.swift b/kplayer/master/MasterViewController.swift index 2a74dc3..6646efa 100644 --- a/kplayer/master/MasterViewController.swift +++ b/kplayer/master/MasterViewController.swift @@ -9,8 +9,8 @@ import UIKit import CoreData -class MasterViewController: UITableViewController { - +class MasterViewController: UITableViewController, UISearchResultsUpdating { + let searchController = UISearchController(searchResultsController: nil) let model = ItemModel() override func awakeFromNib() { @@ -22,7 +22,10 @@ class MasterViewController: UITableViewController { } override func viewDidLoad() { - + searchController.searchResultsUpdater = self + searchController.dimsBackgroundDuringPresentation = false + definesPresentationContext = true + tableView.tableHeaderView = searchController.searchBar } override func didReceiveMemoryWarning() { @@ -32,20 +35,31 @@ class MasterViewController: UITableViewController { // Dispose of any resources that can be recreated. } + func updateSearchResultsForSearchController(search: UISearchController) { + let str = search.searchBar.text! + + if str.hasSuffix("*") { + let txt = str[str.startIndex ..< str.endIndex.advancedBy(-1)] + let neu = MediaItem(name: txt, path: model.items[0].parent!.path + "*" + txt, root: model.items[0].parent!.root, type: ItemType.DETAILS) + model.items.append(neu) + neu.parent = model.items[0].parent + self.tableView.reloadData() + } + } + func selectLoadedItem(selectedItem: MediaItem) { switch selectedItem.type { - case ItemType.DETAILS: - performSegueWithIdentifier("showDetail", sender: self) + case ItemType.DETAILS: + performSegueWithIdentifier("showDetail", sender: self) - case ItemType.FOLDER: - if selectedItem.children.first?.type == ItemType.VIDEO { - performSegueWithIdentifier("showDetail", sender: self) - } - else { - gotoNextFolder(selectedItem) - } - default: - print(selectedItem.type) + case ItemType.FOLDER: + if selectedItem.children.first?.type == ItemType.VIDEO { + performSegueWithIdentifier("showDetail", sender: self) + } else { + gotoNextFolder(selectedItem) + } + default: + print(selectedItem.type) } } @@ -56,7 +70,7 @@ class MasterViewController: UITableViewController { if selectedItem.type == ItemType.DETAILS { gotoDetails(selectedItem) return - // selectLoadedItem(selectedItem) + // selectLoadedItem(selectedItem) } @@ -88,8 +102,7 @@ class MasterViewController: UITableViewController { neu.children.append(details) hasDetails = true } - } - else { + } else { // item.type = ItemType.FOLDER item.parent = selectedItem neu.children.append(item) @@ -132,26 +145,31 @@ class MasterViewController: UITableViewController { selectedItem.children = model.items selectedItem.loaded = false - var all: [MediaItem]? + if selectedItem.path.containsString("*") { + selectedItem.loaded = true + } else + { + + var all: [MediaItem]? - for f in selectedItem.children { - print(f.path) - if f.type == ItemType.FOLDER && f.path == "" { - all = f.children - break + for f in selectedItem.children { + print(f.path) + if f.type == ItemType.FOLDER && f.path == "" { + all = f.children + break + } } - } - if all != nil { - selectedItem.children = all! - selectedItem.loaded = false + if all != nil { + selectedItem.children = all! + selectedItem.loaded = false - for f in all! { - f.loaded = false - f.parent = selectedItem + for f in all! { + f.loaded = false + f.parent = selectedItem + } } } - self.performSegueWithIdentifier("showDetail", sender: self) return }