From 45a72f8d10f5fb4936011fa84d9422118ab91928 Mon Sep 17 00:00:00 2001 From: psavarmattas Date: Sat, 15 Aug 2026 00:30:55 +0100 Subject: [PATCH] fix(settings): surface the actual full-sync error, not just a count "Synced with 1 error" gave no way to tell what failed. Now lists each FullSyncSummary.errors entry underneath the summary line. --- Outpost/Features/Account/SettingsView.swift | 31 +++++++++++++-------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/Outpost/Features/Account/SettingsView.swift b/Outpost/Features/Account/SettingsView.swift index 3f939f8..20d4a4c 100644 --- a/Outpost/Features/Account/SettingsView.swift +++ b/Outpost/Features/Account/SettingsView.swift @@ -173,19 +173,28 @@ struct SettingsView: View { .frame(maxWidth: 480, alignment: .leading) if isFullLocalSyncEnabled { - HStack(spacing: 8) { - if isSyncing { - ProgressView().controlSize(.small) - Text("Syncing…") - .font(.caption) - .foregroundStyle(.secondary) - } else { - Button("Sync Now") { Task { await runFullSync() } } - .controlSize(.small) - if let lastFullSyncSummary { - Text(fullSyncSummaryText(lastFullSyncSummary)) + VStack(alignment: .leading, spacing: 6) { + HStack(spacing: 8) { + if isSyncing { + ProgressView().controlSize(.small) + Text("Syncing…") .font(.caption) .foregroundStyle(.secondary) + } else { + Button("Sync Now") { Task { await runFullSync() } } + .controlSize(.small) + if let lastFullSyncSummary { + Text(fullSyncSummaryText(lastFullSyncSummary)) + .font(.caption) + .foregroundStyle(lastFullSyncSummary.errors.isEmpty ? .secondary : .red) + } + } + } + if let lastFullSyncSummary, !isSyncing { + ForEach(Array(lastFullSyncSummary.errors.enumerated()), id: \.offset) { _, message in + Text(message) + .font(.caption2) + .foregroundStyle(.red) } } }