private void CommandOpenUri_OnExecute(object objUri) { if (!CommandOpenUri_OnCanExecute(objUri)) { return; } try { if (m_vm == null) { return; } var uri = (Uri)objUri; if (uri.IsLoopback) { OpenFile(uri.LocalPath, true); } else { var downloader = new WebDownloader(); var webFile = downloader.Download(uri); using (var ms = new MemoryStream(webFile.Content)) { OpenStream(webFile.FileName, ms); } } } catch (Exception ex) { Logger.Error(ex); m_userMessage.Error(ex); } }
public void DownloadTest() { string url = @"https://foobar.com/"; string downloadFileNameFormat = "aaa{0:yyyyMMdd}.zip"; var target = new WebDownloader(); DateTime transactionDate = new DateTime(2013, 3, 5); string fileName = string.Format(downloadFileNameFormat, transactionDate); MemoryStream actual = null; actual = target.Download(string.Format("{0}/{1}", url, fileName)); Assert.IsNotNull(actual); Assert.IsTrue(actual.Length > 0); }
private static void DoWork() { var url = GetDownloadURL(); if (options.Verbose) { Console.WriteLine("Base Download url: " + url); } Console.Write("Downloading and queuing all pages please wait... "); GetPages(url, 1); Console.Write("Finished" + Environment.NewLine); if (options.SearchMode != Globals.SearchModes.search) { if (options.SearchMode != Globals.SearchModes.featured) { options.Search = options.ID.ToString(); } else { options.Search = Globals.SearchModes.featured.ToString(); } } Console.Title += "\\" + options.Search; Console.WriteLine("Downloading Images To: " + Path.Combine(options.Output, options.Search)); Console.Write("Setting up workers and task queues... "); var maxTicks = WallPapers.Count; LimitedConcurrencyLevelTaskScheduler lcts = new LimitedConcurrencyLevelTaskScheduler(options.Threads); TaskFactory factory = new TaskFactory(lcts); Console.Write("Finished" + Environment.NewLine); using (var pbar = new ProgressBar(maxTicks, "Starting", ConsoleColor.Cyan)) { pbar.UpdateMessage("Processing " + maxTicks + " pages"); var currentPage = 0; foreach (var page in WallPapers) { var tasks = new List <Task>(); Task.Run(() => { pbar.UpdateMessage("Downloading images from page " + (currentPage + 1) + "/" + maxTicks); using (var child = pbar.Spawn(page.Value.Count, "Downloading " + page.Value.Count + " images from page " + (currentPage + 1), new ProgressBarOptions { ForeGroundColor = ConsoleColor.Green })) { var current = 0; for (var i = 0; i < page.Value.Count; i++) { var temp = i; var t = factory.StartNew(() => { var text = "Downloading " + page.Value[temp].id + "." + page.Value[temp].file_type + " from " + page.Value[temp].url_image; using (var dlChild = child.Spawn(100, text, new ProgressBarOptions { ForeGroundColor = ConsoleColor.Yellow, CollapseWhenFinished = true })) { var prevPerct = 0; var folder = Path.Combine(options.Output, options.Search, page.Value[temp].id + "." + page.Value[temp].file_type); if (!Directory.Exists(Path.GetDirectoryName(folder))) { Directory.CreateDirectory(Path.GetDirectoryName(folder)); } WebDownloader.Download(page.Value[temp].url_image, folder, (perc, cur, total) => { if (perc > prevPerct) { dlChild.Tick(text, perc); prevPerct = perc; } }); } }).ContinueWith(action => { child.Tick("Downloaded " + (current = current + 1) + "/" + page.Value.Count + " images from page " + (currentPage + 1)); }); tasks.Add(t); } Task.WaitAll(tasks.ToArray()); child.UpdateMessage("Downloaded all images from page " + (currentPage + 1)); } }).ContinueWith(action => pbar.Tick("Finished Downloading images from " + (currentPage = currentPage + 1) + "/" + WallPapers.Count)).Wait(); } pbar.UpdateMessage("Finished..."); } }
/// <summary> /// Gets an image with the given path and given parameters /// when done the given callback is called /// </summary> public void GetImage(string path, Action<byte[]> callback, IDictionary<string, object> parameters = null) { // TODO: this must be more intelligent to avoid multiple download thread of the same image var cacheKey = path; if (parameters == null) parameters = new Dictionary<string, object>(); foreach (var par in parameters) { cacheKey += "_{0}_{1}".FormatWith(par.Key, par.Value); } var cached = GetCache(cacheKey); if (cached != null) { callback.Invoke(Convert.FromBase64String(cached)); return; } var client = CreateClient(); parameters.Add("access_token", client.AccessToken); var url = client.ResolveUrl(path, parameters); var downloader = new WebDownloader { Url = url, ReadBinary = true }; downloader.Completed += (a, b) => { var bytes = downloader.DataBytes; SetCache(cacheKey, Convert.ToBase64String(bytes)); //callback.Invoke(bytes); CompletePendingImageDownloader(cacheKey, bytes); }; downloader.Failed += (a, b) => { // nothing if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); } }; downloader.Download(); // add to pending list AddToPendingImageDownloaders(cacheKey, downloader, callback); }