From 990f1e8e8fda67537a3a4ed3a067011e3b81e7dd Mon Sep 17 00:00:00 2001 From: smizrahi Date: Mon, 5 Aug 2024 11:09:27 +0200 Subject: [PATCH] fix(preferences): Can not save preferences when there is a constraint on mail --- UI/PreferencesUI/UIxPreferences.m | 59 +++++++++++++++++-------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/UI/PreferencesUI/UIxPreferences.m b/UI/PreferencesUI/UIxPreferences.m index 8f7d7b247..8e559ef4e 100644 --- a/UI/PreferencesUI/UIxPreferences.m +++ b/UI/PreferencesUI/UIxPreferences.m @@ -1946,38 +1946,45 @@ static NSArray *reminderValues = nil; [[[user userDefaults] source] setValues: v]; - if ([[user userDefaults] synchronize] && [self userHasMailAccess]) - { - NSException *error; - SOGoMailAccount *account; - SOGoMailAccounts *folder; - SOGoDomainDefaults *dd; + if ([self userHasMailAccess]) { + if ([[user userDefaults] synchronize]) + { + NSException *error; + SOGoMailAccount *account; + SOGoMailAccounts *folder; + SOGoDomainDefaults *dd; - dd = [[context activeUser] domainDefaults]; + dd = [[context activeUser] domainDefaults]; - // We check if the Sieve server is available *ONLY* if at least one of the option is enabled - if (!([dd sieveScriptsEnabled] || [dd vacationEnabled] || [dd forwardEnabled] || [dd notificationEnabled]) - || [self _isSieveServerAvailable]) - { - BOOL forceActivation = ![[v objectForKey: @"hasActiveExternalSieveScripts"] boolValue]; + // We check if the Sieve server is available *ONLY* if at least one of the option is enabled + if (!([dd sieveScriptsEnabled] || [dd vacationEnabled] || [dd forwardEnabled] || [dd notificationEnabled]) + || [self _isSieveServerAvailable]) + { + BOOL forceActivation = ![[v objectForKey: @"hasActiveExternalSieveScripts"] boolValue]; - folder = [[[context activeUser] homeFolderInContext: context] mailAccountsFolder: @"Mail" - inContext: context]; - account = [folder lookupName: @"0" inContext: context acquire: NO]; + folder = [[[context activeUser] homeFolderInContext: context] mailAccountsFolder: @"Mail" + inContext: context]; + account = [folder lookupName: @"0" inContext: context acquire: NO]; - if ((error = [account updateFiltersAndForceActivation: forceActivation])) - { - results = (id ) [self responseWithStatus: 500 - andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: [error reason], @"message", nil]]; - } - } - else - results = (id ) [self responseWithStatus: 503 - andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: @"Service temporarily unavailable", @"message", nil]]; - } else { + if ((error = [account updateFiltersAndForceActivation: forceActivation])) + { + results = (id ) [self responseWithStatus: 500 + andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: [error reason], @"message", nil]]; + } + } + else + results = (id ) [self responseWithStatus: 503 + andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: @"Service temporarily unavailable", @"message", nil]]; + } else { + results = (id ) [self responseWithStatus: 500 + andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: @"Error during the validation", @"message", nil]]; + } + } else { + if (![[user userDefaults] synchronize]) { results = (id ) [self responseWithStatus: 500 - andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: @"Error during the validation", @"message", nil]]; + andJSONRepresentation: [NSDictionary dictionaryWithObjectsAndKeys: @"Error during the validation", @"message", nil]]; } + } } if ((v = [o objectForKey: @"settings"]))