Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }