public async Task <bool> FullSyncAsync(bool forceSync = false) { if (!_authService.IsAuthenticated) { return(false); } if (!forceSync && !(await NeedsToSyncAsync())) { _settings.AddOrUpdateValue(Constants.LastSync, DateTime.UtcNow); return(false); } SyncStarted(); var now = DateTime.UtcNow; var ciphers = await _cipherApiRepository.GetAsync().ConfigureAwait(false); var domains = await _settingsApiRepository.GetDomains(false).ConfigureAwait(false); if (!ciphers.Succeeded || !domains.Succeeded) { SyncCompleted(false); if (Application.Current == null) { return(false); } if (ciphers.StatusCode == System.Net.HttpStatusCode.Forbidden || ciphers.StatusCode == System.Net.HttpStatusCode.Unauthorized || domains.StatusCode == System.Net.HttpStatusCode.Forbidden || domains.StatusCode == System.Net.HttpStatusCode.Unauthorized) { MessagingCenter.Send(Application.Current, "Logout", (string)null); } return(false); } var logins = ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Login).ToDictionary(s => s.Id); var folders = ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Folder).ToDictionary(f => f.Id); var loginTask = SyncLoginsAsync(logins); var folderTask = SyncFoldersAsync(folders); var domainsTask = SyncDomainsAsync(domains.Result); await Task.WhenAll(loginTask, folderTask, domainsTask).ConfigureAwait(false); if (folderTask.Exception != null || loginTask.Exception != null || domainsTask.Exception != null) { SyncCompleted(false); return(false); } _settings.AddOrUpdateValue(Constants.LastSync, now); SyncCompleted(true); return(true); }
public async Task <bool> SyncSettingsAsync() { if (!_authService.IsAuthenticated) { return(false); } SyncStarted(); var domains = await _settingsApiRepository.GetDomains(false).ConfigureAwait(false); if (!CheckSuccess(domains)) { return(false); } await SyncDomainsAsync(domains.Result); SyncCompleted(true); return(true); }