Example #1
0
        private async Task ResourceHandler(IHtmlNode referenceNode, string attributeName, string localPath, string prefix)
        {
            var referenceUri   = new Uri(baseUri, referenceNode.Attributes[attributeName].Value);
            var localReference = Path.Combine(localPath, prefix + referenceUri.ToString().GetHashCode().ToString() + Path.GetExtension(referenceUri.LocalPath.Replace(@"/", @"\")));

            referenceNode.Attributes[attributeName].Value = localReference;

            if (map.TryAdd(referenceUri.ToString(), localReference))
            {
                using (var stream = fileSystem.OpenStreamFor(localReference))
                {
                    await loader.DownloadAsync(referenceUri.ToString(), stream);
                }
            }
        }
Example #2
0
        public async Task DownloadAsync(string uri, Stream stream)
        {
            if (Interlocked.Increment(ref threadCount) >= parallelRestrictNumber)
            {
                synchronizer.WaitOne();
            }

            try
            {
                Interlocked.Increment(ref activeThreadCount);
                await loader.DownloadAsync(uri, stream);
            }
            finally
            {
                Interlocked.Decrement(ref activeThreadCount);
                Interlocked.Decrement(ref threadCount);
                synchronizer.Set();
            }
        }
Example #3
0
 public void Initialize()
 {
     loader    = new LoaderFromResource();
     loaderMoq = new Mock <IWebLoader>();
     loaderMoq.Setup(m => m.DownloadAsync(It.IsAny <string>(), It.IsAny <Stream>())).Returns <string, Stream>((uri, stream) => loader.DownloadAsync(uri, stream));
     fileSystemMoq = new Mock <IFileSystemWrapper>();
     fileSystemMoq.Setup(m => m.OpenStreamFor(It.IsAny <string>())).Returns(() => new MemoryStream());
 }