diff --git a/.idea/kplayer.iml b/.idea/kplayer.iml
index 0875b24..8455700 100644
--- a/.idea/kplayer.iml
+++ b/.idea/kplayer.iml
@@ -16,13 +16,12 @@
-
-
+
@@ -32,35 +31,35 @@
-
-
+
+
-
+
-
+
-
-
+
-
+
+
-
-
+
+
@@ -90,12 +89,6 @@
-
-
-
-
-
-
@@ -103,8 +96,8 @@
-
+
@@ -114,82 +107,38 @@
-
-
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
-
+
-
-
+
+
-
+
-
+
-
+
+
@@ -197,21 +146,22 @@
-
-
+
+
-
+
+
-
-
+
+
@@ -232,6 +182,12 @@
+
+
+
+
+
+
@@ -248,17 +204,10 @@
-
-
-
-
-
-
-
diff --git a/Podfile b/Podfile
index 3859a64..a5977ba 100644
--- a/Podfile
+++ b/Podfile
@@ -9,11 +9,11 @@ use_frameworks!
pod 'Alamofire', '~> 2.0'
pod 'ALMoviePlayerController', '~>0.3.0'
#pod 'DZVideoPlayerViewController'
-pod 'SwiftyJSON'
+#pod 'SwiftyJSON'
pod 'HanekeSwift'
pod 'Nimbus/Photos'
pod 'Nimbus/PagingScrollView'
-pod 'AFNetworking', '~>2.1'
+#pod 'AFNetworking', '~>2.1'
pod 'Dollar'
pod 'Cent'
#, '1.2.0'
diff --git a/kplayer.xcodeproj/project.pbxproj b/kplayer.xcodeproj/project.pbxproj
index 94daea4..934f774 100644
--- a/kplayer.xcodeproj/project.pbxproj
+++ b/kplayer.xcodeproj/project.pbxproj
@@ -7,10 +7,8 @@
objects = {
/* Begin PBXBuildFile section */
- 1C73626E34BA4D64ACF94AE5 /* alamoimage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736C60C423AE87B8D0F22A /* alamoimage.swift */; };
1C73631EACF56BABD3B2BCFB /* LayoutTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736BC4450890C45F8FBC63 /* LayoutTools.swift */; };
1C73635138BBD2BB480A308F /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C736777456388CA571DA17B /* MediaPlayer.framework */; };
- 1C7363D9DC8F9D1F866DE935 /* Kirschkeks-256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C7368DC7EF11A553145E169 /* Kirschkeks-256x256.png */; };
1C73640D928DE56D35175D39 /* UploadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736260E748CF136FF37EA7 /* UploadOperation.swift */; };
1C73646F87B495A47D7943C7 /* NetData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7369EC16B19B32B515169E /* NetData.swift */; };
1C736503B656C999E5E12081 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7365B06FA66294E99AC2D3 /* NetworkManager.swift */; };
@@ -24,6 +22,7 @@
1C73691A9C7174E0C6B57267 /* stringutil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736B794396F2E50387B8F2 /* stringutil.swift */; };
1C73693A1334A7792856FC58 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C73611D226B48C24DB37535 /* MasterViewController.swift */; };
1C7369ABC44CFB530EA71FB6 /* HeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C736D9BB5498E7E8F11C754 /* HeaderCell.swift */; };
+ 1C736A5FA5BA53B2597F2ED7 /* Kirschkeks-256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C736059262A57AADE6AB761 /* Kirschkeks-256x256.png */; };
1C736D16E81BA1FB325200E0 /* HanekeFetchOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7360744ABACC3557D05760 /* HanekeFetchOperation.swift */; };
1C736D24891597F2728230EE /* ImageLoadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7360A94DBECA685ED8602F /* ImageLoadOperation.swift */; };
1C736D24B49451141CD4B64D /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7369F53095B7A4D65679C2 /* DetailViewController.swift */; };
@@ -50,6 +49,7 @@
/* Begin PBXFileReference section */
127AC1F28342F9AAE3CEC5C2 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1C736059262A57AADE6AB761 /* Kirschkeks-256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Kirschkeks-256x256.png"; path = "kplayer/Kirschkeks-256x256.png"; sourceTree = ""; };
1C736069C214E9522BB1BD97 /* ItemCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCell.swift; sourceTree = ""; };
1C7360744ABACC3557D05760 /* HanekeFetchOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HanekeFetchOperation.swift; sourceTree = ""; };
1C7360A94DBECA685ED8602F /* ImageLoadOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageLoadOperation.swift; sourceTree = ""; };
@@ -63,12 +63,10 @@
1C73673DC671535E3A049F54 /* MediaPhotoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaPhotoController.swift; sourceTree = ""; };
1C736777456388CA571DA17B /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; };
1C73688DAB88F9360FB62A49 /* MediaItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaItem.swift; sourceTree = ""; };
- 1C7368DC7EF11A553145E169 /* Kirschkeks-256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Kirschkeks-256x256.png"; sourceTree = ""; };
1C7369EC16B19B32B515169E /* NetData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetData.swift; sourceTree = ""; };
1C7369F53095B7A4D65679C2 /* DetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; };
1C736B794396F2E50387B8F2 /* stringutil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = stringutil.swift; sourceTree = ""; };
1C736BC4450890C45F8FBC63 /* LayoutTools.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LayoutTools.swift; sourceTree = ""; };
- 1C736C60C423AE87B8D0F22A /* alamoimage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = alamoimage.swift; sourceTree = ""; };
1C736D9BB5498E7E8F11C754 /* HeaderCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderCell.swift; sourceTree = ""; };
1C736DCCE3AA9993E15F7652 /* UIImageExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageExtension.swift; sourceTree = ""; };
1C736F9338CE36708244D42A /* DataLoadOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataLoadOperation.swift; sourceTree = ""; };
@@ -143,7 +141,6 @@
1C7369EC16B19B32B515169E /* NetData.swift */,
1C7360744ABACC3557D05760 /* HanekeFetchOperation.swift */,
1C7360A94DBECA685ED8602F /* ImageLoadOperation.swift */,
- 1C736C60C423AE87B8D0F22A /* alamoimage.swift */,
1C736F9338CE36708244D42A /* DataLoadOperation.swift */,
1C736B794396F2E50387B8F2 /* stringutil.swift */,
1C73648CEC974A2500172064 /* ViewControllerExtensions.swift */,
@@ -187,6 +184,7 @@
C98AF5D01B124D6A00D196CC /* Products */,
8EB26707CC8BD3E10F328A9E /* Pods */,
8CB608B13A2BDFA9D708982B /* Frameworks */,
+ 1C736059262A57AADE6AB761 /* Kirschkeks-256x256.png */,
);
sourceTree = "";
};
@@ -209,7 +207,6 @@
C98AF5D61B124D6A00D196CC /* kplayer.xcdatamodeld */,
C98AF5D21B124D6A00D196CC /* Supporting Files */,
1C736DC8C3AFB991541A2079 /* core */,
- 1C7368DC7EF11A553145E169 /* Kirschkeks-256x256.png */,
1C7365603CAE04E39B73D843 /* util */,
1C73615846EE8B07DAAFD230 /* detail */,
1C7364808E72BFA7575E75E1 /* master */,
@@ -332,7 +329,7 @@
C98AF5DF1B124D6A00D196CC /* Main.storyboard in Resources */,
C98AF5E41B124D6A00D196CC /* LaunchScreen.xib in Resources */,
C98AF5E11B124D6A00D196CC /* Images.xcassets in Resources */,
- 1C7363D9DC8F9D1F866DE935 /* Kirschkeks-256x256.png in Resources */,
+ 1C736A5FA5BA53B2597F2ED7 /* Kirschkeks-256x256.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -415,7 +412,6 @@
1C7365885FAF292F2221ED44 /* MediaPhotoController.swift in Sources */,
1C736D16E81BA1FB325200E0 /* HanekeFetchOperation.swift in Sources */,
1C736D24891597F2728230EE /* ImageLoadOperation.swift in Sources */,
- 1C73626E34BA4D64ACF94AE5 /* alamoimage.swift in Sources */,
1C7367AF39961D2BA72480ED /* DataLoadOperation.swift in Sources */,
1C73675C34BE0990D44570BE /* ItemModel.swift in Sources */,
1C73691A9C7174E0C6B57267 /* stringutil.swift in Sources */,
diff --git a/kplayer/core/ItemModel.swift b/kplayer/core/ItemModel.swift
index 0304173..2e8ae3a 100644
--- a/kplayer/core/ItemModel.swift
+++ b/kplayer/core/ItemModel.swift
@@ -10,7 +10,7 @@ class ItemModel {
var itemsMap = Dictionary()
func addItem(item: MediaItem) {
- let path = item.rootSlash + item.path
+ let path = item.root + "/" + item.path
print(path)
var folder = itemsMap[path]
diff --git a/kplayer/core/MediaItem.swift b/kplayer/core/MediaItem.swift
index d0bfa1b..449b5c8 100644
--- a/kplayer/core/MediaItem.swift
+++ b/kplayer/core/MediaItem.swift
@@ -6,39 +6,82 @@
import Foundation
import UIKit
-enum ItemType : String, CustomStringConvertible {
+enum ItemType: String, CustomStringConvertible {
+ /**
+ Repräsentiert eine Wurzel, in der nur Bilder angezeigt werden.
+ */
case ROOT = "root"
+
+ /**
+ Repräsentiert eine Wurzel, in der nur Videos angezeigt werden.
+ */
case VIDEOROOT = "videoroot"
+
+ /**
+ Repräsentiert einen Ordner. Darin sind weitere Ordner enthalten.
+ */
case FOLDER = "folder"
+
+ /**
+ Repräsentiert ein Video. Hat keine Unterordner. Die Children sind Snapshots.
+ */
case VIDEO = "video"
+
+ /**
+ Snapshots eines Videos.
+ */
+ case SNAPSHOT = "snapshot"
+
+ /**
+ Repräsentiert einen Bilder-Ordner.
+ */
case PICS = "pics"
+
+ /**
+ Repräsentiert einen Ordner, der Videos oder Bilder-Ordner enthält. Wird im DetailViewController angezeigt.
+ */
case DETAILS = "details"
- case SNAPSHOT = "snapshot"
var description: String {
return self.rawValue
}
}
-class MediaItem : CustomDebugStringConvertible {
- var name : String
- var path : String
- var root: String
+/**
+ Repräsentiert ein Item eines der festgelegten Typen.
+*/
+class MediaItem: CustomDebugStringConvertible {
- var image: UIImage?
- var time: NSTimeInterval?
- var thumbUrl: String?
+
+ /**
+ Wird durch name, path und root identifiziert.
+ */
+ var name: String
+ var path: String
+ var root: String
var children: [MediaItem]
var parent: MediaItem?
var type: ItemType
+ /**
+ Position innerhalb der Children
+ */
var index = 0
+
+ /**
+ true, wenn die Children geladen sind
+ */
var loaded = false
- var featured = true
+ // abgeleitet
var sortName = ""
+ // Nutzinhalt
+ var image: UIImage?
+ var time: NSTimeInterval?
+ var thumbUrl: String?
+
init(name: String, path: String, root: String, type: ItemType) {
self.name = name
let trim = NSCharacterSet(charactersInString: "/ ")
@@ -51,10 +94,14 @@ class MediaItem : CustomDebugStringConvertible {
sortName = computeSortName(name)
}
- func computeSortName(sname: String) -> String {
+ private func computeSortName(sname: String) -> String {
var lsortName = sname.stringByReplacingOccurrencesOfString("full", withString: "")
- var fullNameArr = sortName.characters.split {$0 == "_"}.map { String($0) }
-// println (lsortName)
+ var fullNameArr = sortName.characters.split {
+ $0 == "_"
+ }.map {
+ String($0)
+ }
+
if !fullNameArr.isEmpty {
lsortName = fullNameArr[0]
}
@@ -66,63 +113,58 @@ class MediaItem : CustomDebugStringConvertible {
return lsortName
}
- var thumbPath: String {
+ /**
+ Ordner, in dem die Snapshots eines Videos abgelegt sind.
+ Absoluter Pfad mit Slash am Ende.
+ */
+ var snapshotDirPathForVideo: String {
let len = "/srv/samba/ren".characters.count
- let tpath = "/srv/samba/ren/thumb" + (rootSlash as NSString).substringFromIndex(len) + pathSlash + name
- let enc = tpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
+ let rootPostfix = (root as NSString).substringFromIndex(len)
+ let tpath = "/srv/samba/ren/thumb\(rootPostfix)/\(path)/\(name)"
+ let enc = tpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)!
return enc + "/"
}
+ /**
+ Absolute URL, unter der das Thumbnail des Items abgerufen werden kann.
+ */
var thumbUrlAbsolute: String {
- let enc = thumbUrl!.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
+ let enc = thumbUrl!.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)!
return NetworkManager.sharedInstance.baseurl + "/service/download" + enc
}
+ /**
+ Absolute URL, unter der das Image des Items abgerufen werden kann.
+ */
var imageUrlAbsolute: String {
var imageUrl = thumbUrl!.stringByReplacingOccurrencesOfString("_thumb.", withString: ".")
imageUrl = imageUrl.stringByReplacingOccurrencesOfString("?preview=true", withString: "")
- imageUrl = imageUrl.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
+ imageUrl = imageUrl.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)!
return NetworkManager.sharedInstance.baseurl + "/service/download" + imageUrl
}
+ var playerURL: NSURL? {
+ let enc = name.stringByReplacingOccurrencesOfString(" ", withString: "%20")
+ return NSURL(string: NetworkManager.sharedInstance.baseurl + "/service/stream" + encodedDir! + enc)
+ }
+
+ /**
+ Absoluter Pfad des Items.
+ */
var fullPath: String {
- let fpath = rootSlash + pathSlash + name
- let enc = fpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding) //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
+ let fpath = "\(root)/\(path)/\(name)"
+ let enc = fpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)
return enc!
}
var debugDescription: String {
return "\(type): \(root) \(path) \(name) (\(index)) Child count \(children.count)"
}
-
- var rootSlash: String {
- if root.endsWith("/") {
- return root
- }
- else {
- return root + "/"
- }
-
- }
-
- var pathSlash: String {
- if path.characters.count == 0 {
- return ""
- }
-
- if path.endsWith("/") {
- return path
- }
- else {
- return path + "/"
- }
-
- }
var encodedDir: String? {
- let dir = rootSlash + path
+ let dir = "\(root)/\(path)"
return dir.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)
}
diff --git a/kplayer/core/NetworkManager.swift b/kplayer/core/NetworkManager.swift
index 35d1ed4..de2636f 100644
--- a/kplayer/core/NetworkManager.swift
+++ b/kplayer/core/NetworkManager.swift
@@ -21,7 +21,7 @@ class NetworkManager {
}()
- public typealias Weiter = ([MediaItem]) -> Void
+ internal typealias Weiter = ([MediaItem]) -> Void
func loadDirs(root: String, completionHandler: Weiter) -> Void {
let url1 = baseurl + "/service/listvideos" + root
@@ -33,8 +33,7 @@ class NetworkManager {
(_, _, response) in
if let json = response.value {
- var hashes = Set()
-
+
for s in json as! [String] {
print(s)
if s.hasSuffix(".mp4") || s.hasSuffix(".m4v") {
@@ -121,39 +120,7 @@ class NetworkManager {
}
}
- func loadDir(root: String, completionHandler: ([MediaItem]) -> Void) -> Void {
- var itemsArray = [];
-
- let url = (root as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+")
- Alamofire.request(.GET, baseurl + "/service/dirs" + url)
- .responseString {
- (_, _, result) in
- let string = result.value!
- let f = string.componentsSeparatedByString("\r\n")
-
-
- let len = root.length
-
- var res = [MediaItem]()
-
- for s in f {
- if s.hasSuffix(".mp4") || s.hasSuffix(".m4v") {
- let l = s.length
- let name = NSURL(fileURLWithPath: s).lastPathComponent!
- let pathlen = l - len - name.length
- let path = (s as NSString).substringWithRange(NSMakeRange(len + 1, pathlen - 2))
- let i = MediaItem(name: name, path: path, root: root, type: ItemType.VIDEO)
- if !name.hasPrefix(".") {
- res.append(i)
- }
- }
- }
- completionHandler(res)
- }
- }
-
func listDirs(root: String, completionHandler: ([MediaItem], Bool) -> Void) -> Void {
- var itemsArray = [];
let len = root.characters.count
let url = (root as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+")
@@ -174,8 +141,8 @@ class NetworkManager {
// let (a,b) = j #
- var index1 = s.startIndex.advancedBy(len)
- var st = s.substringFromIndex(index1)
+ let index1 = s.startIndex.advancedBy(len)
+ let st = s.substringFromIndex(index1)
print(st)
@@ -186,7 +153,7 @@ class NetworkManager {
if s.lowercaseString.hasSuffix(".jpg") {
let l = s.length
let name = (s as NSString).lastPathComponent
- var pathlen = l - len - name.length
+ let pathlen = l - len - name.length
// if (pathlen > 1000) {
print(pathlen)
@@ -222,11 +189,6 @@ class NetworkManager {
}
}
- func playerURL(item: MediaItem) -> String {
- let enc = item.name.stringByReplacingOccurrencesOfString(" ", withString: "%20")
- return baseurl + "/service/stream" + item.rootSlash + item.pathSlash + enc
- }
-
func loadItems(item: MediaItem) {
if (item.type != ItemType.FOLDER && item.type != ItemType.DETAILS) {
return
@@ -259,7 +221,7 @@ class NetworkManager {
return
}
- let url = baseurl + "/service/listfiles" + item.thumbPath
+ let url = baseurl + "/service/listfiles" + item.snapshotDirPathForVideo
print(url)
@@ -276,13 +238,13 @@ class NetworkManager {
if p.containsString("_thumb.jpg") {
let ts = p[0 ..< p.length - 10]
- hashes[ts] = b as! String
+ hashes[ts] = b
} else {
let ende = p.length - 4
let ts = p[0 ..< ende]
if hashes[ts] == nil {
- hashes[ts] = b as! String
+ hashes[ts] = b
}
}
}
@@ -325,7 +287,7 @@ class NetworkManager {
return
}
- let url = baseurl + "/service/listfiles" + item.thumbPath
+ let url = baseurl + "/service/listfiles" + item.snapshotDirPathForVideo
print(url)
@@ -344,8 +306,8 @@ class NetworkManager {
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"
+ let p = c.snapshotDirPathForVideo + "\(ms).jpg"
+ let pt = c.snapshotDirPathForVideo + "\(ms)_thumb.jpg"
print(p)
if hashes.contains(pt) {
print("contained")
diff --git a/kplayer/detail/DetailViewController.swift b/kplayer/detail/DetailViewController.swift
index 250a9f3..7a36a54 100644
--- a/kplayer/detail/DetailViewController.swift
+++ b/kplayer/detail/DetailViewController.swift
@@ -26,41 +26,9 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
if collectionView != nil {
collectionView.reloadData()
}
- // Update the view.
- // self.configureView()
}
}
- func configureView() {
- // Update the user interface for the detail item.
- print(detailItem)
- if let detail: MediaItem = self.detailItem {
- print(detail)
- print(detail.children)
-
- if let label = self.detailDescriptionLabel {
- label.text = detail.name
- }
-
- if detail.children.count > 0 {
- let i = detail.children[0]
- let url = NetworkManager.sharedInstance.playerURL(i)
-
- print(url)
-
-// if moviePlayer == nil {
-// play(url)
-// }
- }
- }
-
- }
-
-
- override func loadView() {
- super.loadView()
- }
-
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
@@ -152,10 +120,6 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
print("Object: \(oid.hashValue) Index \(index) Item: \(i) Parent: \(i.parent) Detail: \(detailItem)")
-// if (count(detail.children) > 100) {
-// self.collectionView.reloadData()
-// }
-// else {
collectionView.performBatchUpdates({
var newItems = [NSIndexPath]()
var j = 0
@@ -164,7 +128,7 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
let path = NSIndexPath(forItem: 0, inSection: index)
self.collectionView.reloadItemsAtIndexPaths([path])
- for i in detail.children[index].children {
+ for _ in detail.children[index].children {
if j >= 1 {
newItems.append(NSIndexPath(forItem: j, inSection: index))
}
@@ -174,7 +138,6 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
}
return
}, completion: nil)
-// }
}
}
@@ -199,8 +162,8 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
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"
+ let p = c.snapshotDirPathForVideo + "\(ms).jpg"
+ let pt = c.snapshotDirPathForVideo + "\(ms)_thumb.jpg"
Alamofire.request(.GET, NetworkManager.sharedInstance.baseurl + "/service/deletethumb\(p)")
Alamofire.request(.GET, NetworkManager.sharedInstance.baseurl + "/service/deletethumb\(pt)")
}
@@ -212,18 +175,6 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
}
}
- override func viewDidAppear(animated: Bool) {
- super.viewDidAppear(animated)
-
-// self.configureView()
-
- }
-
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
-
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
if let detail: MediaItem = self.detailItem {
let cnt = detail.children.count
@@ -307,7 +258,6 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
if let json = response.value {
var im = [MediaItem]()
- var hashes = Dictionary()
for s in json as! [String] {
diff --git a/kplayer/detail/HeaderCell.swift b/kplayer/detail/HeaderCell.swift
index f3795c0..cd63eb7 100644
--- a/kplayer/detail/HeaderCell.swift
+++ b/kplayer/detail/HeaderCell.swift
@@ -5,7 +5,6 @@
import Foundation
import UIKit
-import Haneke
class HeaderCell: UICollectionViewCell {
var item: MediaItem?
diff --git a/kplayer/detail/ItemCell.swift b/kplayer/detail/ItemCell.swift
index c9043cb..9ef8ac1 100644
--- a/kplayer/detail/ItemCell.swift
+++ b/kplayer/detail/ItemCell.swift
@@ -16,10 +16,8 @@ class ItemCell: UICollectionViewCell {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
-
}
-
override init(frame: CGRect) {
super.init(frame: frame)
@@ -36,12 +34,11 @@ class ItemCell: UICollectionViewCell {
func setItem(item: MediaItem) {
self.item = item
- if let url = item.thumbUrl, nsurl = NSURL(string: item.thumbUrlAbsolute) {
+ if let _ = item.thumbUrl, nsurl = NSURL(string: item.thumbUrlAbsolute) {
image.hnk_setImageFromURL(nsurl, placeholder: defaultImage)
} else {
if let i = item.image {
image.image = i.scaleToSize(15 * 16, height: 15 * 9)
-// image.sizeToFit()
} else {
image.image = defaultImage
}
diff --git a/kplayer/detail/VideoPlayerController.swift b/kplayer/detail/VideoPlayerController.swift
index 6ae0534..b9c43ef 100644
--- a/kplayer/detail/VideoPlayerController.swift
+++ b/kplayer/detail/VideoPlayerController.swift
@@ -35,10 +35,6 @@ class VideoPlayerController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
- let url = NetworkManager.sharedInstance.playerURL(currentItem!)
-
- print(url)
-
barbutton = UIBarButtonItem(barButtonSystemItem: .Action, target: self, action: Selector("twoFingersTwoTaps"));
navigationItem.rightBarButtonItems = [barbutton!]
@@ -49,7 +45,10 @@ class VideoPlayerController: UIViewController {
navigationItem.leftBarButtonItems = [backButton!, playButton!, speedButton!, reviewButton!]
- play(url)
+ if let c = currentItem, url = c.playerURL {
+ print(url)
+ play(url)
+ }
}
func doEdit(sender: AnyObject) {
@@ -96,7 +95,7 @@ print("play")
completionHandler!()
}
- func play(url: String) {
+ func play(url: NSURL) {
self.moviePlayer = ALMoviePlayerController(frame: CGRectMake(0, 0, view.frame.width, view.frame.height))
if let player = self.moviePlayer {
@@ -115,21 +114,11 @@ print("play")
// player.controlStyle = MPMovieControlStyle.Embedded
player.movieSourceType = MPMovieSourceType.Streaming
player.repeatMode = MPMovieRepeatMode.One
- player.contentURL = NSURL(string: url)
-
- // player.play()
- // var timer = NSTimer.scheduledTimerWithTimeInterval(0.8, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
+ player.contentURL = url
-// view.autolayout(["controls": movieControls, "player": player.view],
-// constraints:
-// "H:|-[player]-|",
-// "H:|-[controls]-|",
-// "V:|-[player]-[controls(<=50)]-|" )
self.view.addSubview(player.view)
installGestures(player.view)
update()
-// view.addSubview(movieControls)
- // player.setFrame(view.frame)
}
}
@@ -193,9 +182,9 @@ print("play")
func update() {
if let player = self.moviePlayer {
- if !(player.duration > 0.0) { // player.loadState == MPMovieLoadState.Unknown || player.loadState == MPMovieLoadState.Stalled {
+ if !(player.duration > 0.0) {
print("again")
- var timer = NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
+ NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
return
}
@@ -221,7 +210,6 @@ print("play")
}
player.play()
- // player.fullscreen = true
}
}
@@ -288,9 +276,9 @@ print("play")
print("'Switched Type: \(currentItem!.type) Count: \(currentItem!.children.count) Index: \(index) Current: \(currentItem!.index)")
index = 0
- player.contentURL = NSURL(string: NetworkManager.sharedInstance.playerURL(currentItem!))
+ player.contentURL = currentItem!.playerURL
player.play()
- var timer = NSTimer.scheduledTimerWithTimeInterval(1.2, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
+ NSTimer.scheduledTimerWithTimeInterval(1.2, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
return
}
@@ -331,9 +319,9 @@ print("play")
currentItem = currentItem!.parent!.children[newIndex]
index = 0;
- player.contentURL = NSURL(string: NetworkManager.sharedInstance.playerURL(currentItem!))
+ player.contentURL = currentItem!.playerURL
player.play()
- var timer = NSTimer.scheduledTimerWithTimeInterval(1.2, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
+ NSTimer.scheduledTimerWithTimeInterval(1.2, target: self, selector: Selector("update"), userInfo: nil, repeats: false)
return
}
diff --git a/kplayer/master/MasterViewController.swift b/kplayer/master/MasterViewController.swift
index 78d613b..a841410 100644
--- a/kplayer/master/MasterViewController.swift
+++ b/kplayer/master/MasterViewController.swift
@@ -11,8 +11,6 @@ import CoreData
class MasterViewController: UITableViewController {
- var detailViewController: DetailViewController? = nil
-
var items = [MediaItem]()
var itemsMap = Dictionary()
@@ -25,8 +23,9 @@ class MasterViewController: UITableViewController {
}
func addItem(item: MediaItem) {
- let path = item.rootSlash + item.path
+ let path = item.encodedDir!
print(path)
+
var folder = itemsMap[path]
if folder == nil {
@@ -40,27 +39,8 @@ class MasterViewController: UITableViewController {
item.parent = folder
}
- func loadDirs(dir: String) {
- NetworkManager.sharedInstance.loadDirs(dir) {
- (g) in
- for f in g {
- self.addItem(f)
- }
- self.tableView.reloadData()
- }
- }
-
override func viewDidLoad() {
- super.viewDidLoad()
-
- // Do any additional setup after loading the view, typically from a nib.
-// self.navigationItem.leftBarButtonItem = self.editButtonItem()
-// let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "insertNewObject:")
-// self.navigationItem.rightBarButtonItem = addButton
- if let split = self.splitViewController {
- self.detailViewController = split.findChildController(DetailViewController.self)
- }
}
override func didReceiveMemoryWarning() {
@@ -75,11 +55,6 @@ class MasterViewController: UITableViewController {
let selectedItem = items[indexPath.row]
if (selectedItem.type == ItemType.DETAILS) {
-// if !selectedItem.loaded {
-// NetworkManager.sharedInstance.loadPicDirs(selectedItem.encodedDir!, completionHandler: weiter)
-// return
-// }
-
performSegueWithIdentifier("showDetail", sender: self)
return
}
@@ -99,57 +74,7 @@ class MasterViewController: UITableViewController {
if (selectedItem.type == ItemType.FOLDER) {
vc.navigationItem.title = selectedItem.name;
- if !selectedItem.loaded {
- let dir = selectedItem.encodedDir!
-
- let weiter: NetworkManager.Weiter = {
- (g) in
- for f in g {
- vc.addItem(f)
- }
- selectedItem.children = vc.items
- selectedItem.loaded = true
-
- var all: [MediaItem]?
-
- for f in selectedItem.children {
- print(f.path)
- if f.type == ItemType.FOLDER && f.path != "" {
- self.navigationController!.pushViewController(vc, animated: true)
- return
- }
- if f.type == ItemType.FOLDER && f.path == "" {
- all = f.children
- // break
- }
- }
-
- if all != nil {
- selectedItem.children = all!
- selectedItem.loaded = false
-
- for f in all! {
- f.loaded = false
- f.parent = selectedItem
- }
- }
-
- self.performSegueWithIdentifier("showDetail", sender: self)
- return
- }
-
- let p = selectedItem.parent!
- if p.type == ItemType.VIDEOROOT {
- // NetworkManager.sharedInstance.loadDirs(dir, completionHandler: weiter)
- }
- else if p.type == ItemType.DETAILS {
- // NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter)
- }
- else if p.type == ItemType.FOLDER {
-
- }
-
- } else {
+ if selectedItem.loaded {
vc.items = selectedItem.children
navigationController!.pushViewController(vc, animated: true)
return
@@ -170,7 +95,6 @@ class MasterViewController: UITableViewController {
for item in i {
if item.type != ItemType.FOLDER && supertype != ItemType.VIDEOROOT {
item.parent = newFolder
-// item.path = ""
newFolder.children.append(item)
}
else {
@@ -238,25 +162,15 @@ class MasterViewController: UITableViewController {
else {
NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter)
}
-
- // self.performSegueWithIdentifier("showDetail", sender: self)
return
}
- else {
-// var folders = [MediaItem]()
-// var folders = [MediaItem]()
-// for item in i {
-//
-// }
- }
+
vc.items = neu
vc.tableView.reloadData()
vc.navigationItem.title = selectedItem.name;
self.navigationController!.pushViewController(vc, animated: true)
})
}
-
-
}
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
diff --git a/kplayer/photo/MediaPhotoController.swift b/kplayer/photo/MediaPhotoController.swift
index 2f87e5c..691ac80 100644
--- a/kplayer/photo/MediaPhotoController.swift
+++ b/kplayer/photo/MediaPhotoController.swift
@@ -5,7 +5,6 @@
import Foundation
import Nimbus
-import Haneke
import Alamofire
class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollViewDataSource, NIPhotoScrubberViewDataSource {
@@ -95,7 +94,6 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
imageCache.removeAllObjects()
super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
}
func shot() {
@@ -158,14 +156,13 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
(request, response, result) in
var im = [MediaItem]()
- var hashes = Dictionary()
-
+
if let json = result.value {
for s in json as! [String] {
if s.hasSuffix(".jpg") {
let l = s.length
- let name = NSURL(fileURLWithPath: s as! String).lastPathComponent!
+ let name = NSURL(fileURLWithPath: s ).lastPathComponent!
var pathlen = l - len - name.length
// if (pathlen > 1000) {
@@ -251,8 +248,6 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
func photoAlbumScrollView(photoAlbumScrollView: NIPhotoAlbumScrollView!, photoAtIndex: Int, photoSize: UnsafeMutablePointer,
isLoading: UnsafeMutablePointer, originalPhotoDimensions: UnsafeMutablePointer) -> UIImage! {
- let c = items.count
- // println("Index: \(photoAtIndex) of \(c)")
let newItem = items[photoAtIndex]
let u1 = NSURL(string: newItem.imageUrlAbsolute)
let u2 = NSURL(string: newItem.thumbUrlAbsolute)
@@ -280,7 +275,7 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
image = imageCache.objectForKey(URL.absoluteString) as? UIImage
- if let i = image {
+ if image != nil {
size = NIPhotoScrollViewPhotoSizeThumbnail
isLoading[0] = false
} else {
@@ -302,7 +297,6 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
}
}, index: photoAtIndex)
op3.qualityOfService = NSQualityOfService.UserInteractive
-// requests.append(op3)
operationQueue.addOperation(op3)
}
@@ -367,7 +361,6 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
return nil
}
- let c = items.count
let newItem = items[thumbnailIndex]
var image: UIImage?
@@ -404,15 +397,3 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
}
}
-class MediaFetcher: NetworkFetcher {
- let bsession: NSURLSession?
-
- init(URL: NSURL, session: NSURLSession) {
- self.bsession = session
- super.init(URL: URL)
- }
-
- override public var session: NSURLSession {
- return bsession!
- }
-}
diff --git a/kplayer/util/DataLoadOperation.swift b/kplayer/util/DataLoadOperation.swift
index f881c21..433edd6 100644
--- a/kplayer/util/DataLoadOperation.swift
+++ b/kplayer/util/DataLoadOperation.swift
@@ -8,7 +8,7 @@ import Alamofire
import Darwin
class DataLoadOperation: NSOperation {
- public typealias Succeeder = (NSData) -> ()
+ internal typealias Succeeder = (NSData) -> ()
let imageURL: NSURL
let succeeder: Succeeder
diff --git a/kplayer/util/ImageLoadOperation.swift b/kplayer/util/ImageLoadOperation.swift
index 0b4b530..0ad8966 100644
--- a/kplayer/util/ImageLoadOperation.swift
+++ b/kplayer/util/ImageLoadOperation.swift
@@ -31,8 +31,6 @@ class ImageLoadOperation: NSOperation {
return
}
- // println("do load \(imageURL.absoluteString!)")
-
if let m = manager {
request = m.request(.GET, imageURL)
} else {
diff --git a/kplayer/util/LayoutTools.swift b/kplayer/util/LayoutTools.swift
index e2718ce..0f75228 100644
--- a/kplayer/util/LayoutTools.swift
+++ b/kplayer/util/LayoutTools.swift
@@ -48,7 +48,7 @@ public extension UIView {
let cn = String(v.dynamicType)
if cn == classname {
- return v as? UIView
+ return v
}
if result != nil {
diff --git a/kplayer/util/NetworkHelper.swift b/kplayer/util/NetworkHelper.swift
index 53b4ca3..20452f2 100644
--- a/kplayer/util/NetworkHelper.swift
+++ b/kplayer/util/NetworkHelper.swift
@@ -9,7 +9,7 @@ import Alamofire
func urlRequestWithComponents(urlString: String, parameters: NSDictionary) -> (URLRequestConvertible, NSData) {
// create url request to send
- var mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!)
+ let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!)
mutableURLRequest.HTTPMethod = Alamofire.Method.POST.rawValue
//let boundaryConstant = "myRandomBoundary12345"
let boundaryConstant = "NET-POST-boundary-\(arc4random())-\(arc4random())"
@@ -27,12 +27,12 @@ func urlRequestWithComponents(urlString: String, parameters: NSDictionary) -> (U
if value is NetData {
// add image
- var postData = value as! NetData
+ let postData = value as! NetData
//uploadData.appendData("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(postData.filename)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
// append content disposition
- var filenameClause = " filename=\"\(postData.filename)\""
+ let filenameClause = " filename=\"\(postData.filename)\""
let contentDispositionString = "Content-Disposition: form-data; name=\"\(key)\";\(filenameClause)\r\n"
let contentDispositionData = contentDispositionString.dataUsingEncoding(NSUTF8StringEncoding)
uploadData.appendData(contentDispositionData!)
diff --git a/kplayer/util/UploadOperation.swift b/kplayer/util/UploadOperation.swift
index b652344..bcbb310 100644
--- a/kplayer/util/UploadOperation.swift
+++ b/kplayer/util/UploadOperation.swift
@@ -23,7 +23,7 @@ class UploadOperation: NSOperation {
return
}
- var parameters = [
+ let parameters = [
"file": NetData(data: data, mimeType: MimeType.Json, filename: path),
"name": path
]
@@ -31,11 +31,10 @@ class UploadOperation: NSOperation {
print("PATH: \(path)")
let urlRequest = urlRequestWithComponents(baseUrl, parameters: parameters)
- let request = Alamofire.upload(urlRequest.0, data: urlRequest.1)
+ Alamofire.upload(urlRequest.0, data: urlRequest.1)
// success: todo set url to item
-
// .progress {
// (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
// print("progress : \(totalBytesWritten) / \(totalBytesExpectedToWrite)")
diff --git a/kplayer/util/ViewControllerExtensions.swift b/kplayer/util/ViewControllerExtensions.swift
index ba344a4..67fc035 100644
--- a/kplayer/util/ViewControllerExtensions.swift
+++ b/kplayer/util/ViewControllerExtensions.swift
@@ -35,11 +35,10 @@ public extension UIViewController {
// (XXX)
return result
}
- if let childControl = child as? UIViewController {
- if let found = childControl.findChildController(my) {
+ if let found = child.findChildController(my) {
return found;
}
- }
+
}
return nil
}
diff --git a/kplayer/util/alamoimage.swift b/kplayer/util/alamoimage.swift
deleted file mode 100644
index d9110f5..0000000
--- a/kplayer/util/alamoimage.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Created by Marco Schmickler on 22.06.15.
-// Copyright (c) 2015 Marco Schmickler. All rights reserved.
-//
-
-import Foundation
-import Alamofire
-
-extension Alamofire.Request {
-
-
-// class func imageResponseSerializer() -> Serializer {
-// return { request, response, data in
-// if data == nil || data!.length == 0 {
-// return (nil, nil)
-// }
-//
-// if let i = UIImage(data: data!) {
-//// let image = i.hnk_decompressedImage()
-//
-// return (i, nil)
-// }
-// return (nil, nil)
-// }
-// }
-//
-// func responseImage(completionHandler: (NSURLRequest, NSHTTPURLResponse?, UIImage?, NSError?) -> Void) -> Self {
-// return response(serializer: Request.imageResponseSerializer(), completionHandler: { (request, response, image, error) in
-// completionHandler(request, response, image as? UIImage, error)
-// })
-// }
-}
\ No newline at end of file