public IEnumerable <VacantionRequest> GetVacantionRequests() => VacationRequestsRepository.GetAll();
private async Task Synchronization(CancellationToken cancellationToken) { bool success = false; try { var changedModels = VacationRequestsRepository.GetAll() .Where((arg) => arg.SyncState != SynchronizationState.Synced) .ToList(); var uploadSuccess = !changedModels.Any(); if (!uploadSuccess) { var uploadNotSyncModels = await UploadSynchronization(changedModels, cancellationToken); uploadSuccess = uploadNotSyncModels; } if (uploadSuccess) { var vacationDtos = await VacationRequestsApiService.GetVacations(cancellationToken); var backendModels = vacationDtos ?.Select(SetupVacationRequest) .ToList() ?? new List <VacantionRequest>(); cancellationToken.ThrowIfCancellationRequested(); var localSyncedModels = VacationRequestsRepository .GetAll() .Where(t => t.SyncState == SynchronizationState.Synced) .ToList(); var removedModels = localSyncedModels .Any(l => backendModels .All(b => b.Id != l.Id)); if (removedModels || (backendModels.Any() && !localSyncedModels.Any())) { ResetLocalItems(localSyncedModels, backendModels, cancellationToken); } else { UpdateLocalItems(localSyncedModels, backendModels, cancellationToken); } success = true; } } catch (OperationCanceledException) { } catch (Exception) { } lock (_syncRoot) { if (cancellationToken.IsCancellationRequested) { return; } _syncTCS.TrySetResult(success); _syncTCS = null; } }