Skip to content

Commit

Permalink
chore(App): log process listing feature - dump version 2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
victorwads committed Apr 19, 2023
1 parent 7a4b0db commit 1be2910
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 27 deletions.
13 changes: 9 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
# App and Logger Changelog

- Future Releases
- More visual info about the logs, like battery status icon and %
- TableView for seeing processes more easylly
- Choose with infos about the logs are showed on logs screen
- Filter logs
- improve logs details layout
- open original text log files
- archive logs for better analyses and performance

* [2.1](https://github.com/victorwads/UptimeLogger/releases/download/2.0/UptimeLogger-2.0.dmg)
* App
* New Features
* Logs List with more relevant information like, batery, connected power (or not) SO Version
* Logs List with sorting, filtering by shutdown and charging status
* Log Procces Details, with sorting, filtering, serach

- [2.0.1 - Current](https://github.com/victorwads/UptimeLogger/releases/download/2.0.1/UptimeLogger-2.0.1.dmg)
- Fix for x86_64 macs
- Fix installator update service system (keep current log)

* [2.0 - Current](https://github.com/victorwads/UptimeLogger/releases/download/2.0/UptimeLogger-2.0.dmg)
* [2.0](https://github.com/victorwads/UptimeLogger/releases/download/2.0/UptimeLogger-2.0.dmg)
* App
* Fixes
* Fixed file access issue
Expand Down
2 changes: 1 addition & 1 deletion Pkg/createPackage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
BUNDLE_NAME="br.com.victorwads.UptimeLogger"
INSTALLER_NAME="Install UptimeLogger"
UNINSTALLER_NAME="Uninstall"
VERSION="2.0.1"
VERSION="2.1"

CACHE_FOLDER="cache"
APP_FOLDER="$CACHE_FOLDER/Build/Products/Release/UptimeLogger.app"
Expand Down
141 changes: 125 additions & 16 deletions Source/Views/Screens/Logs/LogsListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,136 @@

import SwiftUI

struct TextIconView: View {

let icon: String
let text: String

var body: some View {
HStack {
Text(text)
Image(systemName: icon)
}
}

}
struct LogsListView: View {

var onToggleAction: (LogItemInfo) -> Void = {_ in }
@Binding var items: [LogItemInfo]

@Binding var showFilters: Bool
@State private var sortOrder: LogSortOrder = .dateDescending
@State private var filterPowerStatus: TreeCase = .all
@State private var filterShutdownAllowed: TreeCase = .all

enum LogSortOrder {
case dateDescending
case dateAscending
case uptimeDescending
case uptimeAscending
}

enum TreeCase {
case all
case yes
case no

var state: Bool? {
switch self {
case .all:
return nil
case .yes:
return true
case .no:
return false
}
}
}


var body: some View {
if items.isEmpty {
List([0], id: \.self) { item in
HStack(alignment: .center) {
Spacer()
Text(Strings.logsNotFound.value).foregroundColor(.gray)
Spacer()
VStack {
if(showFilters) {
VStack {
HStack {
Text("Sort by:")
Picker(selection: $sortOrder, label: Text("")) {
Text("Date (newest first)").tag(LogSortOrder.dateDescending)
Text("Date (oldest first)").tag(LogSortOrder.dateAscending)
Text("Uptime (longest first)").tag(LogSortOrder.uptimeDescending)
Text("Uptime (shortest first)").tag(LogSortOrder.uptimeAscending)
}
.pickerStyle(.segmented)
}.padding(.horizontal)
HStack {
Picker(selection: $filterPowerStatus, label: Text("Charging Status:")) {
Text("All").tag(TreeCase.all)
Image(systemName: "bolt.fill")
.tag(TreeCase.yes)
.help("Power connected")
Image(systemName: "bolt.slash.fill")
.tag(TreeCase.no)
.help("Power disconnected")
}
.pickerStyle(.segmented)
Spacer()
Picker(selection: $filterShutdownAllowed, label: Text("Shutdown:")) {
Text("All").tag(TreeCase.all)
Text("Normal").tag(TreeCase.yes)
Text("Unexpected").tag(TreeCase.no)
}
.pickerStyle(.segmented)
}.padding(.horizontal)
}
}
if items.isEmpty {
List([0], id: \.self) { item in
HStack(alignment: .center) {
Spacer()
Text(Strings.logsNotFound.value).foregroundColor(.gray)
Spacer()
}
}
} else {
List(
items.filter(filterFunction).sorted(by: sortingFunction),
id: \.fileName
) { logItem in
LogItemView(
log: .constant(logItem),
showDetails: true,
onToggleAction: onToggleAction
)
Divider()
}
}
}
}

private var sortingFunction: (LogItemInfo, LogItemInfo) -> Bool {
switch sortOrder {
case .dateAscending:
return { $0.systemBootTime ?? Date.distantPast < $1.systemBootTime ?? Date.distantPast }
case .dateDescending:
return { $0.systemBootTime ?? Date.distantPast > $1.systemBootTime ?? Date.distantPast }
case .uptimeAscending:
return { $0.systemUptime ?? 0 < $1.systemUptime ?? 0 }
case .uptimeDescending:
return { $0.systemUptime ?? 0 > $1.systemUptime ?? 0 }
}
}


private var filterFunction: (LogItemInfo) -> Bool {
return { logItem in
if filterPowerStatus != .all && logItem.charging != filterPowerStatus.state {
return false
}
} else {
List(items, id: \.fileName) { logItem in
LogItemView(
log: .constant(logItem),
showDetails: true,
onToggleAction: onToggleAction
)
Divider()
if filterShutdownAllowed != .all && logItem.shutdownAllowed != filterShutdownAllowed.state {
return false
}
return true
}
}

Expand All @@ -38,7 +145,9 @@ struct LogsListView: View {
struct LogsView_Previews: PreviewProvider {
static var previews: some View {
LogsListView(items: .constant([
LogItemInfo(fileName: "", content: "")
]))
LogItemInfo(fileName: "", content: ""),
]),
showFilters: .constant(true)
)
}
}
24 changes: 18 additions & 6 deletions Source/Views/Screens/Logs/LogsScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,29 @@ struct LogsScreen: View {
@AppStorage("logsFolder") var logsFolder: String = LogsProvider.defaultLogsFolder

@State private var logs: [LogItemInfo] = []
@State var showFilters: Bool = false

let provider: LogsProvider

var body: some View {
HStack {
LegendView().padding()
LogsListView(
onToggleAction: toggleItemAction,
items: $logs
).onAppear(perform: initLogs)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.navigationTitle(Strings.mainLogs.value)
Button(action: {
withAnimation(.easeInOut(duration: 0.3)) {
showFilters.toggle()
}
}) {
Image(systemName: showFilters ? "line.3.horizontal.decrease.circle.fill" : "line.3.horizontal.decrease.circle")
}

}
LogsListView(
onToggleAction: toggleItemAction,
items: $logs,
showFilters: $showFilters
).onAppear(perform: initLogs)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.navigationTitle(Strings.mainLogs.value)
}

private func toggleItemAction(item: LogItemInfo) {
Expand Down

0 comments on commit 1be2910

Please sign in to comment.