Internal tooling for Mac utility for storage management.
Swift
98.7%
JSON
1.1%
Markdown
0.2%
//
// ContentView.swift
// MUA
//
// Created by Mitchel Volkering on 21/12/2025.
//
import SwiftUI
struct ContentView: View {
@State private var selectedNavItem: NavigationItem = .spaceLens
@State private var disks: [DiskInfo] = []
@State private var showPermissionSheet = false
@State private var hasCompletedOnboarding = false
@ObservedObject private var accessManager = FullDiskAccessManager.shared
var body: some View {
Group {
if !hasCompletedOnboarding && accessManager.hasCheckedAccess && !accessManager.hasFullDiskAccess {
// Show permission request on first launch if no access
FullDiskAccessView(
onContinueWithoutAccess: {
hasCompletedOnboarding = true
},
onAccessGranted: {
hasCompletedOnboarding = true
}
)
} else {
mainContent
}
}
.onAppear {
// If already has access, skip onboarding
if accessManager.hasFullDiskAccess {
hasCompletedOnboarding = true
}
}
}
private var mainContent: some View {
NavigationSplitView {
SidebarView(selectedItem: $selectedNavItem, disks: disks)
} detail: {
detailView
}
.navigationTitle(selectedNavItem.rawValue)
.toolbar {
ToolbarItem(placement: .automatic) {
// Permission status indicator
Button {
showPermissionSheet = true
} label: {
HStack(spacing: 4) {
Circle()
.fill(accessManager.hasFullDiskAccess ? .green : .orange)
.frame(width: 8, height: 8)
Text(accessManager.hasFullDiskAccess ? "Full Access" : "Limited Access")
.font(.caption)
}
.padding(.horizontal, 8)
.padding(.vertical, 4)
.background(.ultraThinMaterial, in: Capsule())
}
.buttonStyle(.plain)
.help(accessManager.hasFullDiskAccess
? "Full Disk Access is enabled"
: "Some folders may be hidden. Click to grant Full Disk Access.")
}
}
.sheet(isPresented: $showPermissionSheet) {
FullDiskAccessView(
onContinueWithoutAccess: {
showPermissionSheet = false
},
onAccessGranted: {
showPermissionSheet = false
}
)
}
.onAppear {
disks = DiskInfo.getAllDisks()
}
}
@ViewBuilder
private var detailView: some View {
switch selectedNavItem {
case .spaceLens:
SpaceLensContainer()
case .disks:
DisksView()
case .largeFiles:
LargeFilesView()
case .cleanup:
CleanupView()
}
}
}
#Preview {
ContentView()
.frame(width: 1000, height: 700)
}
About
Internal tooling for Mac utility for storage management.
0 stars
0 forks