public async Task <ResourceLoadStatus> GetStreamAsync(ResourceItem resourceItem, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(ResourceLoadStatus.OperationCanceled); } if (resourceItem.IsCollection) { return(ResourceLoadStatus.IsCollection); } if (resourceItem.Stream != null && resourceItem.Stream.CanRead) { return(ResourceLoadStatus.StreamExisting); } try { resourceItem.Stream = new MemoryStream(); bool isSuccessful = await _session.DownloadFileAsync(resourceItem.FullPath, resourceItem.Stream, cancellationToken); if (isSuccessful) { resourceItem.MediaDetails = MediaInfoHelper.GetMediaDetails(resourceItem.Stream); return(ResourceLoadStatus.Ok); } resourceItem.Stream.Close(); resourceItem.Stream.Dispose(); resourceItem.Stream = null; return(ResourceLoadStatus.StreamFailedToLoad); } catch (TaskCanceledException) { return(ResourceLoadStatus.OperationCanceled); } }
public async Task <ResourceLoadStatus> GetStreamAsync(ResourceItem resourceItem, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(ResourceLoadStatus.OperationCanceled); } if (resourceItem.IsCollection) { return(ResourceLoadStatus.IsCollection); } if (resourceItem.Stream != null && resourceItem.Stream.CanRead) { return(ResourceLoadStatus.StreamExisting); } try { var webDavStreamResponse = await _client.GetRawFile(resourceItem.FullPath).WithCancellation(cancellationToken); if (webDavStreamResponse.IsSuccessful) { resourceItem.Stream = webDavStreamResponse.Stream; resourceItem.MediaDetails = MediaInfoHelper.GetMediaDetails(resourceItem.Stream); return(ResourceLoadStatus.Ok); } resourceItem.Stream = null; return(ResourceLoadStatus.StreamFailedToLoad); } catch (OperationCanceledException) { return(ResourceLoadStatus.OperationCanceled); } }