mirror of
https://github.com/exituser/Pearcleaner.git
synced 2026-09-17 08:29:07 +00:00
v3.2.0
This commit is contained in:
@@ -7,9 +7,11 @@
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import ServiceManagement
|
||||
|
||||
struct GeneralSettingsTab: View {
|
||||
@EnvironmentObject var appState: AppState
|
||||
@EnvironmentObject var locations: Locations
|
||||
@State private var windowSettings = WindowSettings()
|
||||
@AppStorage("settings.general.glass") private var glass: Bool = true
|
||||
@AppStorage("settings.general.mini") private var mini: Bool = false
|
||||
@@ -26,6 +28,7 @@ struct GeneralSettingsTab: View {
|
||||
@State private var accessStatus: Bool = false
|
||||
private let themes = ["Auto", "Dark", "Light"]
|
||||
@Binding var showPopover: Bool
|
||||
@Binding var search: String
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
@@ -148,7 +151,7 @@ struct GeneralSettingsTab: View {
|
||||
.padding(5)
|
||||
.padding(.leading)
|
||||
|
||||
// =========================================================================================================
|
||||
// === Mini =================================================================================================
|
||||
|
||||
Divider()
|
||||
.padding()
|
||||
@@ -247,7 +250,7 @@ struct GeneralSettingsTab: View {
|
||||
.padding(.leading)
|
||||
|
||||
|
||||
// =========================================================================================================
|
||||
// === Perms ================================================================================================
|
||||
|
||||
|
||||
Divider()
|
||||
@@ -312,7 +315,7 @@ struct GeneralSettingsTab: View {
|
||||
.padding(.leading)
|
||||
|
||||
|
||||
// =========================================================================================================
|
||||
// === Sentinel =============================================================================================
|
||||
|
||||
Divider()
|
||||
.padding()
|
||||
@@ -362,11 +365,6 @@ struct GeneralSettingsTab: View {
|
||||
.onAppear {
|
||||
diskStatus = checkAndRequestFullDiskAccess(appState: appState, skipAlert: true)
|
||||
accessStatus = checkAndRequestAccessibilityAccess(appState: appState)
|
||||
// if displayMode.colorScheme == .dark {
|
||||
// selectedTheme = "Dark"
|
||||
// } else if displayMode.colorScheme == .light {
|
||||
// selectedTheme = "Light"
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
//
|
||||
// MenuBar.swift
|
||||
// Pearcleaner
|
||||
//
|
||||
// Created by Alin Lupascu on 3/16/24.
|
||||
//
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import ServiceManagement
|
||||
|
||||
struct MenuBarSettingsTab: View {
|
||||
@EnvironmentObject var appState: AppState
|
||||
@EnvironmentObject var locations: Locations
|
||||
@AppStorage("settings.menubar.enabled") private var menubarEnabled: Bool = false
|
||||
@State private var isLaunchAtLoginEnabled: Bool = false
|
||||
|
||||
@Binding var showPopover: Bool
|
||||
@Binding var search: String
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
VStack {
|
||||
|
||||
HStack() {
|
||||
Text("Configuration").font(.title2)
|
||||
Spacer()
|
||||
}
|
||||
.padding(.leading)
|
||||
|
||||
|
||||
HStack(spacing: 0) {
|
||||
Image(systemName: "menubar.rectangle")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20)
|
||||
.padding(.trailing)
|
||||
.foregroundStyle(.gray)
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
Text("\(menubarEnabled ? "Menubar icon enabled" : "Menubar icon disabled")")
|
||||
.font(.callout)
|
||||
.foregroundStyle(.gray)
|
||||
}
|
||||
Spacer()
|
||||
Toggle(isOn: $menubarEnabled, label: {
|
||||
})
|
||||
.toggleStyle(.switch)
|
||||
.onChange(of: menubarEnabled) { newVal in
|
||||
if newVal {
|
||||
MenuBarExtraManager.shared.addMenuBarExtra {
|
||||
MenuBarMiniAppView(search: $search, showPopover: $showPopover)
|
||||
.environmentObject(locations)
|
||||
.environmentObject(appState)
|
||||
}
|
||||
} else {
|
||||
MenuBarExtraManager.shared.removeMenuBarExtra()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.padding(5)
|
||||
.padding(.leading)
|
||||
|
||||
|
||||
HStack(spacing: 0) {
|
||||
Image(systemName: isLaunchAtLoginEnabled ? "person.crop.circle.badge.checkmark" : "person.crop.circle")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20)
|
||||
.padding(.trailing)
|
||||
.foregroundStyle(.gray)
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
Text("\(isLaunchAtLoginEnabled ? "Launch at login enabled" : "Launch at login disabled")")
|
||||
.font(.callout)
|
||||
.foregroundStyle(.gray)
|
||||
}
|
||||
Spacer()
|
||||
Toggle(isOn: $isLaunchAtLoginEnabled, label: {
|
||||
})
|
||||
.toggleStyle(.switch)
|
||||
.onAppear {
|
||||
isLaunchAtLoginEnabled = SMAppService.mainApp.status == .enabled
|
||||
}
|
||||
.onChange(of: isLaunchAtLoginEnabled) { newValue in
|
||||
do {
|
||||
if newValue {
|
||||
if SMAppService.mainApp.status == .enabled {
|
||||
try? SMAppService.mainApp.unregister()
|
||||
}
|
||||
|
||||
try SMAppService.mainApp.register()
|
||||
} else {
|
||||
try SMAppService.mainApp.unregister()
|
||||
}
|
||||
} catch {
|
||||
printOS("Failed to \(newValue ? "enable" : "disable") launch at login: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.padding(5)
|
||||
.padding(.leading)
|
||||
|
||||
Spacer()
|
||||
}
|
||||
|
||||
}
|
||||
.padding(20)
|
||||
.frame(width: 500, height: 690)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,30 +10,37 @@ import SwiftUI
|
||||
struct SettingsView: View {
|
||||
@EnvironmentObject var appState: AppState
|
||||
@Binding var showPopover: Bool
|
||||
@Binding var search: String
|
||||
@Binding var showFeature: Bool
|
||||
@AppStorage("settings.general.glass") private var glass: Bool = true
|
||||
|
||||
var body: some View {
|
||||
|
||||
TabView() {
|
||||
GeneralSettingsTab(showPopover: $showPopover)
|
||||
GeneralSettingsTab(showPopover: $showPopover, search: $search)
|
||||
.tabItem {
|
||||
Label(CurrentTabView.general.title, systemImage: "gear")
|
||||
}
|
||||
.tag(CurrentTabView.general)
|
||||
|
||||
|
||||
MenuBarSettingsTab(showPopover: $showPopover, search: $search)
|
||||
.tabItem {
|
||||
Label(CurrentTabView.menubar.title, systemImage: "menubar.rectangle")
|
||||
}
|
||||
.tag(CurrentTabView.menubar)
|
||||
|
||||
UpdateSettingsTab(showFeature: $showFeature)
|
||||
.tabItem {
|
||||
Label(CurrentTabView.update.title, systemImage: "cloud")
|
||||
}
|
||||
.tag(CurrentTabView.update)
|
||||
|
||||
|
||||
AboutSettingsTab()
|
||||
.tabItem {
|
||||
Label(CurrentTabView.about.title, systemImage: "info.circle")
|
||||
}
|
||||
.tag(CurrentTabView.about)
|
||||
|
||||
|
||||
}
|
||||
.background(glass ? GlassEffect(material: .sidebar, blendingMode: .behindWindow).edgesIgnoringSafeArea(.all) : nil)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user