Skip to content

Commit 826b83c

Browse files
committed
LogParser 3.10
1 parent f9f2113 commit 826b83c

File tree

5 files changed

+100
-49
lines changed

5 files changed

+100
-49
lines changed

.DS_Store

0 Bytes
Binary file not shown.

Data.swift

+52-10
Original file line numberDiff line numberDiff line change
@@ -247,46 +247,79 @@ final class Data: ObservableObject {
247247
var foundText = true
248248

249249
while(logArray.count > logIndex) {
250+
let log = logArray[logIndex]
250251

251252
//search process
252253
if(textToSearchFor != ""){
253254
//set requirement
254255
foundText = false
255256

256-
let textToSearch = filter.ignoreCase ? logArray[logIndex].process.lowercased() : logArray[logIndex].process
257-
if(textToSearch.contains(textToSearchFor)) {
257+
let processText = filter.ignoreCase ? log.process.lowercased() : log.process
258+
if(processText.contains(textToSearchFor)) {
258259
foundText = true
259260
}
260261

261262
//then search traces or just the one line
262263
if(!foundText){
263264
//search traces
264265
if(filter.includeTrace){
265-
for trace in logArray[logIndex].traceAtLine.values {
266+
for trace in log.traceAtLine.values {
266267

267-
let textToSearch = filter.ignoreCase ? trace.lowercased() : trace
268-
if(textToSearch.contains(textToSearchFor)) {
268+
let traceText = filter.ignoreCase ? trace.lowercased() : trace
269+
if(traceText.contains(textToSearchFor)) {
269270
foundText = true
270271
}
271272
}
272273
}
273274
//search text
274275
else {
275-
let textToSearch = filter.ignoreCase ? logArray[logIndex].text.lowercased() : logArray[logIndex].text
276+
let traceText = filter.ignoreCase ? log.text.lowercased() : log.text
276277

277-
if(textToSearch.contains(textToSearchFor)) {
278+
if(traceText.contains(textToSearchFor)) {
278279
foundText = true
279280
}
280281
}
281282
}
283+
284+
//then search date range
285+
if(!foundText) {
286+
let dateRangeTextRaw = Data.dateRangeText(log)
287+
let dateRangeText = filter.ignoreCase ? dateRangeTextRaw.lowercased() : dateRangeTextRaw
288+
if(dateRangeText.contains(textToSearchFor)) {
289+
foundText = true
290+
}
291+
}
292+
293+
//then search all dates
294+
if(!foundText && filter.includeTrace) {
295+
for date in log.dateAtLine.values {
296+
if date != nil {
297+
let dateTextRaw = Data.dateToLongTextFormatter.string(from: date!)
298+
let dateText = filter.ignoreCase ? dateTextRaw.lowercased() : dateTextRaw
299+
if(dateText.contains(textToSearchFor)) {
300+
foundText = true
301+
}
302+
}
303+
}
304+
}
305+
306+
//then search thread
307+
if(!foundText && filter.includeTrace) {
308+
for thread in log.threadAtLine.values {
309+
let threadText = filter.ignoreCase ? thread.lowercased() : thread
310+
if(threadText.contains(textToSearchFor)) {
311+
foundText = true
312+
}
313+
}
314+
}
282315
}
283316

284317

285318
//add log if conditions are met
286319
if(foundText && (
287-
filter.showErrors && logArray[logIndex].title == .ERROR ||
288-
filter.showWarns && logArray[logIndex].title == .WARN ||
289-
logArray[logIndex].title == Log.Title.FATAL)) {
320+
filter.showErrors && log.title == .ERROR ||
321+
filter.showWarns && log.title == .WARN ||
322+
log.title == Log.Title.FATAL)) {
290323
foundIndexArray.append(logIndex)
291324
}
292325

@@ -322,6 +355,15 @@ final class Data: ObservableObject {
322355
}
323356
}
324357

358+
static func dateRangeText(_ log: Log) -> String {
359+
if(log.lineNum.count > 1) {
360+
return "\(Data.dateToShortTextFormatter.string(from: log.dateAtLine[log.lineNum[0]]!!)) - " +
361+
"\(Data.dateToShortTextFormatter.string(from: log.dateAtLine[log.lineNum[log.lineNum.count - 1]]!!))"
362+
} else {
363+
return "\(Data.dateToShortTextFormatter.string(from: log.dateAtLine[log.lineNum[0]]!!))"
364+
}
365+
}
366+
325367
/*Parsing*/
326368

327369
//Called after loadFile, requires a file

Log Parser.app.zip

-1.61 KB
Binary file not shown.

Models/LineView.swift

+48-39
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// LogParser
44
//
55
// Created by Tyler Wilson on 3/13/20.
6-
// Copyright © 2020 Tyler Wilson. All rights reserved.
6+
// Copyright © 2022 Tyler Wilson. All rights reserved.
77
//
88

99
import SwiftUI
@@ -30,15 +30,6 @@ struct LineView: View {
3030
}
3131
}
3232

33-
var dateRangeText: String {
34-
if(log.lineNum.count > 1) {
35-
return "\(Data.dateToShortTextFormatter.string(from: log.dateAtLine[log.lineNum[0]]!!)) - " +
36-
"\(Data.dateToShortTextFormatter.string(from: log.dateAtLine[log.lineNum[log.lineNum.count - 1]]!!))"
37-
} else {
38-
return "\(Data.dateToShortTextFormatter.string(from: log.dateAtLine[log.lineNum[0]]!!))"
39-
}
40-
}
41-
4233
var body: some View {
4334
VStack {
4435
//Basic View
@@ -48,16 +39,16 @@ struct LineView: View {
4839
.foregroundColor(Color.secondary)
4940

5041
Text(verbatim: log.title.rawValue).foregroundColor(colorTitle(title: log.title))
51-
Text(log.process).foregroundColor(Color.uiGreen)
52-
if(filter.ignoreCase) {
53-
StyledText(verbatim: log.text)
54-
.style(.highlight(), ranges: { $0.lowercased().ranges(of: filter.searchText.lowercased()) })
55-
.foregroundColor(Color.uiWhite)
56-
} else {
57-
StyledText(verbatim: log.text)
58-
.style(.highlight(), ranges: { $0.ranges(of: filter.searchText) })
42+
StyledText(verbatim: log.process)
43+
.style(.highlight(), ranges: {
44+
filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)
45+
})
46+
.foregroundColor(Color.uiGreen)
47+
StyledText(verbatim: log.text)
48+
.style(.highlight(), ranges: {
49+
filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)
50+
})
5951
.foregroundColor(Color.uiWhite)
60-
}
6152
}.onHover(perform: {val in
6253
if(val){
6354
NSCursor.pointingHand.set()
@@ -72,18 +63,22 @@ struct LineView: View {
7263

7364
Spacer()
7465

75-
Button(dateRangeText, action: {
76-
self.log.showDetails = !self.log.showDetails
77-
self.data.toggleShowDetails(self.log)
78-
}).foregroundColor(.uiBlue)
79-
.buttonStyle(PlainButtonStyle())
80-
.onHover(perform: {val in
81-
if(val){
82-
NSCursor.pointingHand.set()
83-
} else {
84-
NSCursor.arrow.set()
85-
}
86-
})
66+
StyledText(verbatim: Data.dateRangeText(log))
67+
.style(.highlight(), ranges: {
68+
filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)
69+
})
70+
.foregroundColor(.uiBlue)
71+
.onHover(perform: {val in
72+
if(val){
73+
NSCursor.pointingHand.set()
74+
} else {
75+
NSCursor.arrow.set()
76+
}
77+
})
78+
.onTapGesture {
79+
self.log.showDetails = !self.log.showDetails
80+
self.data.toggleShowDetails(self.log)
81+
}
8782
}
8883
.padding(.trailing, 5)
8984
.opacity(opacity)
@@ -98,10 +93,13 @@ struct LineView: View {
9893
//Add line, date and thread
9994

10095
Text("line \(num):")
101-
.foregroundColor(.secondary)
102-
Text("\(Data.dateToLongTextFormatter.string(from: self.log.dateAtLine[num]!!))")
96+
.foregroundColor(.secondary)
97+
StyledText(verbatim: "\(Data.dateToLongTextFormatter.string(from: self.log.dateAtLine[num]!!))")
98+
.style(.highlight(), ranges: { filter.includeTrace ? (filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)) : [] })
10399
.foregroundColor(Color.uiBlue)
104-
Text("[\(self.log.threadAtLine[num]!)]")
100+
101+
StyledText(verbatim: "[\(self.log.threadAtLine[num]!)]")
102+
.style(.highlight(), ranges: { filter.includeTrace ? (filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)) : [] })
105103
.foregroundColor(Color.uiPurple)
106104
}
107105
}
@@ -113,7 +111,11 @@ struct LineView: View {
113111
HStack {
114112
VStack(alignment: .leading) {
115113
HStack {
116-
Text("Trace at line \(selectedLineNum!):").bold().foregroundColor(Color.secondary)
114+
if #available(macOS 12.0, *) {
115+
Text("Trace at line \(selectedLineNum!):").bold().foregroundColor(Color.secondary).textSelection(.enabled)
116+
} else {
117+
Text("Trace at line \(selectedLineNum!):").bold().foregroundColor(Color.secondary)
118+
}
117119

118120
Button("Open in Terminal", action: {
119121
let appleScript1 = "tell app \"Terminal\" to do script \"nano +\(self.selectedLineNum! + 1) '\(self.data.getFilePath())'\""
@@ -145,7 +147,12 @@ struct LineView: View {
145147
Button("Copy to clipboard", action: {
146148
let pasteboard = NSPasteboard.general
147149
pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)
148-
pasteboard.setString(self.log.traceAtLine[self.selectedLineNum!]!, forType: NSPasteboard.PasteboardType.string)
150+
var stringToCopy = Data.dateToLongTextFormatter.string(from: self.log.dateAtLine[self.selectedLineNum!]!!) + " "
151+
stringToCopy += "[" + self.log.title.rawValue + "] "
152+
stringToCopy += "[" + self.log.threadAtLine[self.selectedLineNum!]! + "] "
153+
stringToCopy += "[" + self.log.process + "] - "
154+
stringToCopy += self.log.traceAtLine[self.selectedLineNum!]!
155+
pasteboard.setString(stringToCopy, forType: NSPasteboard.PasteboardType.string)
149156
self.hasCopied = true
150157
})
151158
.onHover(perform: {val in
@@ -160,14 +167,15 @@ struct LineView: View {
160167
}
161168
.frame(minWidth: 350)
162169

163-
if (filter.ignoreCase) {
170+
if #available(macOS 12.0, *) {
164171
StyledText(verbatim: log.traceAtLine[selectedLineNum!]!)
165-
.style(.highlight(), ranges: { $0.lowercased().ranges(of: filter.searchText.lowercased()) })
172+
.style(.highlight(), ranges: { filter.includeTrace ? (filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)) : [] })
173+
.textSelection(.enabled)
166174
.frame(maxWidth: 800)
167175
.fixedSize()//magic to make the textbox fit
168176
} else {
169177
StyledText(verbatim: log.traceAtLine[selectedLineNum!]!)
170-
.style(.highlight(), ranges: { $0.ranges(of: filter.searchText) })
178+
.style(.highlight(), ranges: { filter.includeTrace ? (filter.ignoreCase ? $0.lowercased().ranges(of: filter.searchText.lowercased()) : $0.ranges(of: filter.searchText)) : [] })
171179
.frame(maxWidth: 800)
172180
.fixedSize()//magic to make the textbox fit
173181
}
@@ -240,6 +248,7 @@ extension String {
240248
}
241249
}
242250

251+
@available(macOS 12.0, *)
243252
struct LineView_Previews: PreviewProvider {
244253
static var previews: some View {
245254
LineView(filter: .constant(Filter(showErrors: true, showWarns: true, searchText: "here", includeTrace: true, ignoreCase: true)), log: Log(lineNum: [1, 2],

0 commit comments

Comments
 (0)