public ParallelPhilomenaImageSearchDownloader(IPhilomenaImageSearch imageSearch, IPhilomenaImageDownloader imageDownloader, int maxDownloadThreads) { _logger = Logger.Factory.CreateLogger(GetType()); _imageSearch = imageSearch; _imageDownloader = imageDownloader; _maxDownloadThreads = maxDownloadThreads; }
public async Task RunExample() { PhilomenaClient client = new PhilomenaClient("https://derpibooru.org"); IPhilomenaImageSearch search = client.GetImageSearch("fluttershy", o => o .WithMaxImages(5) ); Log.Information("Download query simple"); // Using download all method await search .CreateParallelDownloader(maxDownloadThreads : 8, o => o .WithImageFileDownloader(image => $"ExampleDownloads/EnumerateSearchQuery/{image.Id}.{image.Format}") ) .BeginDownload(); Log.Information("Download query with delegates, skipping existing images"); // Use a conditional downloader to skip images already downloaded // Note that filters in the search query itself are preferred since they will provide better performance. Don't use conditional downloaders for conditions like image score. await search .CreateParallelDownloader(maxDownloadThreads : 8, o => o .WithConditionalDownloader(SkipImagesAlreadyDownloaded, o => o .WithImageFileDownloader(GetFileForImage) ) ) .BeginDownload(); Log.Information("Downloading images explicitly"); // Explicitly looping over each image and saving await foreach (IPhilomenaImage image in search.BeginSearch()) { string filename = $"ExampleDownloads/EnumerateSearchQuery/{image.Id}.{image.Format}"; await image.DownloadToFile(filename); } Log.Information("Downloading with multiple threads and progress updates"); // Downloading with multiple threads and progress updates // Also skips downloaded images like before SyncProgress <PhilomenaImageSearchDownloadProgressInfo> progress = new SyncProgress <PhilomenaImageSearchDownloadProgressInfo>(DownloadProgressUpdate); await client .GetImageSearch("fluttershy", o => o .WithMaxImages(100) ) .CreateParallelDownloader(maxDownloadThreads: 8, o => o .WithConditionalDownloader(SkipImagesAlreadyDownloaded, o => o .WithImageFileDownloader(GetFileForImage) .WithImageMetadataFileDownloader(GetMetadataFileForImage) ) ) .BeginDownload(searchDownloadProgress: progress); }
/// <summary> /// Creates a parallel downloader for a search query /// </summary> /// <param name="imageSearch">The image search to download</param> /// <param name="maxDownloadThreads">The max number of threads to use when downloading</param> /// <param name="buildImageDownloader">Configures a sequential image downloader builder</param> /// <returns>A parallel downloader for the search query</returns> public static ParallelPhilomenaImageSearchDownloader CreateParallelDownloader(this IPhilomenaImageSearch imageSearch, int maxDownloadThreads, Func <SequentialPhilomenaImageDownloaderBuilder, SequentialPhilomenaImageDownloaderBuilder> buildImageDownloader) { SequentialPhilomenaImageDownloaderBuilder builder = new SequentialPhilomenaImageDownloaderBuilder(); SequentialPhilomenaImageDownloader imageDownloader = buildImageDownloader(builder).Build(); return(new ParallelPhilomenaImageSearchDownloader(imageSearch, imageDownloader, maxDownloadThreads)); }
/// <summary> /// Creates a parallel downloader for a search query /// </summary> /// <param name="imageSearch">The image search to download</param> /// <param name="maxDownloadThreads">The max number of threads to use when downloading</param> /// <param name="imageDownloader">The downloader to use</param> /// <returns>A parallel downloader for the search query</returns> public static ParallelPhilomenaImageSearchDownloader CreateParallelDownloader(this IPhilomenaImageSearch imageSearch, int maxDownloadThreads, IPhilomenaImageDownloader imageDownloader) { return(new ParallelPhilomenaImageSearchDownloader(imageSearch, imageDownloader, maxDownloadThreads)); }