private async Task <List <LocalItem> > RetrieveItems(CancellationToken cancellationToken) { _logger.Debug("Getting {0} from {1}", string.Join(MediaSync.PathSeparatorString, GetRemotePath().ToArray()), _provider.Name); await _remoteDataLock.WaitAsync(cancellationToken).ConfigureAwait(false); try { var fileResult = await _provider.GetFiles(GetRemotePath().ToArray(), _target, cancellationToken).ConfigureAwait(false); if (fileResult.Items.Length > 0) { using (var stream = await _provider.GetFile(fileResult.Items[0].FullName, _target, new Progress <double>(), cancellationToken)) { return(_json.DeserializeFromStream <List <LocalItem> >(stream)); } } } finally { _remoteDataLock.Release(); } return(new List <LocalItem>()); }
private async Task EnsureData(CancellationToken cancellationToken) { if (_items == null) { _logger.Debug("Getting {0} from {1}", string.Join(MediaSync.PathSeparatorString, GetRemotePath().ToArray()), _provider.Name); var fileResult = await _provider.GetFiles(new FileQuery { FullPath = GetRemotePath().ToArray() }, _target, cancellationToken).ConfigureAwait(false); if (fileResult.Items.Length > 0) { using (var stream = await _provider.GetFile(fileResult.Items[0].Id, _target, new Progress<double>(), cancellationToken)) { _items = _json.DeserializeFromStream<List<LocalItem>>(stream); } } else { _items = new List<LocalItem>(); } } }
private async Task SyncData(IServerSyncProvider provider, ISyncDataProvider dataProvider, string serverId, SyncTarget target, CancellationToken cancellationToken) { var localItems = await dataProvider.GetLocalItems(target, serverId).ConfigureAwait(false); var remoteFiles = await provider.GetFiles(new FileQuery(), target, cancellationToken).ConfigureAwait(false); var remoteIds = remoteFiles.Items.Select(i => i.Id).ToList(); var jobItemIds = new List <string>(); foreach (var localItem in localItems) { // TODO: Remove this after a while if (string.IsNullOrWhiteSpace(localItem.FileId)) { jobItemIds.Add(localItem.SyncJobItemId); } else if (remoteIds.Contains(localItem.FileId, StringComparer.OrdinalIgnoreCase)) { jobItemIds.Add(localItem.SyncJobItemId); } } var result = await _syncManager.SyncData(new SyncDataRequest { TargetId = target.Id, SyncJobItemIds = jobItemIds }).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); foreach (var itemIdToRemove in result.ItemIdsToRemove) { try { await RemoveItem(provider, dataProvider, serverId, itemIdToRemove, target, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { _logger.ErrorException("Error deleting item from device. Id: {0}", ex, itemIdToRemove); } } }
private async Task SyncData(IServerSyncProvider provider, ISyncDataProvider dataProvider, string serverId, SyncTarget target, CancellationToken cancellationToken) { var localItems = await dataProvider.GetLocalItems(target, serverId).ConfigureAwait(false); var remoteFiles = await provider.GetFiles(new FileQuery(), target, cancellationToken).ConfigureAwait(false); var remoteIds = remoteFiles.Items.Select(i => i.Id).ToList(); var jobItemIds = new List<string>(); foreach (var localItem in localItems) { // TODO: Remove this after a while if (string.IsNullOrWhiteSpace(localItem.FileId)) { jobItemIds.Add(localItem.SyncJobItemId); } else if (remoteIds.Contains(localItem.FileId, StringComparer.OrdinalIgnoreCase)) { jobItemIds.Add(localItem.SyncJobItemId); } } var result = await _syncManager.SyncData(new SyncDataRequest { TargetId = target.Id, SyncJobItemIds = jobItemIds }).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); foreach (var itemIdToRemove in result.ItemIdsToRemove) { try { await RemoveItem(provider, dataProvider, serverId, itemIdToRemove, target, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { _logger.ErrorException("Error deleting item from device. Id: {0}", ex, itemIdToRemove); } } }