Browse Source

XCode 7.2

master
Marco Schmickler 10 years ago
parent
commit
5ce6c9f5a6
  1. 23
      kplayer/core/MediaItem.swift
  2. 114
      kplayer/core/NetworkManager.swift
  3. 33
      kplayer/detail/DetailViewController.swift
  4. 2
      kplayer/detail/VideoPlayerController.swift
  5. 54
      kplayer/master/MasterViewController.swift
  6. 6
      kplayer/util/ImageLoadOperation.swift
  7. 16
      kplayer/util/UploadOperation.swift

23
kplayer/core/MediaItem.swift

@ -41,8 +41,9 @@ class MediaItem : CustomDebugStringConvertible {
init(name: String, path: String, root: String, type: ItemType) { init(name: String, path: String, root: String, type: ItemType) {
self.name = name self.name = name
self.path = path
self.root = root
let trim = NSCharacterSet(charactersInString: "/ ")
self.root = "/" + root.stringByTrimmingCharactersInSet(trim)
self.path = path.stringByTrimmingCharactersInSet(trim)
self.type = type self.type = type
children = [MediaItem]() children = [MediaItem]()
@ -67,7 +68,7 @@ class MediaItem : CustomDebugStringConvertible {
var thumbPath: String { var thumbPath: String {
let len = "/srv/samba/ren".characters.count let len = "/srv/samba/ren".characters.count
let tpath = "/srv/samba/ren/thumb" + (rootSlash as NSString).substringFromIndex(len) + "/" + path + "/" + name
let tpath = "/srv/samba/ren/thumb" + (rootSlash as NSString).substringFromIndex(len) + pathSlash + name
let enc = tpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20") let enc = tpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
return enc + "/" return enc + "/"
@ -87,7 +88,7 @@ class MediaItem : CustomDebugStringConvertible {
} }
var fullPath: String { var fullPath: String {
let fpath = rootSlash + path + "/" + name
let fpath = rootSlash + pathSlash + name
let enc = fpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding) //.stringByReplacingOccurrencesOfString(" ", withString: "%20") let enc = fpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding) //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
return enc! return enc!
} }
@ -106,6 +107,20 @@ class MediaItem : CustomDebugStringConvertible {
} }
var pathSlash: String {
if path.characters.count == 0 {
return ""
}
if path.endsWith("/") {
return path
}
else {
return path + "/"
}
}
var encodedDir: String? { var encodedDir: String? {
let dir = rootSlash + path let dir = rootSlash + path

114
kplayer/core/NetworkManager.swift

@ -20,29 +20,6 @@ class NetworkManager {
return queue return queue
}() }()
func loadRoots() -> AnyObject {
var itemsArray = [];
Alamofire.request(.GET, baseurl + "/service/roots")
.responseString {
(_, _, result) in
let string = result.value!
let f = string.componentsSeparatedByString("\r\n")
print(string)
print(f)
}
// .response { (request, response, data, error) in
// println(request)
// println(response)
//
// var r = (response as NSString).componentsSeparatedByString("\r\n")
//
// println(error)
// }
return itemsArray;
}
public typealias Weiter = ([MediaItem]) -> Void public typealias Weiter = ([MediaItem]) -> Void
@ -126,6 +103,7 @@ class NetworkManager {
let i = MediaItem(name: folderName, path: fpath, root: root, type: ItemType.PICS) let i = MediaItem(name: folderName, path: fpath, root: root, type: ItemType.PICS)
i.thumbUrl = "\(s)?preview=true" i.thumbUrl = "\(s)?preview=true"
i.loaded = true
if !name.hasPrefix(".") { if !name.hasPrefix(".") {
if let picfolder = items[path] { if let picfolder = items[path] {
picfolder.children.append(i) picfolder.children.append(i)
@ -201,8 +179,42 @@ class NetworkManager {
print(st) print(st)
let i = MediaItem(name: st, path: st, root: root, type: ItemType.FOLDER)
res.append(i)
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
var 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"
res.append(i)
} else {
print(st)
}
} else {
let i = MediaItem(name: st, path: "", root: root, type: ItemType.PICS)
res.append(i)
}
}
} }
} }
completionHandler(res, leaf) completionHandler(res, leaf)
@ -212,7 +224,7 @@ class NetworkManager {
func playerURL(item: MediaItem) -> String { func playerURL(item: MediaItem) -> String {
let enc = item.name.stringByReplacingOccurrencesOfString(" ", withString: "%20") let enc = item.name.stringByReplacingOccurrencesOfString(" ", withString: "%20")
return baseurl + "/service/stream" + item.rootSlash + item.path + "/" + enc
return baseurl + "/service/stream" + item.rootSlash + item.pathSlash + enc
} }
func loadItems(item: MediaItem) { func loadItems(item: MediaItem) {
@ -252,7 +264,7 @@ class NetworkManager {
print(url) print(url)
Alamofire.request(.GET, url).responseJSON { Alamofire.request(.GET, url).responseJSON {
(_,_,response) in
(_, _, response) in
if let json = response.value { if let json = response.value {
var hashes = Dictionary<String, String>() var hashes = Dictionary<String, String>()
@ -318,47 +330,41 @@ class NetworkManager {
print(url) print(url)
Alamofire.request(.GET, url).responseJSON { Alamofire.request(.GET, url).responseJSON {
(_,_,response) in
(_, _, response) in
if let json = response.value {
var hashes = Set<String>()
var hashes = Set<String>()
if let json = response.value {
for b in json as! [String] { for b in json as! [String] {
hashes.insert(b) hashes.insert(b)
print(b) print(b)
} }
}
for c in item.children {
if let t = c.time {
let ms = Int(t * 1000)
let p = c.thumbPath + "\(ms).jpg"
let pt = c.thumbPath + "\(ms)_thumb.jpg"
print(p)
if hashes.contains(pt) {
print("contained")
} else {
if let id = c.image, imageData = UIImageJPEGRepresentation(id, 1.0) {
let op = UploadOperation(baseUrl: self.baseurl + "/service/upload", data: imageData, path: p)
self.operationQueue.addOperation(op)
for c in item.children {
if let t = c.time {
let ms = Int(t * 1000)
let p = c.thumbPath + "\(ms).jpg"
let pt = c.thumbPath + "\(ms)_thumb.jpg"
print(p)
if hashes.contains(pt) {
print("contained")
} else {
if let id = c.image, imageData = UIImageJPEGRepresentation(id, 1.0) {
let op = UploadOperation(baseUrl: self.baseurl + "/service/upload", data: imageData, path: p)
self.operationQueue.addOperation(op)
let thumb = c.image!.scaleToSize(15 * 16, height: 15 * 9)
let imageDataT = UIImageJPEGRepresentation(thumb, 1.0);
let thumb = id.scaleToSize(15 * 16, height: 15 * 9)
if let imageDataT = UIImageJPEGRepresentation(thumb, 1.0) {
c.image = thumb c.image = thumb
let opT = UploadOperation(baseUrl: self.baseurl + "/service/upload", data: imageDataT!, path: pt)
let opT = UploadOperation(baseUrl: self.baseurl + "/service/upload", data: imageDataT, path: pt)
self.operationQueue.addOperation(opT) self.operationQueue.addOperation(opT)
c.loaded = true
} }
c.loaded = true
} }
hashes.remove(p)
hashes.remove(pt)
} }
} }
for o in hashes {
print("To delete \(o)")
// todo Alamofire.request(.GET, self.baseurl + "/service/deletethumb\(o)")
}
} }
} }

33
kplayer/detail/DetailViewController.swift

@ -114,19 +114,21 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
var i = [MediaItem]() var i = [MediaItem]()
for it in detailItem!.children {
for c in it.children {
i.append(c)
if let d = detailItem {
for it in d.children {
for c in it.children {
i.append(c)
}
} }
}
pc.items = i
pc.completionHandler = {
self.dismissViewControllerAnimated(true, completion: nil);
}
let navController = UINavigationController(rootViewController: pc) // Creating a navigation controller with pc at the root of the navigation stack.
pc.items = i
pc.completionHandler = {
self.dismissViewControllerAnimated(true, completion: nil);
}
let navController = UINavigationController(rootViewController: pc) // Creating a navigation controller with pc at the root of the navigation stack.
presentViewController(navController, animated: false, completion: nil)
presentViewController(navController, animated: false, completion: nil)
}
} }
func refreshItems(notification: NSNotification) { func refreshItems(notification: NSNotification) {
@ -194,7 +196,14 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
} else { } else {
if indexPath!.item >= items.children.count { if indexPath!.item >= items.children.count {
} else { } else {
items.children.removeAtIndex(indexPath!.item)
let c = items.children.removeAtIndex(indexPath!.item)
if let t = c.time {
let ms = Int(t * 1000)
let p = c.thumbPath + "\(ms).jpg"
let pt = c.thumbPath + "\(ms)_thumb.jpg"
Alamofire.request(.GET, NetworkManager.sharedInstance.baseurl + "/service/deletethumb\(p)")
Alamofire.request(.GET, NetworkManager.sharedInstance.baseurl + "/service/deletethumb\(pt)")
}
self.collectionView.reloadData() self.collectionView.reloadData()
} }
} }
@ -276,7 +285,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) {
if (items.loaded || items.type == ItemType.VIDEO) {
if indexPath.item >= items.children.count { if indexPath.item >= items.children.count {
print(items.name) print(items.name)
} else { } else {

2
kplayer/detail/VideoPlayerController.swift

@ -97,7 +97,7 @@ print("play")
} }
func play(url: String) { func play(url: String) {
self.moviePlayer = ALMoviePlayerController(frame: CGRectMake(0, 0, 1024, 768))
self.moviePlayer = ALMoviePlayerController(frame: CGRectMake(0, 0, view.frame.width, view.frame.height))
if let player = self.moviePlayer { if let player = self.moviePlayer {
let movieControls = ALMoviePlayerControls(moviePlayer: player, style: ALMoviePlayerControlsStyleDefault); let movieControls = ALMoviePlayerControls(moviePlayer: player, style: ALMoviePlayerControlsStyleDefault);

54
kplayer/master/MasterViewController.swift

@ -75,6 +75,11 @@ class MasterViewController: UITableViewController {
let selectedItem = items[indexPath.row] let selectedItem = items[indexPath.row]
if (selectedItem.type == ItemType.DETAILS) { if (selectedItem.type == ItemType.DETAILS) {
// if !selectedItem.loaded {
// NetworkManager.sharedInstance.loadPicDirs(selectedItem.encodedDir!, completionHandler: weiter)
// return
// }
performSegueWithIdentifier("showDetail", sender: self) performSegueWithIdentifier("showDetail", sender: self)
return return
} }
@ -153,32 +158,42 @@ class MasterViewController: UITableViewController {
if (selectedItem.type == ItemType.ROOT) || (selectedItem.type == ItemType.VIDEOROOT) || (selectedItem.type == ItemType.FOLDER) { if (selectedItem.type == ItemType.ROOT) || (selectedItem.type == ItemType.VIDEOROOT) || (selectedItem.type == ItemType.FOLDER) {
print (selectedItem.path) print (selectedItem.path)
NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!, completionHandler: { NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!, completionHandler: {
(i, leaf) in (i, leaf) in
let newFolder = MediaItem(name: ".", path: selectedItem.path, root: selectedItem.root, type: ItemType.FOLDER)
for item in i {
if item.type != ItemType.FOLDER {
let supertype = selectedItem.superRoot().type
var neu = [MediaItem]()
let newFolder = MediaItem(name: ".", path: "", root: selectedItem.root, type: ItemType.DETAILS)
newFolder.loaded = true
for item in i {
if item.type != ItemType.FOLDER && supertype != ItemType.VIDEOROOT {
item.parent = newFolder item.parent = newFolder
// item.path = ""
newFolder.children.append(item) newFolder.children.append(item)
} }
item.parent = selectedItem
selectedItem.children.append(item)
else {
if item.path == "" {
item.path = item.name
item.name = ""
}
item.type = ItemType.FOLDER
item.parent = selectedItem
neu.append(item)
}
} }
if newFolder.children.count > 0 { if newFolder.children.count > 0 {
newFolder.parent = selectedItem newFolder.parent = selectedItem
selectedItem.children.append(newFolder)
neu.append(newFolder)
} }
if leaf {
selectedItem.type = ItemType.DETAILS
let isVideo = selectedItem.parent != nil && selectedItem.parent!.type == ItemType.VIDEOROOT
if leaf || isVideo {
let weiter: NetworkManager.Weiter = { let weiter: NetworkManager.Weiter = {
(g) in (g) in
vc.items.removeAll() vc.items.removeAll()
vc.itemsMap.removeAll() vc.itemsMap.removeAll()
@ -207,11 +222,13 @@ class MasterViewController: UITableViewController {
f.parent = selectedItem f.parent = selectedItem
} }
} }
self.performSegueWithIdentifier("showDetail", sender: self) self.performSegueWithIdentifier("showDetail", sender: self)
return return
} }
selectedItem.type = ItemType.DETAILS
let p = selectedItem.superRoot() let p = selectedItem.superRoot()
let dir = selectedItem.encodedDir! let dir = selectedItem.encodedDir!
@ -225,7 +242,14 @@ class MasterViewController: UITableViewController {
// self.performSegueWithIdentifier("showDetail", sender: self) // self.performSegueWithIdentifier("showDetail", sender: self)
return return
} }
vc.items = i
else {
// var folders = [MediaItem]()
// var folders = [MediaItem]()
// for item in i {
//
// }
}
vc.items = neu
vc.tableView.reloadData() vc.tableView.reloadData()
vc.navigationItem.title = selectedItem.name; vc.navigationItem.title = selectedItem.name;
self.navigationController!.pushViewController(vc, animated: true) self.navigationController!.pushViewController(vc, animated: true)
@ -304,7 +328,7 @@ class MasterViewController: UITableViewController {
func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) { func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) {
let object = items[indexPath.row] let object = items[indexPath.row]
if (object.path.characters.count == 0) { if (object.path.characters.count == 0) {
cell.textLabel!.text = "." + object.name
cell.textLabel!.text = "'" + object.name
} }
else { else {
cell.textLabel!.text = object.path cell.textLabel!.text = object.path

6
kplayer/util/ImageLoadOperation.swift

@ -40,8 +40,10 @@ class ImageLoadOperation: NSOperation {
} }
request!.validate().response { (request, response, data, error) in request!.validate().response { (request, response, data, error) in
if let e = error {
print(e)
if let e = error as? NSError {
if (e.code != -999) {
print(e)
}
} }
else if let d = data { else if let d = data {
self.succeeder(UIImage(data: d, scale: 1)!) self.succeeder(UIImage(data: d, scale: 1)!)

16
kplayer/util/UploadOperation.swift

@ -28,14 +28,26 @@ class UploadOperation: NSOperation {
"name": path "name": path
] ]
print("PATH: \(path)")
let urlRequest = urlRequestWithComponents(baseUrl, parameters: parameters) let urlRequest = urlRequestWithComponents(baseUrl, parameters: parameters)
// let request = Alamofire.upload(urlRequest)
let request = Alamofire.upload(urlRequest.0, data: urlRequest.1)
// success: todo set url to item // success: todo set url to item
// .progress { // .progress {
// (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in // (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
// println("progress : \(totalBytesWritten) / \(totalBytesExpectedToWrite)")
// print("progress : \(totalBytesWritten) / \(totalBytesExpectedToWrite)")
// } // }
.response { (request, response, data, error) in
if let d = data {
let datastring = NSString(data: d, encoding:NSUTF8StringEncoding)
print("d \(datastring)")
}
if let e = error {
print("e \(e)")
}
}
} }
} }
Loading…
Cancel
Save