Browse Source

Slideshow

master
Marco Schmickler 7 years ago
parent
commit
ed9220d061
  1. 20
      kplayer/AppDelegate.swift
  2. 18
      kplayer/core/MediaItem.swift
  3. 7
      kplayer/core/NetworkManager.swift
  4. 20
      kplayer/detail/DetailViewController.swift
  5. 4
      kplayer/master/MasterViewController.swift
  6. 16
      kplayer/photo/MediaPhotoController.swift

20
kplayer/AppDelegate.swift

@ -24,7 +24,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele
let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController let masterNavigationController = splitViewController.viewControllers[0] as! UINavigationController
let controller = masterNavigationController.topViewController as! MasterViewController let controller = masterNavigationController.topViewController as! MasterViewController
let web = MediaItem(name: "web", path:"", root: "/srv/samba/ren/web", type: ItemType.DETAILS)
let web = MediaItem(name: "web", path:"", root: "/srv/samba/ren/web", type: ItemType.WEBROOT)
let google = MediaItem(name: "google", path:"", root: "www.google.de", type: ItemType.FOLDER) let google = MediaItem(name: "google", path:"", root: "www.google.de", type: ItemType.FOLDER)
let a = MediaItem(name: "google", path:"", root: "www.google.de", type: ItemType.WEB) let a = MediaItem(name: "google", path:"", root: "www.google.de", type: ItemType.WEB)
google.children = [ a ] google.children = [ a ]
@ -41,14 +42,15 @@ google
MediaItem(name: "knk_archiv3", path:"", root: "/srv/samba/ren/knk_archiv3", type: ItemType.VIDEOROOT), MediaItem(name: "knk_archiv3", path:"", root: "/srv/samba/ren/knk_archiv3", type: ItemType.VIDEOROOT),
MediaItem(name: "knk_archiv4", path:"", root: "/srv/samba/ren/knk_archiv4", type: ItemType.VIDEOROOT), MediaItem(name: "knk_archiv4", path:"", root: "/srv/samba/ren/knk_archiv4", type: ItemType.VIDEOROOT),
MediaItem(name: "fetish", path:"", root: "/srv/samba/ren/fetish", type: ItemType.VIDEOROOT), MediaItem(name: "fetish", path:"", root: "/srv/samba/ren/fetish", type: ItemType.VIDEOROOT),
MediaItem(name: "fjoy", path:"", root: "/srv/samba/ren/fjoy", type: ItemType.ROOT),
MediaItem(name: "heg", path:"", root: "/srv/samba/ren/heg", type: ItemType.ROOT),
MediaItem(name: "ten", path:"", root: "/srv/samba/ren/ten", type: ItemType.ROOT),
MediaItem(name: "leg", path:"", root: "/srv/samba/ren/leg", type: ItemType.ROOT),
MediaItem(name: "ang", path:"", root: "/srv/samba/ren/ang", type: ItemType.ROOT),
MediaItem(name: "series", path:"", root: "/srv/samba/ren/series", type: ItemType.ROOT),
MediaItem(name: "bm", path:"", root: "/srv/samba/ren/bm", type: ItemType.ROOT),
MediaItem(name: "medieval", path:"", root: "/srv/samba/ren/medieval", type: ItemType.ROOT),
MediaItem(name: "fjoy", path:"", root: "/srv/samba/ren/fjoy", type: ItemType.PICROOT),
MediaItem(name: "heg", path:"", root: "/srv/samba/ren/heg", type: ItemType.PICROOT),
MediaItem(name: "hegvid", path:"", root: "/srv/samba/ren/heg/videos", type: ItemType.VIDEOROOT),
MediaItem(name: "ten", path:"", root: "/srv/samba/ren/ten", type: ItemType.PICROOT),
MediaItem(name: "leg", path:"", root: "/srv/samba/ren/leg", type: ItemType.PICROOT),
MediaItem(name: "ang", path:"", root: "/srv/samba/ren/ang", type: ItemType.PICROOT),
MediaItem(name: "series", path:"", root: "/srv/samba/ren/series", type: ItemType.PICROOT),
MediaItem(name: "bm", path:"", root: "/srv/samba/ren/bm", type: ItemType.PICROOT),
MediaItem(name: "medieval", path:"", root: "/srv/samba/ren/medieval", type: ItemType.PICROOT),
web, web,
] ]

18
kplayer/core/MediaItem.swift

@ -10,13 +10,16 @@ enum ItemType: String, CustomStringConvertible {
/** /**
Repräsentiert eine Wurzel, in der nur Bilder angezeigt werden. Repräsentiert eine Wurzel, in der nur Bilder angezeigt werden.
*/ */
case ROOT = "root"
case PICROOT = "root"
/** /**
Repräsentiert eine Wurzel, in der nur Videos angezeigt werden. Repräsentiert eine Wurzel, in der nur Videos angezeigt werden.
*/ */
case VIDEOROOT = "videoroot" case VIDEOROOT = "videoroot"
/**
Repräsentiert eine Wurzel, in der nur Webseiten angezeigt werden.
*/
case WEBROOT = "webroot" case WEBROOT = "webroot"
/** /**
@ -29,6 +32,9 @@ enum ItemType: String, CustomStringConvertible {
*/ */
case VIDEO = "video" case VIDEO = "video"
/**
Web-Browser
*/
case WEB = "web" case WEB = "web"
/** /**
@ -194,15 +200,19 @@ class MediaItem: CustomDebugStringConvertible {
}) })
} }
func isWeb() -> Bool {
return superRoot().type == ItemType.WEBROOT
}
func isPic() -> Bool { func isPic() -> Bool {
return superRoot().type == ItemType.ROOT
return superRoot().type == ItemType.PICROOT && type == ItemType.PICS
} }
func isVideo() -> Bool { func isVideo() -> Bool {
return superRoot().type == ItemType.VIDEOROOT
return superRoot().type == ItemType.VIDEOROOT && (type == ItemType.VIDEO || type == ItemType.SNAPSHOT)
} }
func isFolder() -> Bool { func isFolder() -> Bool {
return type == ItemType.ROOT || type == ItemType.VIDEOROOT || type == ItemType.FOLDER
return type == ItemType.PICROOT || type == ItemType.VIDEOROOT || type == ItemType.FOLDER || type == ItemType.WEBROOT
} }
} }

7
kplayer/core/NetworkManager.swift

@ -24,7 +24,7 @@ class NetworkManager {
internal typealias Weiter = ([MediaItem]) -> Void internal typealias Weiter = ([MediaItem]) -> Void
func loadDirs(_ rootParam: String, completionHandler: @escaping Weiter) -> Void {
func loadVideoDirs(_ rootParam: String, completionHandler: @escaping Weiter) -> Void {
var root = rootParam var root = rootParam
if root.contains("*") { if root.contains("*") {
@ -338,7 +338,7 @@ class NetworkManager {
} }
func loadDetails(items: MediaItem, result: @escaping ([MediaItem]) -> () ) {
func loadPicDetails(items: MediaItem, result: @escaping ([MediaItem]) -> () ) {
let len = items.root.count let len = items.root.count
let url = NetworkManager.sharedInstance.baseurl + "/service/listfiles" + items.fullPath let url = NetworkManager.sharedInstance.baseurl + "/service/listfiles" + items.fullPath
@ -358,11 +358,10 @@ class NetworkManager {
let name = NSURL(fileURLWithPath: s).lastPathComponent! let name = NSURL(fileURLWithPath: s).lastPathComponent!
var pathlen = l - len - name.count var pathlen = l - len - name.count
// if (pathlen > 1000) {
print(pathlen) print(pathlen)
print(name) print(name)
print(s) print(s)
// }
if (pathlen < 2) { if (pathlen < 2) {
pathlen = 2 pathlen = 2
} }

20
kplayer/detail/DetailViewController.swift

@ -68,7 +68,8 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
// attach long press gesture to collectionView // attach long press gesture to collectionView
let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:))) let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
lpgr.minimumPressDuration = 3; //seconds
lpgr.minimumPressDuration = 3;
//seconds
lpgr.delaysTouchesBegan = true lpgr.delaysTouchesBegan = true
self.collectionView.addGestureRecognizer(lpgr); self.collectionView.addGestureRecognizer(lpgr);
@ -246,10 +247,10 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
switch kind { switch kind {
case UICollectionView.elementKindSectionHeader: case UICollectionView.elementKindSectionHeader:
let headerView = let headerView =
collectionView.dequeueReusableSupplementaryView(ofKind: kind,
withReuseIdentifier: "HeaderView",
for: indexPath)
as! HeaderCell
collectionView.dequeueReusableSupplementaryView(ofKind: kind,
withReuseIdentifier: "HeaderView",
for: indexPath)
as! HeaderCell
let items = detailItem!.children[indexPath.section] let items = detailItem!.children[indexPath.section]
headerView.setItem(items) headerView.setItem(items)
@ -273,13 +274,14 @@ class DetailViewController: UIViewController, UICollectionViewDelegateFlowLayout
self.currentItem = items self.currentItem = items
} }
if items.type == ItemType.VIDEO || items.type == ItemType.SNAPSHOT {
if items.isVideo() {
showVideo() showVideo()
}
else {
NetworkManager.sharedInstance.loadDetails(items: items, result: { (im: [MediaItem]) in
} else if items.isPic() {
NetworkManager.sharedInstance.loadPicDetails(items: items, result: { (im: [MediaItem]) in
self.showPhotos(im) self.showPhotos(im)
}) })
} else {
showWeb(items.children)
} }
} }
} }

4
kplayer/master/MasterViewController.swift

@ -222,10 +222,10 @@ class MasterViewController: UITableViewController, UISearchResultsUpdating {
let dir = selectedItem.encodedDir! let dir = selectedItem.encodedDir!
if p.type == ItemType.VIDEOROOT { if p.type == ItemType.VIDEOROOT {
NetworkManager.sharedInstance.loadDirs(dir, completionHandler: weiter)
NetworkManager.sharedInstance.loadVideoDirs(dir, completionHandler: weiter)
} }
else if p.type == ItemType.WEBROOT { else if p.type == ItemType.WEBROOT {
weiter(p.children)
} }
else { else {
NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter) NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter)

16
kplayer/photo/MediaPhotoController.swift

@ -95,6 +95,10 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
} }
@objc func back() { @objc func back() {
if let t = timer {
t.invalidate()
}
operationQueue.cancelAllOperations() operationQueue.cancelAllOperations()
thumbnails?.cancel(); thumbnails?.cancel();
@ -122,12 +126,8 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
photoAlbumView.moveToPage(at: nextItem, animated: false); photoAlbumView.moveToPage(at: nextItem, animated: false);
photoScrubberView.setSelectedPhotoIndex(nextItem, animated: true) photoScrubberView.setSelectedPhotoIndex(nextItem, animated: true)
pagingScrollViewDidChangePages(photoAlbumView)
if (slide > 0) {
timer = Timer.scheduledTimer(timeInterval: Double(slide) / 2.0, target: self, selector: #selector(showItem), userInfo: nil, repeats: false)
} else {
timer = nil
}
} }
@objc func play() { @objc func play() {
@ -320,6 +320,12 @@ class MediaPhotoController: NIToolbarPhotoViewController, NIPhotoAlbumScrollView
i in i in
self.nextImage = i self.nextImage = i
self.nextImageIndex = currentIndex + 1 self.nextImageIndex = currentIndex + 1
if (self.slide > 0) {
self.timer = Timer.scheduledTimer(timeInterval: Double(self.slide) / 2, target: self, selector: #selector(self.showItem), userInfo: nil, repeats: false)
} else {
self.timer = nil
}
}, index: currentIndex) }, index: currentIndex)
loadNext = op3 loadNext = op3
op3.qualityOfService = QualityOfService.userInitiated op3.qualityOfService = QualityOfService.userInitiated

Loading…
Cancel
Save