|
|
@ -11,8 +11,7 @@ import CoreData |
|
|
|
|
|
|
|
|
class MasterViewController: UITableViewController { |
|
|
class MasterViewController: UITableViewController { |
|
|
|
|
|
|
|
|
var items = [MediaItem]() |
|
|
|
|
|
var itemsMap = Dictionary<String, MediaItem>() |
|
|
|
|
|
|
|
|
let model = ItemModel() |
|
|
|
|
|
|
|
|
override func awakeFromNib() { |
|
|
override func awakeFromNib() { |
|
|
super.awakeFromNib() |
|
|
super.awakeFromNib() |
|
|
@ -22,23 +21,6 @@ class MasterViewController: UITableViewController { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func addItem(item: MediaItem) { |
|
|
|
|
|
let path = item.encodedDir! |
|
|
|
|
|
print(path) |
|
|
|
|
|
|
|
|
|
|
|
var folder = itemsMap[path] |
|
|
|
|
|
|
|
|
|
|
|
if folder == nil { |
|
|
|
|
|
folder = MediaItem(name: "", path: item.path, root: item.root, type: ItemType.FOLDER) |
|
|
|
|
|
itemsMap[path] = folder! |
|
|
|
|
|
items.append(folder!) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
item.index = folder!.children.count |
|
|
|
|
|
folder!.children.append(item) |
|
|
|
|
|
item.parent = folder |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override func viewDidLoad() { |
|
|
override func viewDidLoad() { |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
@ -50,82 +32,105 @@ class MasterViewController: UITableViewController { |
|
|
// Dispose of any resources that can be recreated. |
|
|
// Dispose of any resources that can be recreated. |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { |
|
|
|
|
|
print("\(indexPath.row)") |
|
|
|
|
|
let selectedItem = items[indexPath.row] |
|
|
|
|
|
|
|
|
|
|
|
if (selectedItem.type == ItemType.DETAILS) { |
|
|
|
|
|
|
|
|
func selectLoadedItem(selectedItem: MediaItem) { |
|
|
|
|
|
switch selectedItem.type { |
|
|
|
|
|
case ItemType.DETAILS: |
|
|
performSegueWithIdentifier("showDetail", sender: self) |
|
|
performSegueWithIdentifier("showDetail", sender: self) |
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (selectedItem.type == ItemType.FOLDER) { |
|
|
|
|
|
if (!selectedItem.children.isEmpty) { |
|
|
|
|
|
if selectedItem.children[0].type == ItemType.VIDEO { |
|
|
|
|
|
|
|
|
case ItemType.FOLDER: |
|
|
|
|
|
if selectedItem.children.first?.type == ItemType.VIDEO { |
|
|
performSegueWithIdentifier("showDetail", sender: self) |
|
|
performSegueWithIdentifier("showDetail", sender: self) |
|
|
return |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
gotoNextFolder(selectedItem) |
|
|
|
|
|
} |
|
|
|
|
|
default: |
|
|
|
|
|
print(selectedItem.type) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) |
|
|
|
|
|
let vc = mainStoryboard.instantiateViewControllerWithIdentifier("mastertable") as! MasterViewController |
|
|
|
|
|
|
|
|
|
|
|
if (selectedItem.type == ItemType.FOLDER) { |
|
|
|
|
|
vc.navigationItem.title = selectedItem.name; |
|
|
|
|
|
|
|
|
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { |
|
|
|
|
|
print("\(indexPath.row)") |
|
|
|
|
|
let selectedItem = model.items[indexPath.row] |
|
|
|
|
|
|
|
|
if selectedItem.loaded { |
|
|
|
|
|
vc.items = selectedItem.children |
|
|
|
|
|
navigationController!.pushViewController(vc, animated: true) |
|
|
|
|
|
|
|
|
if selectedItem.type == ItemType.DETAILS { |
|
|
|
|
|
gotoDetails(selectedItem) |
|
|
return |
|
|
return |
|
|
} |
|
|
|
|
|
|
|
|
// selectLoadedItem(selectedItem) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (selectedItem.type == ItemType.ROOT) || (selectedItem.type == ItemType.VIDEOROOT) || (selectedItem.type == ItemType.FOLDER) { |
|
|
|
|
|
print (selectedItem.path) |
|
|
|
|
|
|
|
|
|
|
|
NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!, completionHandler: { |
|
|
|
|
|
(i, leaf) in |
|
|
|
|
|
|
|
|
if (selectedItem.isFolder()) { |
|
|
|
|
|
print(selectedItem.path) |
|
|
|
|
|
|
|
|
let supertype = selectedItem.superRoot().type |
|
|
|
|
|
|
|
|
NetworkManager.sharedInstance.listDirs(selectedItem.encodedDir!) { |
|
|
|
|
|
(i, leaf) in |
|
|
|
|
|
|
|
|
var neu = [MediaItem]() |
|
|
|
|
|
|
|
|
let details = MediaItem(name: selectedItem.name, path: selectedItem.path, root: selectedItem.root, type: ItemType.DETAILS) |
|
|
|
|
|
let neu = MediaItem(name: selectedItem.name, path: "", root: "", type: ItemType.FOLDER) |
|
|
let newFolder = MediaItem(name: ".", path: "", root: selectedItem.root, type: ItemType.DETAILS) |
|
|
let newFolder = MediaItem(name: ".", path: "", root: selectedItem.root, type: ItemType.DETAILS) |
|
|
newFolder.loaded = true |
|
|
newFolder.loaded = true |
|
|
|
|
|
|
|
|
|
|
|
var hasDetails = false |
|
|
|
|
|
|
|
|
for item in i { |
|
|
for item in i { |
|
|
if item.type != ItemType.FOLDER && supertype != ItemType.VIDEOROOT { |
|
|
|
|
|
|
|
|
if item.type != ItemType.FOLDER && item.isVideo() { |
|
|
item.parent = newFolder |
|
|
item.parent = newFolder |
|
|
newFolder.children.append(item) |
|
|
newFolder.children.append(item) |
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
|
|
|
} else { |
|
|
if item.path == "" { |
|
|
if item.path == "" { |
|
|
item.path = item.name |
|
|
item.path = item.name |
|
|
item.name = "" |
|
|
item.name = "" |
|
|
} |
|
|
} |
|
|
item.type = ItemType.FOLDER |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if item.type == ItemType.PICS { |
|
|
|
|
|
if !hasDetails { |
|
|
|
|
|
neu.children.append(details) |
|
|
|
|
|
hasDetails = true |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
// item.type = ItemType.FOLDER |
|
|
item.parent = selectedItem |
|
|
item.parent = selectedItem |
|
|
neu.append(item) |
|
|
|
|
|
|
|
|
neu.children.append(item) |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if newFolder.children.count > 0 { |
|
|
if newFolder.children.count > 0 { |
|
|
newFolder.parent = selectedItem |
|
|
newFolder.parent = selectedItem |
|
|
neu.append(newFolder) |
|
|
|
|
|
|
|
|
neu.children.append(newFolder) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
let isVideo = selectedItem.parent != nil && selectedItem.parent!.type == ItemType.VIDEOROOT |
|
|
let isVideo = selectedItem.parent != nil && selectedItem.parent!.type == ItemType.VIDEOROOT |
|
|
if leaf || isVideo { |
|
|
if leaf || isVideo { |
|
|
|
|
|
self.gotoDetails(selectedItem) |
|
|
|
|
|
} else { |
|
|
|
|
|
self.gotoNextFolder(neu) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func gotoNextFolder(selectedItem: MediaItem) { |
|
|
|
|
|
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) |
|
|
|
|
|
let vc = mainStoryboard.instantiateViewControllerWithIdentifier("mastertable") as! MasterViewController |
|
|
|
|
|
vc.navigationItem.title = selectedItem.name; |
|
|
|
|
|
vc.model.items = selectedItem.children |
|
|
|
|
|
navigationController!.pushViewController(vc, animated: true) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func gotoDetails(selectedItem: MediaItem) { |
|
|
let weiter: NetworkManager.Weiter = { |
|
|
let weiter: NetworkManager.Weiter = { |
|
|
(g) in |
|
|
(g) in |
|
|
|
|
|
|
|
|
vc.items.removeAll() |
|
|
|
|
|
vc.itemsMap.removeAll() |
|
|
|
|
|
|
|
|
let model = ItemModel() |
|
|
|
|
|
|
|
|
for f in g { |
|
|
for f in g { |
|
|
vc.addItem(f) |
|
|
|
|
|
|
|
|
model.addItem(f) |
|
|
} |
|
|
} |
|
|
selectedItem.children = vc.items |
|
|
|
|
|
selectedItem.loaded = true |
|
|
|
|
|
|
|
|
selectedItem.children = model.items |
|
|
|
|
|
selectedItem.loaded = false |
|
|
|
|
|
|
|
|
var all: [MediaItem]? |
|
|
var all: [MediaItem]? |
|
|
|
|
|
|
|
|
@ -158,19 +163,9 @@ class MasterViewController: UITableViewController { |
|
|
|
|
|
|
|
|
if p.type == ItemType.VIDEOROOT { |
|
|
if p.type == ItemType.VIDEOROOT { |
|
|
NetworkManager.sharedInstance.loadDirs(dir, completionHandler: weiter) |
|
|
NetworkManager.sharedInstance.loadDirs(dir, completionHandler: weiter) |
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
|
|
|
} else { |
|
|
NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter) |
|
|
NetworkManager.sharedInstance.loadPicDirs(dir, completionHandler: weiter) |
|
|
} |
|
|
} |
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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 { |
|
|
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool { |
|
|
@ -181,23 +176,16 @@ class MasterViewController: UITableViewController { |
|
|
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { |
|
|
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { |
|
|
if segue.identifier == "showDetail" { |
|
|
if segue.identifier == "showDetail" { |
|
|
if let indexPath = self.tableView.indexPathForSelectedRow { |
|
|
if let indexPath = self.tableView.indexPathForSelectedRow { |
|
|
let item = items[indexPath.row] |
|
|
|
|
|
|
|
|
let item = model.items[indexPath.row] |
|
|
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController |
|
|
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController |
|
|
controller.detailItem = item |
|
|
controller.detailItem = item |
|
|
|
|
|
|
|
|
var root = item |
|
|
|
|
|
|
|
|
|
|
|
while root.parent != nil { |
|
|
|
|
|
root = root.parent! |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if root.type == ItemType.ROOT { |
|
|
|
|
|
|
|
|
if item.isPic() { |
|
|
|
|
|
// größere Vorschau für Fotos |
|
|
controller.defaultItemSize = CGSize(width: 300, height: 300) |
|
|
controller.defaultItemSize = CGSize(width: 300, height: 300) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
item.children.sortInPlace({ |
|
|
|
|
|
$0.sortName < $1.sortName |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
item.sort() |
|
|
|
|
|
|
|
|
var j = 0 |
|
|
var j = 0 |
|
|
for i in item.children { |
|
|
for i in item.children { |
|
|
@ -218,7 +206,7 @@ class MasterViewController: UITableViewController { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
|
|
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
|
|
return items.count |
|
|
|
|
|
|
|
|
return model.items.count |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { |
|
|
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { |
|
|
@ -240,17 +228,14 @@ class MasterViewController: UITableViewController { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) { |
|
|
func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) { |
|
|
let object = items[indexPath.row] |
|
|
|
|
|
|
|
|
let object = model.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 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
cell.accessoryType = UITableViewCellAccessoryType.None |
|
|
cell.accessoryType = UITableViewCellAccessoryType.None |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|