Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }