From f17b9585b763100557f8c50bad4905fcdc505e8b Mon Sep 17 00:00:00 2001 From: Marco Schmickler Date: Tue, 26 May 2015 17:13:52 +0200 Subject: [PATCH] init --- .idea/encodings.xml | 4 + .idea/kplayer.iml | 8 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/scopes/scope_settings.xml | 5 + .idea/vcs.xml | 6 + .idea/xcode.xml | 4 + Podfile | 7 + kplayer.xcodeproj/project.pbxproj | 115 +++++++++++ kplayer/AppDelegate.swift | 1 - kplayer/Base.lproj/Main.storyboard | 12 +- kplayer/DetailViewController.swift | 284 +++++++++++++++++++++++++++- kplayer/ItemCell.swift | 53 ++++++ kplayer/Kirschkeks-256x256.png | Bin 0 -> 130433 bytes kplayer/LayoutTools.swift | 45 +++++ kplayer/MasterViewController.swift | 147 +++----------- kplayer/VideoPlayerController.swift | 9 + kplayer/core/MediaItem.swift | 38 ++++ kplayer/core/NetworkManager.swift | 72 +++++++ 19 files changed, 692 insertions(+), 130 deletions(-) create mode 100644 .idea/encodings.xml create mode 100644 .idea/kplayer.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/scopes/scope_settings.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/xcode.xml create mode 100644 Podfile create mode 100644 kplayer/ItemCell.swift create mode 100644 kplayer/Kirschkeks-256x256.png create mode 100644 kplayer/LayoutTools.swift create mode 100644 kplayer/VideoPlayerController.swift create mode 100644 kplayer/core/MediaItem.swift create mode 100644 kplayer/core/NetworkManager.swift diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..d821048 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/kplayer.iml b/.idea/kplayer.iml new file mode 100644 index 0000000..cb345e8 --- /dev/null +++ b/.idea/kplayer.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8662aa9 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e96c31c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/xcode.xml b/.idea/xcode.xml new file mode 100644 index 0000000..341efb1 --- /dev/null +++ b/.idea/xcode.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..d1af914 --- /dev/null +++ b/Podfile @@ -0,0 +1,7 @@ +platform :ios, '8.3' + +source 'https://github.com/CocoaPods/Specs.git' +use_frameworks! + +# pod 'Player' +pod 'Alamofire', '~> 1.2' diff --git a/kplayer.xcodeproj/project.pbxproj b/kplayer.xcodeproj/project.pbxproj index 9fc6752..438cd7d 100644 --- a/kplayer.xcodeproj/project.pbxproj +++ b/kplayer.xcodeproj/project.pbxproj @@ -7,6 +7,14 @@ objects = { /* Begin PBXBuildFile section */ + 1C736261CBA1D13D16DCBAFB /* VideoPlayerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7366EF59D75216EBC0D3F0 /* VideoPlayerController.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 */; }; + 1C73641627BE29D9FA819F3C /* LayoutTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C73649CEA7BDD2AC1496F76 /* LayoutTools.swift */; }; + 1C736503B656C999E5E12081 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7365B06FA66294E99AC2D3 /* NetworkManager.swift */; }; + 1C736C90DB50C4FDED266C3D /* ItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7362C647AEBF03F5FD9FEB /* ItemCell.swift */; }; + 1C736FB92B19FE17E4357C85 /* MediaItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C73688DAB88F9360FB62A49 /* MediaItem.swift */; }; + A5D637AE4588AAB5DC1CBC6B /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 127AC1F28342F9AAE3CEC5C2 /* Pods.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; C98AF5D51B124D6A00D196CC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C98AF5D41B124D6A00D196CC /* AppDelegate.swift */; }; C98AF5D81B124D6A00D196CC /* kplayer.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = C98AF5D61B124D6A00D196CC /* kplayer.xcdatamodeld */; }; C98AF5DA1B124D6A00D196CC /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C98AF5D91B124D6A00D196CC /* MasterViewController.swift */; }; @@ -28,6 +36,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 127AC1F28342F9AAE3CEC5C2 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C7362C647AEBF03F5FD9FEB /* ItemCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCell.swift; sourceTree = ""; }; + 1C73649CEA7BDD2AC1496F76 /* LayoutTools.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LayoutTools.swift; sourceTree = ""; }; + 1C7365B06FA66294E99AC2D3 /* NetworkManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; + 1C7366EF59D75216EBC0D3F0 /* VideoPlayerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerController.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 = ""; }; + 5C6CBA548F885BF342F594EA /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + A170BFB886D61D57F7009BFC /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; C98AF5CF1B124D6A00D196CC /* kplayer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = kplayer.app; sourceTree = BUILT_PRODUCTS_DIR; }; C98AF5D31B124D6A00D196CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C98AF5D41B124D6A00D196CC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -47,6 +65,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A5D637AE4588AAB5DC1CBC6B /* Pods.framework in Frameworks */, + 1C73635138BBD2BB480A308F /* MediaPlayer.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -60,12 +80,41 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1C736DC8C3AFB991541A2079 /* core */ = { + isa = PBXGroup; + children = ( + 1C7365B06FA66294E99AC2D3 /* NetworkManager.swift */, + 1C73688DAB88F9360FB62A49 /* MediaItem.swift */, + ); + path = core; + sourceTree = ""; + }; + 8CB608B13A2BDFA9D708982B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 127AC1F28342F9AAE3CEC5C2 /* Pods.framework */, + 1C736777456388CA571DA17B /* MediaPlayer.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8EB26707CC8BD3E10F328A9E /* Pods */ = { + isa = PBXGroup; + children = ( + 5C6CBA548F885BF342F594EA /* Pods.debug.xcconfig */, + A170BFB886D61D57F7009BFC /* Pods.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; C98AF5C61B124D6A00D196CC = { isa = PBXGroup; children = ( C98AF5D11B124D6A00D196CC /* kplayer */, C98AF5EC1B124D6A00D196CC /* kplayerTests */, C98AF5D01B124D6A00D196CC /* Products */, + 8EB26707CC8BD3E10F328A9E /* Pods */, + 8CB608B13A2BDFA9D708982B /* Frameworks */, ); sourceTree = ""; }; @@ -89,6 +138,11 @@ C98AF5E21B124D6A00D196CC /* LaunchScreen.xib */, C98AF5D61B124D6A00D196CC /* kplayer.xcdatamodeld */, C98AF5D21B124D6A00D196CC /* Supporting Files */, + 1C736DC8C3AFB991541A2079 /* core */, + 1C7362C647AEBF03F5FD9FEB /* ItemCell.swift */, + 1C73649CEA7BDD2AC1496F76 /* LayoutTools.swift */, + 1C7368DC7EF11A553145E169 /* Kirschkeks-256x256.png */, + 1C7366EF59D75216EBC0D3F0 /* VideoPlayerController.swift */, ); path = kplayer; sourceTree = ""; @@ -125,9 +179,12 @@ isa = PBXNativeTarget; buildConfigurationList = C98AF5F31B124D6A00D196CC /* Build configuration list for PBXNativeTarget "kplayer" */; buildPhases = ( + FA5E42A873B9445C28CCC025 /* Check Pods Manifest.lock */, C98AF5CB1B124D6A00D196CC /* Sources */, C98AF5CC1B124D6A00D196CC /* Frameworks */, C98AF5CD1B124D6A00D196CC /* Resources */, + 81E453B289EA9615E1980098 /* Embed Pods Frameworks */, + F554AE493C60519505E761A6 /* Copy Pods Resources */, ); buildRules = ( ); @@ -201,6 +258,7 @@ C98AF5DF1B124D6A00D196CC /* Main.storyboard in Resources */, C98AF5E41B124D6A00D196CC /* LaunchScreen.xib in Resources */, C98AF5E11B124D6A00D196CC /* Images.xcassets in Resources */, + 1C7363D9DC8F9D1F866DE935 /* Kirschkeks-256x256.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -213,6 +271,54 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 81E453B289EA9615E1980098 /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F554AE493C60519505E761A6 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + FA5E42A873B9445C28CCC025 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ C98AF5CB1B124D6A00D196CC /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -222,6 +328,11 @@ C98AF5D51B124D6A00D196CC /* AppDelegate.swift in Sources */, C98AF5DA1B124D6A00D196CC /* MasterViewController.swift in Sources */, C98AF5DC1B124D6A00D196CC /* DetailViewController.swift in Sources */, + 1C736503B656C999E5E12081 /* NetworkManager.swift in Sources */, + 1C736FB92B19FE17E4357C85 /* MediaItem.swift in Sources */, + 1C736C90DB50C4FDED266C3D /* ItemCell.swift in Sources */, + 1C73641627BE29D9FA819F3C /* LayoutTools.swift in Sources */, + 1C736261CBA1D13D16DCBAFB /* VideoPlayerController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -348,6 +459,7 @@ }; C98AF5F41B124D6A00D196CC /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 5C6CBA548F885BF342F594EA /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = kplayer/Info.plist; @@ -358,6 +470,7 @@ }; C98AF5F51B124D6A00D196CC /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A170BFB886D61D57F7009BFC /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = kplayer/Info.plist; @@ -419,6 +532,7 @@ C98AF5F51B124D6A00D196CC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; C98AF5F61B124D6A00D196CC /* Build configuration list for PBXNativeTarget "kplayerTests" */ = { isa = XCConfigurationList; @@ -427,6 +541,7 @@ C98AF5F81B124D6A00D196CC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ diff --git a/kplayer/AppDelegate.swift b/kplayer/AppDelegate.swift index a76d230..1be94f6 100644 --- a/kplayer/AppDelegate.swift +++ b/kplayer/AppDelegate.swift @@ -24,7 +24,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController let controller = masterNavigationController.topViewController as! MasterViewController - controller.managedObjectContext = self.managedObjectContext return true } diff --git a/kplayer/Base.lproj/Main.storyboard b/kplayer/Base.lproj/Main.storyboard index b3b5a78..91a3dfb 100644 --- a/kplayer/Base.lproj/Main.storyboard +++ b/kplayer/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -22,7 +22,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -73,7 +73,7 @@ - + @@ -90,7 +90,7 @@ - + diff --git a/kplayer/DetailViewController.swift b/kplayer/DetailViewController.swift index 09f284f..cbdbcd0 100644 --- a/kplayer/DetailViewController.swift +++ b/kplayer/DetailViewController.swift @@ -7,32 +7,164 @@ // import UIKit +import MediaPlayer -class DetailViewController: UIViewController { +class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource { @IBOutlet weak var detailDescriptionLabel: UILabel! + var moviePlayer: MPMoviePlayerController? - var detailItem: AnyObject? { + var collectionView: UICollectionView! + + var detailItem: MediaItem? { didSet { + println(detailItem!.children) + if collectionView != nil { + collectionView.reloadData() + } // Update the view. - self.configureView() + // self.configureView() } } + var currentItem: MediaItem? + func configureView() { // Update the user interface for the detail item. - if let detail: AnyObject = self.detailItem { + println(detailItem) + if let detail: MediaItem = self.detailItem { + println(detail) + println(detail.children) + if let label = self.detailDescriptionLabel { - label.text = detail.valueForKey("timeStamp")!.description + label.text = detail.name + } + + if count(detail.children) > 0 { + let i = detail.children[0] + var url = NetworkManager.sharedInstance.playerURL(i) + + println(url) + +// if moviePlayer == nil { + play(url) +// } } } + + } + + func play(url: String) { + self.moviePlayer = MPMoviePlayerController() + if let player = self.moviePlayer { + NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("exitedFullscreen"), name: MPMoviePlayerDidExitFullscreenNotification, object: nil); + NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("enteredFullscreen"), name: MPMoviePlayerDidEnterFullscreenNotification, object: nil); + NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("showThumbnail:"), name: MPMoviePlayerThumbnailImageRequestDidFinishNotification, object: nil); + + player.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height) + player.view.sizeToFit() + player.scalingMode = MPMovieScalingMode.AspectFit + player.controlStyle = MPMovieControlStyle.Embedded + player.movieSourceType = MPMovieSourceType.Streaming + player.repeatMode = MPMovieRepeatMode.One + player.contentURL = NSURL(string: url) + player.play() + + var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("update"), userInfo: nil, repeats: false) + + + self.view.addSubview(player.view) + } + } + + func showThumbnail(note: NSNotification) { + let userInfo = note.userInfo! as NSDictionary + let thumbnail = userInfo.objectForKey(MPMoviePlayerThumbnailImageKey) as! UIImage + let time = userInfo.objectForKey(MPMoviePlayerThumbnailTimeKey) as! NSTimeInterval + + let newItem = MediaItem(name: currentItem!.name, path: currentItem!.path, root: currentItem!.root, type: ItemType.SNAPSHOT) + newItem.image = thumbnail + newItem.time = time + newItem.parent = currentItem! + currentItem!.children.append(newItem) + + println (newItem.time) + + } + + func update() { + if let player = self.moviePlayer { + if let t = currentItem!.time { + player.currentPlaybackTime = t + } + else { + println(player.duration) + player.currentPlaybackTime = player.duration / 2 + } + + if currentItem!.type == ItemType.SNAPSHOT { + currentItem = currentItem!.parent + } + + player.fullscreen = true + } + } + + func enteredFullscreen() { + let mp = UIApplication.sharedApplication().keyWindow; + if let moviePlayerContainer = recursiveSearchForViewWithName(mp!, classname: "MPVideoContainerView") { + if (moviePlayerContainer.gestureRecognizers != nil) { + return; + } + installGestures(moviePlayerContainer) + } + } + + func exitedFullscreen() { + moviePlayer!.view.removeFromSuperview(); + moviePlayer = nil; + NSNotificationCenter.defaultCenter().removeObserver(self); + + collectionView.reloadData() + collectionView.collectionViewLayout.invalidateLayout() + } + + override func loadView() { + super.loadView() + + } override func viewDidLoad() { super.viewDidLoad() + + let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() + + layout.sectionInset = UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2) + layout.itemSize = CGSize(width: 14 * 16 , height: 14 * 10) + layout.headerReferenceSize = CGSize(width: 50, height: 50) + collectionView = UICollectionView(frame: view.frame, collectionViewLayout: layout) + + collectionView.dataSource = self + collectionView.delegate = self + collectionView.registerClass(ItemCell.self, forCellWithReuseIdentifier: "Cell") + collectionView.backgroundColor = UIColor.greenColor() + collectionView.registerClass(ItemCell.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "HeaderView"); + + view.addSubview(collectionView) +// view.autoresizesSubviews = true +// collectionView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight // Do any additional setup after loading the view, typically from a nib. - self.configureView() + + collectionView.reloadData() + } + + override func viewDidAppear(animated: Bool) { + super.viewDidAppear(animated) + +// self.configureView() + } override func didReceiveMemoryWarning() { @@ -40,6 +172,146 @@ class DetailViewController: UIViewController { // Dispose of any resources that can be recreated. } + func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { + if let detail: MediaItem = self.detailItem { + let cnt = count(detail.children) + println(cnt) + return cnt + } + return 0 + } + + func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + if let detail: MediaItem = self.detailItem { + return count(detail.children[section].children) + 1 + } + return 0 + } + + func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! ItemCell + + if let detail: MediaItem = self.detailItem { + let items = detail.children[indexPath.section] + if indexPath.item >= count(items.children) { + cell.setItem(items) + } else { + let item = items.children[indexPath.item] + cell.setItem(item) + } + } + cell.backgroundColor = UIColor.blueColor() + return cell + } + + func collectionView(collectionView: UICollectionView, + viewForSupplementaryElementOfKind kind: String, + atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { + switch kind { + case UICollectionElementKindSectionHeader: + let headerView = + collectionView.dequeueReusableSupplementaryViewOfKind(kind, + withReuseIdentifier: "HeaderView", + forIndexPath: indexPath) + as! ItemCell + let items = detailItem!.children[indexPath.section] + + println("sec \(indexPath.section) " + items.name) + + headerView.label.text = items.name + headerView.backgroundColor = UIColor.yellowColor() + return headerView + default: + assert(false, "Unexpected element kind") + } + } + + func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { + if let detail: MediaItem = self.detailItem { + var items = detail.children[indexPath.section] + if indexPath.item >= count(items.children) { + println(items.name) + } else { + items = items.children[indexPath.item] + println(items.name) + } + + currentItem = items + + var url = NetworkManager.sharedInstance.playerURL(items) + + println(url) + + play(url) + + } + } + func installGestures(moviePlayer: UIView) { + let twoFingersTwoTaps = UITapGestureRecognizer(target: self, action: "twoFingersTwoTaps") + twoFingersTwoTaps.numberOfTapsRequired = 2 + twoFingersTwoTaps.numberOfTouchesRequired = 2 + moviePlayer.addGestureRecognizer(twoFingersTwoTaps) + + let sR = UISwipeGestureRecognizer(target: self, action: "swipeRight") + sR.direction = UISwipeGestureRecognizerDirection.Right + sR.numberOfTouchesRequired = 1 + moviePlayer.addGestureRecognizer(sR) + + let sL = UISwipeGestureRecognizer(target: self, action: "swipeLeft") + sL.direction = UISwipeGestureRecognizerDirection.Left + sL.numberOfTouchesRequired = 1 + moviePlayer.addGestureRecognizer(sL) + + let sR2 = UISwipeGestureRecognizer(target: self, action: "swipeDown") + sR2.direction = UISwipeGestureRecognizerDirection.Down + sR2.numberOfTouchesRequired = 1 + moviePlayer.addGestureRecognizer(sR2) + + } + + func swipeRight() { + println("r") + if let player = self.moviePlayer { + player.currentPlaybackTime = player.currentPlaybackTime + 30.0 + } + } + + func swipeDown() { + println("r") + if let player = self.moviePlayer { + player.currentPlaybackTime = player.currentPlaybackTime + 10.0 + } + } + + func swipeLeft() { + println("l") + if let player = self.moviePlayer { + player.currentPlaybackTime = player.currentPlaybackTime - 30.0 + } + } + + func twoFingersTwoTaps() { + println("tap") + moviePlayer!.requestThumbnailImagesAtTimes([moviePlayer!.currentPlaybackTime], + timeOption:MPMovieTimeOption.NearestKeyFrame); + } + + + func recursiveSearchForViewWithName(view: UIView, classname: String) -> UIView? { + for v in view.subviews { + var result = recursiveSearchForViewWithName(v as! UIView, classname: classname) + let cn = toString(v.dynamicType) + + if cn == classname { + return v as! UIView + } + + if result != nil { + return result + } + } + return nil + } } diff --git a/kplayer/ItemCell.swift b/kplayer/ItemCell.swift new file mode 100644 index 0000000..e38b99d --- /dev/null +++ b/kplayer/ItemCell.swift @@ -0,0 +1,53 @@ +// +// Created by Marco Schmickler on 25.05.15. +// Copyright (c) 2015 Marco Schmickler. All rights reserved. +// + +import Foundation +import UIKit + +class ItemCell: UICollectionViewCell { + var item: MediaItem? + + var label: UILabel! + var image: UIImageView! + + required init(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + + } + + + override init(frame: CGRect) { + + super.init(frame: frame) + + label = UILabel(frame: frame) + + image = UIImageView() + image.layer.borderWidth = 2.0; + + autolayout(["label": label, "imag": image], + constraints: + "H:|-5-[label]-5-|", + "H:|-5-[imag]-5-|", + "V:|-5-[label(<=50)]-5-[imag]-5-|" ) + } + + func setItem(item: MediaItem) { + self.item = item + + label.text = item.name + + if let i = item.image { + println (i) + image.image = i + image.sizeToFit() + } + else { + image.image = UIImage(named: "Kirschkeks-256x256.png") + } + + } +} diff --git a/kplayer/Kirschkeks-256x256.png b/kplayer/Kirschkeks-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..180be0b530a79ba9e5dae80bf50ef016be47fab6 GIT binary patch literal 130433 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 z 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 KMNUMnLSTY-;wUx% literal 0 HcmV?d00001 diff --git a/kplayer/LayoutTools.swift b/kplayer/LayoutTools.swift new file mode 100644 index 0000000..9efe279 --- /dev/null +++ b/kplayer/LayoutTools.swift @@ -0,0 +1,45 @@ +// +// Created by Marco Schmickler on 25.05.15. +// Copyright (c) 2015 Marco Schmickler. All rights reserved. +// + +import Foundation +import UIKit + +public extension UIView { + + func autolayout(views: [String:UIView!], constraints: Any...) { + autolay(views, constraints:constraints) + } + + func autolay(views: [String:UIView!], constraints: [Any]) { + var index = 0; + + for value in views.values { + let vv: UIView = value + addSubview(vv) + vv.setTranslatesAutoresizingMaskIntoConstraints(false) + } + + while index < constraints.count { + let c = constraints[index] + if c is String { + if index + 1 < constraints.count && !(constraints[index + 1] is String) { + index++ + let constr: NSArray = NSLayoutConstraint.constraintsWithVisualFormat(c as! String, + options: constraints[index] as! NSLayoutFormatOptions, + metrics: nil, + views: views) + addConstraints(constr as [AnyObject]) + } else { + let constr: NSArray = NSLayoutConstraint.constraintsWithVisualFormat(c as! String, + options: NSLayoutFormatOptions(0), metrics: nil, views: views) + addConstraints(constr as [AnyObject]) + } + } + index++ + } + } + + +} \ No newline at end of file diff --git a/kplayer/MasterViewController.swift b/kplayer/MasterViewController.swift index fcc2deb..6192f33 100644 --- a/kplayer/MasterViewController.swift +++ b/kplayer/MasterViewController.swift @@ -9,11 +9,11 @@ import UIKit import CoreData -class MasterViewController: UITableViewController, NSFetchedResultsControllerDelegate { +class MasterViewController: UITableViewController { var detailViewController: DetailViewController? = nil - var managedObjectContext: NSManagedObjectContext? = nil + var items = [MediaItem]() override func awakeFromNib() { super.awakeFromNib() @@ -25,6 +25,28 @@ class MasterViewController: UITableViewController, NSFetchedResultsControllerDel override func viewDidLoad() { super.viewDidLoad() + + NetworkManager.sharedInstance.loadDirs("/srv/samba/ren/knk_archiv4") { (g) in + var d = Dictionary() + + for f in g { + var p = d[f.path] + + if p == nil { + p = MediaItem(name: "", path: f.path, root: f.root, type: ItemType.FOLDER) + d[f.path] = p! + println(p) + } + + p!.children.append(f) + f.parent = p! + } + + self.items = Array(d.values) + + self.tableView.reloadData() + } + // Do any additional setup after loading the view, typically from a nib. self.navigationItem.leftBarButtonItem = self.editButtonItem() @@ -42,22 +64,6 @@ class MasterViewController: UITableViewController, NSFetchedResultsControllerDel } func insertNewObject(sender: AnyObject) { - let context = self.fetchedResultsController.managedObjectContext - let entity = self.fetchedResultsController.fetchRequest.entity! - let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(entity.name!, inManagedObjectContext: context) as! NSManagedObject - - // If appropriate, configure the new managed object. - // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template. - newManagedObject.setValue(NSDate(), forKey: "timeStamp") - - // Save the context. - var error: NSError? = nil - if !context.save(&error) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - //println("Unresolved error \(error), \(error.userInfo)") - abort() - } } // MARK: - Segues @@ -65,7 +71,7 @@ class MasterViewController: UITableViewController, NSFetchedResultsControllerDel override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow() { - let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject + let object = items[indexPath.row] let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController controller.detailItem = object controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() @@ -77,12 +83,11 @@ class MasterViewController: UITableViewController, NSFetchedResultsControllerDel // MARK: - Table View override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - return self.fetchedResultsController.sections?.count ?? 0 + return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - let sectionInfo = self.fetchedResultsController.sections![section] as! NSFetchedResultsSectionInfo - return sectionInfo.numberOfObjects + return count(items) } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { @@ -93,111 +98,19 @@ class MasterViewController: UITableViewController, NSFetchedResultsControllerDel override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { // Return false if you do not want the specified item to be editable. - return true + return false } override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { - let context = self.fetchedResultsController.managedObjectContext - context.deleteObject(self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject) - - var error: NSError? = nil - if !context.save(&error) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - //println("Unresolved error \(error), \(error.userInfo)") - abort() - } } } func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) { - let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject - cell.textLabel!.text = object.valueForKey("timeStamp")!.description - } - - // MARK: - Fetched results controller - - var fetchedResultsController: NSFetchedResultsController { - if _fetchedResultsController != nil { - return _fetchedResultsController! - } - - let fetchRequest = NSFetchRequest() - // Edit the entity name as appropriate. - let entity = NSEntityDescription.entityForName("Event", inManagedObjectContext: self.managedObjectContext!) - fetchRequest.entity = entity - - // Set the batch size to a suitable number. - fetchRequest.fetchBatchSize = 20 - - // Edit the sort key as appropriate. - let sortDescriptor = NSSortDescriptor(key: "timeStamp", ascending: false) - let sortDescriptors = [sortDescriptor] - - fetchRequest.sortDescriptors = [sortDescriptor] - - // Edit the section name key path and cache name if appropriate. - // nil for section name key path means "no sections". - let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: "Master") - aFetchedResultsController.delegate = self - _fetchedResultsController = aFetchedResultsController - - var error: NSError? = nil - if !_fetchedResultsController!.performFetch(&error) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - //println("Unresolved error \(error), \(error.userInfo)") - abort() - } - - return _fetchedResultsController! - } - var _fetchedResultsController: NSFetchedResultsController? = nil - - func controllerWillChangeContent(controller: NSFetchedResultsController) { - self.tableView.beginUpdates() - } - - func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { - switch type { - case .Insert: - self.tableView.insertSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Fade) - case .Delete: - self.tableView.deleteSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Fade) - default: - return - } - } - - func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { - switch type { - case .Insert: - tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade) - case .Delete: - tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade) - case .Update: - self.configureCell(tableView.cellForRowAtIndexPath(indexPath!)!, atIndexPath: indexPath!) - case .Move: - tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade) - tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade) - default: - return - } - } - - func controllerDidChangeContent(controller: NSFetchedResultsController) { - self.tableView.endUpdates() + let object = items[indexPath.row] + cell.textLabel!.text = object.path } - /* - // Implementing the above methods to update the table view in response to individual changes may have performance implications if a large number of changes are made simultaneously. If this proves to be an issue, you can instead just implement controllerDidChangeContent: which notifies the delegate that all section and object changes have been processed. - - func controllerDidChangeContent(controller: NSFetchedResultsController) { - // In the simplest, most efficient, case, reload the table view. - self.tableView.reloadData() - } - */ } diff --git a/kplayer/VideoPlayerController.swift b/kplayer/VideoPlayerController.swift new file mode 100644 index 0000000..5cd3e88 --- /dev/null +++ b/kplayer/VideoPlayerController.swift @@ -0,0 +1,9 @@ +// +// Created by Marco Schmickler on 26.05.15. +// Copyright (c) 2015 Marco Schmickler. All rights reserved. +// + +import Foundation + +class VideoPlayerController { +} diff --git a/kplayer/core/MediaItem.swift b/kplayer/core/MediaItem.swift new file mode 100644 index 0000000..d85044d --- /dev/null +++ b/kplayer/core/MediaItem.swift @@ -0,0 +1,38 @@ +// +// Created by Marco Schmickler on 25.05.15. +// Copyright (c) 2015 Marco Schmickler. All rights reserved. +// + +import Foundation +import UIKit + +enum ItemType { + case FOLDER + case VIDEO + case SNAPSHOT +} + +class MediaItem : DebugPrintable { + var name : String + var path : String + var root: String + + var image: UIImage? + var time: NSTimeInterval? + + var children: [MediaItem] + var parent: MediaItem? + var type: ItemType + + init(name: String, path: String, root: String, type: ItemType) { + self.name = name + self.path = path + self.root = root + self.type = type + children = [MediaItem]() + } + + var debugDescription: String { + return root + " " + path + " " + name + } +} diff --git a/kplayer/core/NetworkManager.swift b/kplayer/core/NetworkManager.swift new file mode 100644 index 0000000..477a910 --- /dev/null +++ b/kplayer/core/NetworkManager.swift @@ -0,0 +1,72 @@ +// +// Created by Marco Schmickler on 24.05.15. +// Copyright (c) 2015 Marco Schmickler. All rights reserved. +// + +import Foundation +import Alamofire + +class NetworkManager { + static let sharedInstance = NetworkManager() + + let baseurl = "http://linkstation/tomcat/media" + + func loadRoots() -> AnyObject { + var itemsArray = []; + + Alamofire.request(.GET, baseurl + "/service/roots") + .responseString { + (_, _, string, _) in + let f = split(string!) { + $0 == "\r\n" + } + println(string) + println(f) + } + +// .response { (request, response, data, error) in +// println(request) +// println(response) +// +// var r = (response as NSString).componentsSeparatedByString("\r\n") +// +// println(error) +// } + + return itemsArray; + } + + func loadDirs(root: String, completionHandler: ([MediaItem]) -> Void) -> Void { + var itemsArray = []; + + Alamofire.request(.GET, baseurl + "/service/dirs" + root) + .responseString { + (_, _, string, _) in + let f = split(string!) { + $0 == "\r\n" + } + + let len = count(root) + + var res = [MediaItem]() + + for s in f { + if (s.hasSuffix(".mp4")) { + let l = count(s) + let name = (s as NSString).lastPathComponent + let pathlen = l - len - count(name) + 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 playerURL(item: MediaItem) -> String { + return baseurl + "/service/stream" + item.root + "/" + item.path + "/" + item.name + } +}