Browse Source

Search

master
Marco Schmickler 10 years ago
parent
commit
1157508864
  1. 4
      kplayer/Base.lproj/Main.storyboard
  2. 3
      kplayer/core/ItemModel.swift
  3. 2
      kplayer/core/MediaItem.swift
  4. 40
      kplayer/core/NetworkManager.swift
  5. 19
      kplayer/detail/DetailViewController.swift
  6. 8
      kplayer/detail/ItemCell.swift
  7. 34
      kplayer/master/MasterViewController.swift

4
kplayer/Base.lproj/Main.storyboard

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="H1p-Uh-vWS">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="H1p-Uh-vWS">
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies> </dependencies>
<scenes> <scenes>
<!--Master--> <!--Master-->

3
kplayer/core/ItemModel.swift

@ -14,7 +14,8 @@ class ItemModel {
var folder = itemsMap[path] var folder = itemsMap[path]
if folder == nil { 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! itemsMap[path] = folder!
items.append(folder!) items.append(folder!)
} }

2
kplayer/core/MediaItem.swift

@ -146,7 +146,7 @@ class MediaItem: CustomDebugStringConvertible {
} }
var playerURL: NSURL? { 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) return NSURL(string: NetworkManager.sharedInstance.baseurl + "/service/stream" + encodedDir! + enc)
} }

40
kplayer/core/NetworkManager.swift

@ -22,8 +22,17 @@ class NetworkManager {
internal typealias Weiter = ([MediaItem]) -> Void 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..<rootParam.rangeOfString("*")!.startIndex]
}
if root.endsWith("/") {
root = root[root.startIndex..<root.endIndex.predecessor()]
}
let url1 = baseurl + "/service/listvideos" + rootParam
let len = root.characters.count let len = root.characters.count
var res = [MediaItem]() var res = [MediaItem]()
let url = (url1 as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+") let url = (url1 as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+")
@ -62,8 +71,18 @@ class NetworkManager {
} }
} }
func loadPicDirs(root: String, completionHandler: Weiter) -> Void {
let url1 = baseurl + "/service/listpicdirs" + root
func loadPicDirs(rootParam: String, completionHandler: Weiter) -> Void {
var root = rootParam
if root.containsString("*") {
root = rootParam[rootParam.startIndex..<rootParam.rangeOfString("*")!.startIndex]
}
if root.endsWith("/") {
root = root[root.startIndex..<root.endIndex.predecessor()]
}
let url1 = baseurl + "/service/listpicdirs" + rootParam
let len = root.characters.count let len = root.characters.count
var res = [MediaItem]() var res = [MediaItem]()
let url = (url1 as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+") let url = (url1 as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+")
@ -110,6 +129,8 @@ class NetworkManager {
picfolder.children.append(i) picfolder.children.append(i)
} else { } else {
let iff = MediaItem(name: folderName, path: fpath, root: root, type: ItemType.PICS) let iff = MediaItem(name: folderName, path: fpath, root: root, type: ItemType.PICS)
iff.thumbUrl = i.thumbUrl
items[path] = iff items[path] = iff
res.append(iff) res.append(iff)
iff.children.append(i) iff.children.append(i)
@ -183,12 +204,6 @@ class NetworkManager {
return return
} }
if (item.loaded) {
return
}
// Alamofire.Manager.sharedInstance.session.invalidateAndCancel()
var j = 0 var j = 0
for i in item.children { for i in item.children {
loadItem(i, index: j) loadItem(i, index: j)
@ -199,6 +214,11 @@ class NetworkManager {
func loadItem(item: MediaItem, index: Int) { func loadItem(item: MediaItem, index: Int) {
if (item.type != ItemType.VIDEO) { if (item.type != ItemType.VIDEO) {
var j = 0
for i in item.children {
loadItem(i, index: j)
j+=1
}
return return
} }

19
kplayer/detail/DetailViewController.swift

@ -122,6 +122,15 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
let oid = ObjectIdentifier(self) let oid = ObjectIdentifier(self)
if let detail: MediaItem = self.detailItem { if let detail: MediaItem = self.detailItem {
if i.type == ItemType.VIDEO {
if i.parent!.type != ItemType.DETAILS {
let path = NSIndexPath(forItem: index, inSection: i.parent!.index)
self.collectionView.reloadItemsAtIndexPaths([path])
}
} else {
if i.parent! !== detail { if i.parent! !== detail {
return return
} }
@ -147,7 +156,7 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
return return
}, completion: nil) }, completion: nil)
} }
}
} }
func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) { func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) {
@ -248,7 +257,7 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
if let detail: MediaItem = self.detailItem { if let detail: MediaItem = self.detailItem {
var items = detail.children[indexPath.section] var items = detail.children[indexPath.section]
if (items.loaded || items.type == ItemType.VIDEO) {
if (items.loaded) {
if indexPath.item >= items.children.count { if indexPath.item >= items.children.count {
print(items.name) print(items.name)
} else { } else {
@ -257,8 +266,12 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
} }
self.currentItem = items self.currentItem = items
}
if items.type == ItemType.VIDEO {
performSegueWithIdentifier("showVideo", sender: self) performSegueWithIdentifier("showVideo", sender: self)
} else {
}
else {
let len = items.root.characters.count let len = items.root.characters.count
let url = NetworkManager.sharedInstance.baseurl + "/service/listfiles" + items.fullPath let url = NetworkManager.sharedInstance.baseurl + "/service/listfiles" + items.fullPath

8
kplayer/detail/ItemCell.swift

@ -39,7 +39,13 @@ class ItemCell: UICollectionViewCell {
} else { } else {
if let i = item.image { if let i = item.image {
image.image = i.scaleToSize(15 * 16, height: 15 * 9) 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 image.image = defaultImage
} }
} }

34
kplayer/master/MasterViewController.swift

@ -9,8 +9,8 @@
import UIKit import UIKit
import CoreData import CoreData
class MasterViewController: UITableViewController {
class MasterViewController: UITableViewController, UISearchResultsUpdating {
let searchController = UISearchController(searchResultsController: nil)
let model = ItemModel() let model = ItemModel()
override func awakeFromNib() { override func awakeFromNib() {
@ -22,7 +22,10 @@ class MasterViewController: UITableViewController {
} }
override func viewDidLoad() { override func viewDidLoad() {
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
} }
override func didReceiveMemoryWarning() { override func didReceiveMemoryWarning() {
@ -32,6 +35,18 @@ class MasterViewController: UITableViewController {
// Dispose of any resources that can be recreated. // 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) { func selectLoadedItem(selectedItem: MediaItem) {
switch selectedItem.type { switch selectedItem.type {
case ItemType.DETAILS: case ItemType.DETAILS:
@ -40,8 +55,7 @@ class MasterViewController: UITableViewController {
case ItemType.FOLDER: case ItemType.FOLDER:
if selectedItem.children.first?.type == ItemType.VIDEO { if selectedItem.children.first?.type == ItemType.VIDEO {
performSegueWithIdentifier("showDetail", sender: self) performSegueWithIdentifier("showDetail", sender: self)
}
else {
} else {
gotoNextFolder(selectedItem) gotoNextFolder(selectedItem)
} }
default: default:
@ -88,8 +102,7 @@ class MasterViewController: UITableViewController {
neu.children.append(details) neu.children.append(details)
hasDetails = true hasDetails = true
} }
}
else {
} else {
// item.type = ItemType.FOLDER // item.type = ItemType.FOLDER
item.parent = selectedItem item.parent = selectedItem
neu.children.append(item) neu.children.append(item)
@ -132,6 +145,11 @@ class MasterViewController: UITableViewController {
selectedItem.children = model.items selectedItem.children = model.items
selectedItem.loaded = false selectedItem.loaded = false
if selectedItem.path.containsString("*") {
selectedItem.loaded = true
} else
{
var all: [MediaItem]? var all: [MediaItem]?
for f in selectedItem.children { for f in selectedItem.children {
@ -151,7 +169,7 @@ class MasterViewController: UITableViewController {
f.parent = selectedItem f.parent = selectedItem
} }
} }
}
self.performSegueWithIdentifier("showDetail", sender: self) self.performSegueWithIdentifier("showDetail", sender: self)
return return
} }

Loading…
Cancel
Save