You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.8 KiB
138 lines
3.8 KiB
//
|
|
// Created by Marco Schmickler on 25.05.15.
|
|
// Copyright (c) 2015 Marco Schmickler. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
enum ItemType : String, CustomStringConvertible {
|
|
case ROOT = "root"
|
|
case VIDEOROOT = "videoroot"
|
|
case FOLDER = "folder"
|
|
case VIDEO = "video"
|
|
case PICS = "pics"
|
|
case DETAILS = "details"
|
|
case SNAPSHOT = "snapshot"
|
|
|
|
var description: String {
|
|
return self.rawValue
|
|
}
|
|
}
|
|
|
|
class MediaItem : CustomDebugStringConvertible {
|
|
var name : String
|
|
var path : String
|
|
var root: String
|
|
|
|
var image: UIImage?
|
|
var time: NSTimeInterval?
|
|
var thumbUrl: String?
|
|
|
|
var children: [MediaItem]
|
|
var parent: MediaItem?
|
|
var type: ItemType
|
|
|
|
var index = 0
|
|
var loaded = false
|
|
var featured = true
|
|
|
|
var sortName = ""
|
|
|
|
init(name: String, path: String, root: String, type: ItemType) {
|
|
self.name = name
|
|
let trim = NSCharacterSet(charactersInString: "/ ")
|
|
self.root = "/" + root.stringByTrimmingCharactersInSet(trim)
|
|
self.path = path.stringByTrimmingCharactersInSet(trim)
|
|
self.type = type
|
|
|
|
children = [MediaItem]()
|
|
|
|
sortName = computeSortName(name)
|
|
}
|
|
|
|
func computeSortName(sname: String) -> String {
|
|
var lsortName = sname.stringByReplacingOccurrencesOfString("full", withString: "")
|
|
var fullNameArr = sortName.characters.split {$0 == "_"}.map { String($0) }
|
|
// println (lsortName)
|
|
if !fullNameArr.isEmpty {
|
|
lsortName = fullNameArr[0]
|
|
}
|
|
|
|
while lsortName.characters.count < 6 {
|
|
lsortName = "0" + lsortName
|
|
}
|
|
|
|
return lsortName
|
|
}
|
|
|
|
var thumbPath: 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")
|
|
|
|
return enc + "/"
|
|
}
|
|
|
|
var thumbUrlAbsolute: String {
|
|
let enc = thumbUrl!.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
|
|
return NetworkManager.sharedInstance.baseurl + "/service/download" + enc
|
|
}
|
|
|
|
var imageUrlAbsolute: String {
|
|
var imageUrl = thumbUrl!.stringByReplacingOccurrencesOfString("_thumb.", withString: ".")
|
|
imageUrl = imageUrl.stringByReplacingOccurrencesOfString("?preview=true", withString: "")
|
|
imageUrl = imageUrl.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)! //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
|
|
|
|
return NetworkManager.sharedInstance.baseurl + "/service/download" + imageUrl
|
|
}
|
|
|
|
var fullPath: String {
|
|
let fpath = rootSlash + pathSlash + name
|
|
let enc = fpath.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding) //.stringByReplacingOccurrencesOfString(" ", withString: "%20")
|
|
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
|
|
|
|
return dir.stringByAddingPercentEscapesUsingEncoding(NSISOLatin1StringEncoding)
|
|
}
|
|
|
|
func superRoot() -> MediaItem {
|
|
if let p = parent {
|
|
return p.superRoot()
|
|
}
|
|
|
|
return self
|
|
}
|
|
|
|
}
|