Exemple #1
0
        public async Task <bool> IsAvailableAsync(PackageIdentity identity, CancellationToken token)
        {
            var request = new HttpSourceRequest(() =>
            {
                var url = _urlBuilder.GetSymbolsUrl(identity);

                // Ideally this would be an HTTP HEAD request, but MyGet does not seem to support
                // this. As an alternative, make an HTTP GET range request for 0 bytes.
                var requestMessage           = new HttpRequestMessage(HttpMethod.Get, url);
                requestMessage.Headers.Range = new RangeHeaderValue(0, 0);

                return(requestMessage);
            });

            request.IgnoreNotFounds = true;

            var output = await _httpSource.ProcessStreamAsync(
                request,
                stream =>
            {
                var isAvailable = stream != null;
                return(Task.FromResult(isAvailable));
            },
                _logger,
                token);

            return(output);
        }
Exemple #2
0
        public async Task <T> ProcessAsync <T>(PackageIdentity identity, Func <StreamResult, Task <T> > processAsync, CancellationToken token)
        {
            var url = _urlBuilder.GetSymbolsUrl(identity);

            var request = new HttpSourceRequest(url, _logger);

            request.IgnoreNotFounds = true;

            var output = await _httpSource.ProcessStreamAsync(
                request,
                async stream =>
            {
                if (stream == null)
                {
                    var result = new StreamResult
                    {
                        IsAvailable = false,
                        Stream      = Stream.Null
                    };

                    return(await processAsync(result));
                }
                else
                {
                    // Save the symbols package to a temporary location.
                    var temporaryPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
                    using (var fileStream = new FileStream(
                               temporaryPath,
                               FileMode.Create,
                               FileAccess.ReadWrite,
                               FileShare.None,
                               BufferSize,
                               FileOptions.Asynchronous | FileOptions.DeleteOnClose))
                    {
                        await stream.CopyToAsync(fileStream);

                        fileStream.Position = 0;

                        var result = new StreamResult
                        {
                            IsAvailable = true,
                            Stream      = fileStream
                        };

                        return(await processAsync(result));
                    }
                }
            },
                _logger,
                token);

            return(output);
        }
Exemple #3
0
        public async Task <IReadOnlyList <VsixPackage> > EnumerateAsync(CancellationToken token)
        {
            var request = new HttpSourceRequest(_source, _logger);

            request.IgnoreNotFounds = false;

            return(await _httpSource.ProcessStreamAsync(
                       request,
                       stream =>
            {
                var doc = XDocument.Load(stream);
                var entries = doc.Root.Elements(XName.Get("entry", AtomXmlns));

                var packages = new List <VsixPackage>();

                foreach (var entry in entries)
                {
                    var contentElement = entry.Element(XName.Get("content", AtomXmlns));
                    var contentSrcAttribute = contentElement.Attribute("src");
                    var contentSrc = contentSrcAttribute.Value;

                    var vsix = entry.Element(XName.Get("Vsix", VsixXmlns));

                    var idElement = vsix.Element(XName.Get("Id", VsixXmlns));
                    var id = idElement.Value;

                    var versionElement = vsix.Element(XName.Get("Version", VsixXmlns));
                    var version = versionElement.Value;

                    var package = new VsixPackage
                    {
                        Id = id,
                        Version = version,
                        Url = contentSrc
                    };

                    packages.Add(package);
                }

                return Task.FromResult(packages);
            },
                       _logger,
                       token));
        }
        public async Task<IReadOnlyList<VsixPackage>> EnumerateAsync(CancellationToken token)
        {
            var request = new HttpSourceRequest(_source, _logger);
            request.IgnoreNotFounds = false;

            return await _httpSource.ProcessStreamAsync(
                request,
                stream =>
                {
                    var doc = XDocument.Load(stream);
                    var entries = doc.Root.Elements(XName.Get("entry", AtomXmlns));

                    var packages = new List<VsixPackage>();

                    foreach (var entry in entries)
                    {
                        var contentElement = entry.Element(XName.Get("content", AtomXmlns));
                        var contentSrcAttribute = contentElement.Attribute("src");
                        var contentSrc = contentSrcAttribute.Value;

                        var vsix = entry.Element(XName.Get("Vsix", VsixXmlns));

                        var idElement = vsix.Element(XName.Get("Id", VsixXmlns));
                        var id = idElement.Value;

                        var versionElement = vsix.Element(XName.Get("Version", VsixXmlns));
                        var version = versionElement.Value;

                        var package = new VsixPackage
                        {
                            Id = id,
                            Version = version,
                            Url = contentSrc
                        };

                        packages.Add(package);
                    }

                    return Task.FromResult(packages);
                },
                _logger,
                token);
        }