private async Task<IEnumerable<LocomotiveImage>> DownloadUserImagesAsync(string host, string pageUrl) { var result = new List<LocomotiveImage>(); try { string html = null; using (var client = new HttpClient()) html = await client.GetStringAsync($"http://{host}{pageUrl}"); if (!string.IsNullOrEmpty(html)) { var document = new HtmlDocument(); document.LoadHtml(html); var navListParagraph = document.DocumentNode.Descendants("p").Where(i => i.GetAttributeValue("class", "").Contains("navlist")).FirstOrDefault(); if (navListParagraph != null) { var imgs = document.DocumentNode.Descendants("img").Where(i => i.GetAttributeValue("src", "").Contains(".bmp")).ToList(); foreach (var img in imgs) { var tr = img.Ancestors("tr").FirstOrDefault(); if (tr != null) { var tds = tr.Descendants("td").ToList(); int idx = int.Parse(tds[0].InnerText); string name = tds[2].InnerText.Replace("\n", ""); string url = img.GetAttributeValue("src", null); var item = new LocomotiveImage(LocomotiveImageType.User, idx, name); await item.PopulateAsync(new Uri(string.Format(@"http://{0:s}{1:s}", host, url), UriKind.Absolute)); result.Add(item); //var item = UserImages.FirstOrDefault(userImg => userImg.Index == idx); //if (item != null) //{ // item.Name = name; // await item.PopulateAsync(new Uri(string.Format(@"http://{0:s}{1:s}", host, url), UriKind.Absolute)); //} } } //var unusedIdx = new List<int>(UserImages.Where(item => item.BitmapImage == null).Select(item => item.Index)); //foreach (var idx in unusedIdx) //{ // var item = UserImages.FirstOrDefault(i => i.Index == idx); // if (item != null) // UserImages.Remove(item); //} } //foreach (var img in UserImages) //{ // var loc = Items.FirstOrDefault(l => l.Image != null && l.Image.Type == LocomotiveImageType.User && l.Image.Index == img.Index); // loc?.Image.From(img); //} } } catch { } return result; }
private void DownloadUserImage(string host, LocomotiveImage img) { if (!string.IsNullOrEmpty(img.Url)) { WebClient webClient = new WebClient(); webClient.OpenReadCompleted += delegate(object sender, OpenReadCompletedEventArgs e) { if (e.Error != null) Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(e.Error.Message, App.Name, MessageBoxButton.OK); }); else { int imageIdx = (int)e.UserState; ExtendedImage eimg = new ExtendedImage(); var bd = new BmpDecoder(); //var bd = new PngDecoder(); //var bd = new JpegDecoder(); //var bd = new GifDecoder(); bd.Decode(eimg, e.Result); //MemoryStream ms = (MemoryStream)eimg.ToStreamByExtension("bmp"); //BitmapImage bi = new BitmapImage(); //bi.SetSource(ms); //App.EcosModel.LocomotivesManager.ItemsUser[imageIdx].BitmapImage = bi; e.Result.Close(); } }; webClient.OpenReadAsync(new Uri(host + img.Url, UriKind.Absolute), img.Index); } }
private async Task PopulateSystemImagesAsync() { for (int i = 0; i < 82; i++) { var image = new LocomotiveImage(LocomotiveImageType.Internal, i); Images.Add(image); await image.PopulateAsync(); } }