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