- performFullSync was requesting listCollections with limit: 250 —
Outline caps pagination at 100 and rejects anything over that
outright, which was the actual "Synced with 1 error" (now visible
in the UI as of the last fix: "Pagination limit is too large (max
100)"). Paginate collections in increments of 100 the same way
documents already were, continuing until a short page signals the
end — the protocol doesn't expose a total count to ask for up front,
so this is the only way to know when to stop. 2 new regression tests.
- OfflineBanner only ever reflected NetworkMonitor (a real dropped
connection) — turning on the manual "Offline Mode" toggle did
nothing to it, since that's a separate AppStorage flag the banner
never read. ContentView_macOS's sidebar now shows the banner for
either condition, with distinct copy for "you turned this on" vs
"the network's actually down".
- NetworkMonitor: the previous fix (weak self only on the inner Task)
traded one Swift 6 error for another ("'weak' ownership of capture
'self' differs from implicitly-captured strong reference in outer
scope") since the inner closure's capture forced the outer one to
implicitly capture self too. Standard fix: weak capture on the outer
closure, guard-let into a strong local immediately, let the inner
Task closure capture that plain local instead.
28 lines
1.0 KiB
Swift
28 lines
1.0 KiB
Swift
#if os(macOS)
|
|
import SwiftUI
|
|
|
|
/// Shown at the top of the sidebar whenever the app is offline — either for
|
|
/// real (`NetworkMonitor` reports no connection) or because the user turned
|
|
/// on the manual "Offline Mode" toggle. Cached collections/documents keep
|
|
/// browsing working either way, but the user should know they might be
|
|
/// looking at stale data.
|
|
struct OfflineBanner: View {
|
|
/// Whether this is the user's own "Offline Mode" toggle rather than a
|
|
/// real dropped connection — same banner slot, different explanation.
|
|
var isManual: Bool = false
|
|
|
|
var body: some View {
|
|
HStack(spacing: 8) {
|
|
Image(systemName: "wifi.slash")
|
|
.foregroundStyle(.orange)
|
|
Text(isManual ? "Offline Mode — showing cached content" : "Offline — showing cached content")
|
|
.font(.callout)
|
|
Spacer(minLength: 0)
|
|
}
|
|
.padding(.horizontal, 12)
|
|
.padding(.vertical, 8)
|
|
.background(Color.orange.opacity(0.12))
|
|
}
|
|
}
|
|
#endif
|