DOCSIS-Toolkit/Converter/ViewController.swift

146 lines
7.1 KiB
Swift

//
// ViewController.swift
// Converter
//
// Created by Kilian Hofmann on 20.06.17.
// Copyright © 2017 Kilian Hofmann. All rights reserved.
//
import Cocoa
class ViewController: NSViewController {
@IBOutlet var months: NSTextField!
@IBOutlet var days: NSTextField!
@IBOutlet var files: NSTextField!
@IBOutlet var progress: NSTextField!
@IBOutlet var convert: NSButton!
@IBOutlet var inPath: NSTextField!
var fileWrappers: [String : [String : FileWrapper]]!
var filesDone: Int = 0
var filesTotal: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
title = ""
// Do any additional setup after loading the view.
}
@IBAction func convert(sender: NSButton) {
convert.isEnabled = false
(NSApp.delegate as! AppDelegate).isConverting = true
let opQueue: OperationQueue = OperationQueue()
let fileQueue: OperationQueue = OperationQueue()
fileQueue.maxConcurrentOperationCount = 4
let myActivity = ProcessInfo.processInfo.beginActivity(options: .userInitiated, reason: "Converting")
opQueue.addOperation {
defer {
fileQueue.waitUntilAllOperationsAreFinished()
ProcessInfo.processInfo.endActivity(myActivity)
OperationQueue.main.addOperation {
self.convert.isEnabled = true
(NSApp.delegate as! AppDelegate).isConverting = false
}
}
let inP: String = self.inPath.stringValue
var days: Int = 0
do {
let directory = try FileWrapper(url: URL(fileURLWithPath: inP), options: .immediate)
for months in directory.fileWrappers! {
guard months.value.isDirectory else { continue }
days += (months.value.fileWrappers?.count)!
if (months.value.fileWrappers?.contains(where: {$0.0 == ".DS_Store" }))! {
days -= 1
}
for days in months.value.fileWrappers! {
guard days.value.isDirectory else { continue }
self.filesTotal += (days.value.fileWrappers?.count)!
if (days.value.fileWrappers?.contains(where: {$0.0 == ".DS_Store" }))! {
self.filesTotal -= 1
}
if (days.value.fileWrappers?.contains(where: {$0.0 == "Content.plist" }))! {
self.filesTotal -= 1
}
}
}
OperationQueue.main.addOperation {
self.months.stringValue = "\(directory.fileWrappers!.count)"
self.days.stringValue = "\(days)"
self.files.stringValue = "\(self.filesTotal)"
self.progress.stringValue = "File \(self.filesDone) of \(self.filesTotal)"
}
} catch _ {
OperationQueue.main.addOperation {
self.convert.isEnabled = true
(NSApp.delegate as! AppDelegate).isConverting = false
}
}
for month in 1...12 {
for day in 1...31 {
let path: String = inP + String(format: "/%02d", month) + String(format: "/%02d", day)
do {
let directory = try FileWrapper(url: URL(fileURLWithPath: path), options: .immediate)
for file in directory.fileWrappers! {
if file.key == "KDLog.txt" {
let pathOut = path.appending("/" + file.key.replacingOccurrences(of: ".txt", with: ".hex")).replacingOccurrences(of: ".docsisplist2", with: "C.docsisplist2")
//print(path.appending(file.key) + " to " + pathOut)
self.makeSubDir(path: pathOut.replacingOccurrences(of: file.key.replacingOccurrences(of: ".txt", with: ".hex"), with: ""))
FileOperations.convertLoss(log: path.appending("/" + file.key), toFile: pathOut)
OperationQueue.main.addOperation {
self.filesDone += 1
self.progress.stringValue = "File \(self.filesDone) of \(self.filesTotal)"
}
} else if file.key.contains("Upstream") {
let pathOut = path.appending("/" + file.key.replacingOccurrences(of: ".csv", with: ".hex")).replacingOccurrences(of: ".docsisplist2", with: "C.docsisplist2")
//print(path.appending(file.key) + " to " + pathOut)
self.makeSubDir(path: pathOut.replacingOccurrences(of: file.key.replacingOccurrences(of: ".csv", with: ".hex"), with: ""))
FileOperations.convertUpstream(log: path.appending("/" + file.key), toFile: pathOut)
OperationQueue.main.addOperation {
self.filesDone += 1
self.progress.stringValue = "File \(self.filesDone) of \(self.filesTotal)"
}
} else if file.key.contains("Downstream") {
let pathOut = path.appending("/" + file.key.replacingOccurrences(of: ".csv", with: ".hex")).replacingOccurrences(of: ".docsisplist2", with: "C.docsisplist2")
//print(path.appending(file.key) + " to " + pathOut)
self.makeSubDir(path: pathOut.replacingOccurrences(of: file.key.replacingOccurrences(of: ".csv", with: ".hex"), with: ""))
FileOperations.convertDownstream(log: path.appending("/" + file.key), toFile: pathOut)
OperationQueue.main.addOperation {
self.filesDone += 1
self.progress.stringValue = "File \(self.filesDone) of \(self.filesTotal)"
}
}
}
} catch _ { continue }
}
}
}
}
func makeSubDir(path: String) {
// Check if directory exists, create or exit
let fileManager = FileManager.default
var directory: ObjCBool = ObjCBool(false)
let exists: Bool = fileManager.fileExists(atPath: (path as NSString).expandingTildeInPath, isDirectory: &directory)
if exists && directory.boolValue {
} else if exists {
NSLog("FILE WITH NAME KDLog EXISTS, REMOVE IT")
exit(1);
}
else {
do {
try fileManager.createDirectory(atPath: (path as NSString).expandingTildeInPath, withIntermediateDirectories: true, attributes: nil)
}
catch let error as NSError {
NSLog("ERROR ON DIRECTORY CREATION: \(error.localizedDescription)")
exit(1);
}
}
}
}