Exemple #1
0
 public IEnumerable <VacantionRequest> GetVacantionRequests()
 => VacationRequestsRepository.GetAll();
Exemple #2
0
        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;
            }
        }