feat: Sync tab, hamburger menu, network status, browse UX
- Replace History tab with Sync tab (file list, NAS status, free-up-space retention) - Add AppMenuView hamburger sheet (History, Errors, Connection Status, Sync Activity) - BackupView: Kisani logo chip in toolbar, hamburger menu button, swipeable ring pages (progress/pending/failed/uploaded), always-visible compact stats strip - SettingsView: NETWORK section (SSID, NAS reachability, trusted-network warning, refresh button) - BrowseView: pull-to-refresh, long-press context menu on items - LANMonitor: nasReachable, nasCheckTime, checkNASReachability(host:port:) - ConnectionStore: localRetentionDays (0/60/90/365 days) - Regenerate xcodeproj with xcodegen to include new files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,7 @@ struct BrowseView: View {
|
||||
}
|
||||
}
|
||||
.task { await loadItems(path: currentPath) }
|
||||
.refreshable { await loadItems(path: currentPath) }
|
||||
}
|
||||
|
||||
// MARK: — Sub-views
|
||||
@@ -190,6 +191,31 @@ struct BrowseView: View {
|
||||
selectedPath = item.path
|
||||
}
|
||||
}
|
||||
.contextMenu {
|
||||
if item.isDirectory {
|
||||
Button {
|
||||
navigate(to: item.path)
|
||||
} label: {
|
||||
Label("Open Folder", systemImage: "folder")
|
||||
}
|
||||
Button {
|
||||
selectedPath = item.path
|
||||
} label: {
|
||||
Label("Select This Folder", systemImage: "checkmark.circle")
|
||||
}
|
||||
} else {
|
||||
Button {
|
||||
// Placeholder: Make available offline
|
||||
} label: {
|
||||
Label("Make Available Offline", systemImage: "arrow.down.circle")
|
||||
}
|
||||
}
|
||||
Button(role: .destructive) {
|
||||
// Placeholder: context-sensitive action
|
||||
} label: {
|
||||
Label("More Info", systemImage: "info.circle")
|
||||
}
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
.listRowSeparator(.hidden)
|
||||
.listRowBackground(Color.clear)
|
||||
|
||||
Reference in New Issue
Block a user