forked from I2P_Developers/i2p.i2p
63 lines
1.9 KiB
Swift
63 lines
1.9 KiB
Swift
//
|
|
// LogViewController.swift
|
|
// I2PLauncher
|
|
//
|
|
// Created by Mikal Villa on 18/09/2018.
|
|
// Copyright © 2018 The I2P Project. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import AppKit
|
|
|
|
class LogViewerViewController : NSTabViewItem {
|
|
|
|
@IBOutlet var scrollView: NSScrollView?
|
|
@IBOutlet var textFieldView: NSTextView?
|
|
|
|
private var outputPipe : Pipe?
|
|
|
|
override init(identifier: Any?) {
|
|
super.init(identifier: identifier)
|
|
self.captureStandardOutputAndRouteToTextView()
|
|
}
|
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
super.init(coder: aDecoder)
|
|
self.captureStandardOutputAndRouteToTextView()
|
|
}
|
|
|
|
|
|
func captureStandardOutputAndRouteToTextView() {
|
|
outputPipe = RouterManager.shared().getRouterTask()?.processPipe
|
|
outputPipe?.fileHandleForReading.waitForDataInBackgroundAndNotify()
|
|
|
|
NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable, object: outputPipe?.fileHandleForReading , queue: nil) {
|
|
notification in
|
|
|
|
let output = self.outputPipe?.fileHandleForReading.availableData
|
|
let outputString = String(data: output!, encoding: String.Encoding.utf8) ?? ""
|
|
let workTask = DispatchWorkItem {
|
|
let previousOutput = self.textFieldView?.string ?? ""
|
|
let nextOutput = previousOutput + "\n" + outputString
|
|
self.textFieldView?.string = nextOutput
|
|
|
|
let range = NSRange(location:nextOutput.count,length:0)
|
|
self.textFieldView?.scrollRangeToVisible(range)
|
|
}
|
|
DispatchQueue.main.async(execute: workTask)
|
|
|
|
// When router stop, stop the stream as well. If not it will go wild and create high cpu load
|
|
RouterManager.shared().eventManager.listenTo(eventName: "router_stop", action: {
|
|
NSLog("Time to cancel stream!")
|
|
workTask.cancel()
|
|
})
|
|
|
|
|
|
self.outputPipe?.fileHandleForReading.waitForDataInBackgroundAndNotify()
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|