diff --git a/Docsis Toolkit.xcodeproj/project.pbxproj b/Docsis Toolkit.xcodeproj/project.pbxproj index ba3abc0..883479b 100644 --- a/Docsis Toolkit.xcodeproj/project.pbxproj +++ b/Docsis Toolkit.xcodeproj/project.pbxproj @@ -33,6 +33,8 @@ E2218D691EF478C0004298F6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E2218CA81EF2D37B004298F6 /* Assets.xcassets */; }; E2268DF81EF7095100C97726 /* PDFTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2268DF61EF7095100C97726 /* PDFTitle.swift */; }; E2268DF91EF7095100C97726 /* PDFTitle.xib in Resources */ = {isa = PBXBuildFile; fileRef = E2268DF71EF7095100C97726 /* PDFTitle.xib */; }; + E23E2C621EF7FE530009D376 /* FileOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23E2C611EF7FE530009D376 /* FileOperations.swift */; }; + E23E2C631EF7FE530009D376 /* FileOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23E2C611EF7FE530009D376 /* FileOperations.swift */; }; E262463E1EF55BCE00EAA4A6 /* GraphWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E262463C1EF55BCE00EAA4A6 /* GraphWindow.swift */; }; E262463F1EF55BCE00EAA4A6 /* GraphWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = E262463D1EF55BCE00EAA4A6 /* GraphWindow.xib */; }; E26246441EF5E64900EAA4A6 /* PDFDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = E26246421EF5E64900EAA4A6 /* PDFDraw.swift */; }; @@ -94,6 +96,7 @@ E2218D661EF463B4004298F6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; E2268DF61EF7095100C97726 /* PDFTitle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PDFTitle.swift; sourceTree = ""; }; E2268DF71EF7095100C97726 /* PDFTitle.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PDFTitle.xib; sourceTree = ""; }; + E23E2C611EF7FE530009D376 /* FileOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileOperations.swift; sourceTree = ""; }; E262463C1EF55BCE00EAA4A6 /* GraphWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GraphWindow.swift; sourceTree = ""; }; E262463D1EF55BCE00EAA4A6 /* GraphWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GraphWindow.xib; sourceTree = ""; }; E26246421EF5E64900EAA4A6 /* PDFDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PDFDraw.swift; sourceTree = ""; }; @@ -154,6 +157,7 @@ E2218CA71EF2D35B004298F6 /* Shared Resources */ = { isa = PBXGroup; children = ( + E23E2C5D1EF7E63A0009D376 /* Swift */, E2218CA81EF2D37B004298F6 /* Assets.xcassets */, ); name = "Shared Resources"; @@ -236,8 +240,8 @@ E2218D2A1EF3271F004298F6 /* Graphic Analysis 2 */ = { isa = PBXGroup; children = ( - E2218D4D1EF329AE004298F6 /* Swift */, E2218D3C1EF327CA004298F6 /* Support Files */, + E2218D4D1EF329AE004298F6 /* Swift */, ); path = "Graphic Analysis 2"; sourceTree = ""; @@ -377,6 +381,14 @@ name = "Collection View"; sourceTree = ""; }; + E23E2C5D1EF7E63A0009D376 /* Swift */ = { + isa = PBXGroup; + children = ( + E23E2C611EF7FE530009D376 /* FileOperations.swift */, + ); + name = Swift; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXLegacyTarget section */ @@ -537,6 +549,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E23E2C621EF7FE530009D376 /* FileOperations.swift in Sources */, E2218D241EF3267F004298F6 /* XMLDictionary.m in Sources */, E2218D111EF2D6F1004298F6 /* SettingsWindowController.swift in Sources */, E2218D151EF2E470004298F6 /* ConnectionLossOperation.swift in Sources */, @@ -553,6 +566,7 @@ E2268DF81EF7095100C97726 /* PDFTitle.swift in Sources */, E2218D2C1EF3271F004298F6 /* AppDelegate.swift in Sources */, E2218D621EF41415004298F6 /* CollectionViewMonth.swift in Sources */, + E23E2C631EF7FE530009D376 /* FileOperations.swift in Sources */, E2218D601EF40E23004298F6 /* CollectionViewYear.swift in Sources */, E262463E1EF55BCE00EAA4A6 /* GraphWindow.swift in Sources */, E26246491EF6688400EAA4A6 /* PDFItemViewController.swift in Sources */, diff --git a/FileOperations.swift b/FileOperations.swift new file mode 100644 index 0000000..e7bd53d --- /dev/null +++ b/FileOperations.swift @@ -0,0 +1,51 @@ +// +// FileOperations.swift +// Docsis Toolkit +// +// Created by Kilian Hofmann on 19.06.17. +// Copyright © 2017 Kilian Hofmann. All rights reserved. +// + +import Cocoa + +class FileOperations: NSObject { + + static func log(data: String, toLog path: String) { + let seperated: Array = data.components(separatedBy: ":") + let hours: UInt32 = UInt32(seperated[0])! + let minutes: UInt32 = UInt32(seperated[1])! + let seconds: UInt32 = UInt32(seperated[2])! + var dataToWrite: UInt32 = 0 + dataToWrite = ((((dataToWrite | hours) << 6) | minutes) << 8) | seconds + let file: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 3, alignedTo: 1) + file.storeBytes(of: dataToWrite, as: UInt32.self) + do { + let fileData: NSMutableData = try NSMutableData(contentsOf: URL(fileURLWithPath: path)) + fileData.append(file, length: 3) + fileData.write(to: URL(fileURLWithPath: path), atomically: true) + } catch _ { + let fileData: NSMutableData = NSMutableData() + fileData.append(file, length: 3) + fileData.write(to: URL(fileURLWithPath: path), atomically: true) + } + } + + static func load(log Data: NSData) -> String? { + var returnString: String? = "" + var i: Int = 0 + while i < Data.length - 3 { + let data: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(bytes: 3, alignedTo: 1) + Data.getBytes(data, range: NSRange(location: i, length: 3)) + let compound: UInt32 = data.load(as: UInt32.self) + let seconds: UInt32 = (compound) & 0b111111 + let minutes: UInt32 = (compound >> 8) & 0b111111 + let hours: UInt32 = (compound >> 14) & 0b11111 + returnString?.append("\(hours):\(minutes):\(seconds)\n") + i += 3 + } + if returnString != "" { + return returnString + } + return nil + } +} diff --git a/Graphic Analysis 2/CollectionViewMonth.swift b/Graphic Analysis 2/CollectionViewMonth.swift index 41bd894..e085c59 100644 --- a/Graphic Analysis 2/CollectionViewMonth.swift +++ b/Graphic Analysis 2/CollectionViewMonth.swift @@ -75,7 +75,7 @@ extension CollectionViewMonth: NSCollectionViewDataSource { } item2.day.textColor = NSColor.black operationQueue.addOperation { - guard let log = day.fileWrappers?["KDLog.txt"] else { + guard let log = day.fileWrappers?["KDLog.hex"] else { OperationQueue.main.addOperation { self.doc.progress.increment(by: 100/31) if self.doc.progress.doubleValue > 98 { @@ -84,7 +84,10 @@ extension CollectionViewMonth: NSCollectionViewDataSource { } return } + /* guard var logA = String(data: log.regularFileContents!, encoding: .utf8)?.components(separatedBy: "\n") else { return } + */ + guard var logA = FileOperations.load(log: log.regularFileContents! as NSData)?.components(separatedBy: "\n") else { return } logA.removeLast() item2.distribution = logA OperationQueue.main.addOperation { diff --git a/Graphic Analysis 2/Info.plist b/Graphic Analysis 2/Info.plist index 1ad191f..c93a039 100644 --- a/Graphic Analysis 2/Info.plist +++ b/Graphic Analysis 2/Info.plist @@ -44,7 +44,7 @@ CFBundleShortVersionString 2.0 CFBundleVersion - 414 + 417 LSApplicationCategoryType public.app-category.utilities LSMinimumSystemVersion diff --git a/Graphic Analysis 2/buildnum.ver b/Graphic Analysis 2/buildnum.ver index 8bb3013..50d041b 100644 --- a/Graphic Analysis 2/buildnum.ver +++ b/Graphic Analysis 2/buildnum.ver @@ -1,2 +1,2 @@ version 2.0 -build 414 +build 417 diff --git a/Logger4/ConnectionLossOperation.swift b/Logger4/ConnectionLossOperation.swift index 77874f3..00ff8c1 100644 --- a/Logger4/ConnectionLossOperation.swift +++ b/Logger4/ConnectionLossOperation.swift @@ -21,11 +21,11 @@ class ConnectionLossOperation: Operation { let time : Date = Date() let start: Array = (NSApp.delegate as! AppDelegate).justDate.string(from: time).components(separatedBy: ".") // Line to write - let entry: String = String(format: "%@\n", (NSApp.delegate as! AppDelegate).justTime.string(from: time)) + let entry: String = String(format: "%@", (NSApp.delegate as! AppDelegate).justTime.string(from: time)) // File manager let fileManager: FileManager = FileManager.default // Path to file - let file: String = NSString(format: "~/KDLog/%@.docsisplist2/%@/%@/KDLog.txt", start[2], start[1], start[0]).expandingTildeInPath + let file: String = NSString(format: "~/KDLog/%@.docsisplist2/%@/%@/KDLog.hex", start[2], start[1], start[0]).expandingTildeInPath // Make all relevant directories if not present pthread_mutex_lock(&((NSApp.delegate as! AppDelegate).lock)) let dir: NSString = NSString(format: "~/KDLog/%@.docsisplist2/%@/%@", start[2], start[1], start[0]) @@ -44,6 +44,7 @@ class ConnectionLossOperation: Operation { data, response, error in if error != nil && data == nil && self.result2 { + /* let fileH: FileHandle? = FileHandle(forUpdatingAtPath: file) if fileH == nil { do{ @@ -58,7 +59,11 @@ class ConnectionLossOperation: Operation { fileH?.write(data!) fileH?.closeFile() } - + + let sep = entry.components(separatedBy: ":") + FileOperations.logHours(UInt8(sep[0])!, minutes: UInt8(sep[1])!, seconds: UInt8(sep[2])!, toLog: file) + */ + FileOperations.log(data: entry, toLog: file) self.result2 = false; NSLog("Internet loss logged!") } @@ -70,6 +75,7 @@ class ConnectionLossOperation: Operation { data, response, error in if error != nil && data == nil && self.result1 { + /* let fileH: FileHandle? = FileHandle(forUpdatingAtPath: file) if fileH == nil { do{ @@ -84,7 +90,11 @@ class ConnectionLossOperation: Operation { fileH?.write(data!) fileH?.closeFile() } - self.result1 = false; + let sep = entry.components(separatedBy: ":") + FileOperations.logHours(UInt8(sep[0])!, minutes: UInt8(sep[1])!, seconds: UInt8(sep[2])!, toLog: file) + */ + FileOperations.log(data: entry, toLog: file) + self.result2 = false; NSLog("Internet loss logged!") } else if error != nil && response == nil && data == nil { diff --git a/Logger4/Info.plist b/Logger4/Info.plist index d6a1da3..98cba17 100644 --- a/Logger4/Info.plist +++ b/Logger4/Info.plist @@ -17,7 +17,7 @@ CFBundleShortVersionString 4.0 CFBundleVersion - 27 + 39 LSApplicationCategoryType public.app-category.utilities LSMinimumSystemVersion diff --git a/Logger4/Logger4-Bridging-Header.h b/Logger4/Logger4-Bridging-Header.h index d253cb4..a6c683e 100644 --- a/Logger4/Logger4-Bridging-Header.h +++ b/Logger4/Logger4-Bridging-Header.h @@ -4,3 +4,4 @@ // #import "XMLDictionary.h" +//#import "FileOperations.h" diff --git a/Logger4/buildnum.ver b/Logger4/buildnum.ver index 843bd93..628243c 100644 --- a/Logger4/buildnum.ver +++ b/Logger4/buildnum.ver @@ -1,2 +1,2 @@ version 4.0 -build 27 +build 39