From 7a2c6bec8ccde3f1d345a7f8e69b5c1fba7edae4 Mon Sep 17 00:00:00 2001 From: Graeme Arthur <2030310+graeme@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:54:19 +0100 Subject: [PATCH] Sync: Don't send unexpected disable pixel on 401 --- .../Preferences/Model/SyncPreferences.swift | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/Preferences/Model/SyncPreferences.swift b/DuckDuckGo/Preferences/Model/SyncPreferences.swift index 188cd353c2..9126b9ae33 100644 --- a/DuckDuckGo/Preferences/Model/SyncPreferences.swift +++ b/DuckDuckGo/Preferences/Model/SyncPreferences.swift @@ -170,6 +170,8 @@ final class SyncPreferences: ObservableObject, SyncUI_macOS.ManagementViewModel private let featureFlagger: FeatureFlagger + private let diagnosisHelper: SyncDiagnosisHelper + init( syncService: DDGSyncing, syncBookmarksAdapter: SyncBookmarksAdapter, @@ -193,6 +195,7 @@ final class SyncPreferences: ObservableObject, SyncUI_macOS.ManagementViewModel self.isUnifiedFavoritesEnabled = appearancePreferences.favoritesDisplayMode.isDisplayUnified self.managementDialogModel = managementDialogModel + diagnosisHelper = SyncDiagnosisHelper(syncService: syncService) self.managementDialogModel.delegate = self updateSyncFeatureFlags(self.syncFeatureFlags) @@ -381,6 +384,10 @@ final class SyncPreferences: ObservableObject, SyncUI_macOS.ManagementViewModel let registeredDevices = try await syncService.fetchDevices() mapDevices(registeredDevices) } catch { + if case SyncError.unauthenticatedWhileLoggedIn = error { + // Ruling this out as it's a predictable event likely caused by disabling on another device + diagnosisHelper.didManuallyDisableSync() + } PixelKit.fire(DebugEvent(GeneralPixel.syncRefreshDevicesError(error: error), error: error)) Logger.sync.debug("Failed to refresh devices: \(error)") } @@ -451,7 +458,7 @@ extension SyncPreferences: ManagementDialogModelDelegate { try await syncService.disconnect() managementDialogModel.endFlow() syncPausedStateManager.syncDidTurnOff() - SyncDiagnosisHelper(syncService: syncService).didManuallyDisableSync() + diagnosisHelper.didManuallyDisableSync() } catch { managementDialogModel.syncErrorMessage = SyncErrorMessage(type: .unableToTurnSyncOff, description: error.localizedDescription) PixelKit.fire(DebugEvent(GeneralPixel.syncLogoutError(error: error))) @@ -465,7 +472,7 @@ extension SyncPreferences: ManagementDialogModelDelegate { try await syncService.deleteAccount() managementDialogModel.endFlow() syncPausedStateManager.syncDidTurnOff() - SyncDiagnosisHelper(syncService: syncService).didManuallyDisableSync() + diagnosisHelper.didManuallyDisableSync() } catch { managementDialogModel.syncErrorMessage = SyncErrorMessage(type: .unableToDeleteData, description: error.localizedDescription) PixelKit.fire(DebugEvent(GeneralPixel.syncDeleteAccountError(error: error))) @@ -482,6 +489,10 @@ extension SyncPreferences: ManagementDialogModelDelegate { managementDialogModel.endFlow() mapDevices(devices) } catch { + if case SyncError.unauthenticatedWhileLoggedIn = error { + // Ruling this out as it's a predictable event likely caused by disabling on another device + diagnosisHelper.didManuallyDisableSync() + } managementDialogModel.syncErrorMessage = SyncErrorMessage(type: .unableToUpdateDeviceName, description: error.localizedDescription) PixelKit.fire(DebugEvent(GeneralPixel.syncUpdateDeviceError(error: error))) }