//
// P4DepotArea.swift
// DocHub
//
// Created by Tristan Juricek on 6/24/14.
// Copyright (c) 2014 Perforce. All rights reserved.
//
import Foundation
class P4DepotArea : NSObject, Area {
var p4Library: P4Library
var p4Depot: P4Depot
init(p4Library p4Lib:P4Library, p4Depot p4Dep:P4Depot) {
p4Library = p4Lib
p4Depot = p4Dep
super.init()
// TODO I think I hit a bug with the compiler which causes me to avoid
// using lazy initialization here
children = loadChildren()
files = loadFiles()
sorted = sortItems()
}
var name:String {
return p4Depot.name
}
var library: Library {
return p4Library
}
var children: Directory[] = []
func loadChildren() -> Directory[] {
var depotDirs = Array<P4DepotDir>()
let depotPath = "\(p4Depot.depotPath)/*"
p4Library.withConnection({
(api:P4ClientApi) -> () in
let (err, dirs) = api.dirs(depotPath)
if let e = err {
NSException(name: "DirectoryListFailed",
reason: e.localizedDescription, userInfo: nil).raise()
}
for p4dir in dirs {
depotDirs.append(P4DepotDir(depotArea:self, dir:p4dir))
}
})
return depotDirs
}
var files: File[] = []
func loadFiles() -> File[] {
var depotFiles = Array<P4DepotFile>()
let depotPath = "\(p4Depot.depotPath)/*"
p4Library.withConnection({
(api:P4ClientApi) -> () in
let (err, p4Files) = api.files(depotPath)
if let e = err {
NSException(name: "FileListFailed",
reason: e.localizedDescription, userInfo: nil).raise()
}
for p4file in p4Files {
let file = P4DepotFile(depotArea:self, p4File:p4file)
depotFiles.append(file)
}
})
return depotFiles
}
var sorted:Namable[] = []
func sortItems() -> Namable[] {
var namables = Array<Namable>()
for child in children {
namables.append(child)
}
for file in files {
namables.append(file)
}
let newArr : Array<Namable> = sort(namables, {
(n1, n2) -> Bool in
return n1.name.compare(n2.name) < 0
})
return newArr
}
func itemAt(index:Int) -> Namable {
return sorted[index]
}
} | # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #3 | 9583 | tjuricek | Set up basic directory browsing. | ||
| #2 | 9581 | tjuricek | Basic listing backend for Perforce models | ||
| #1 | 9560 | tjuricek |
Setup parent reference to Library protocol, and handle using a separate model class. Adds a "library" ID to the title bar, which may make sense. |