private View GetTemplateDelegate(int i, MalNewsUnitModel malNewsUnitModel, View convertView) { var view = convertView; if (view == null) { view = Activity.LayoutInflater.Inflate(Resource.Layout.ArtclesPageItem, null); view.SetOnClickListener(new OnClickListener(OnItemClick)); if (ViewModel.ThumbnailWidth == 100) { view.FindViewById <ImageViewAsync>(Resource.Id.ArticlesPageItemImage).SetScaleType(ImageView.ScaleType.Center); } } view.Tag = malNewsUnitModel.Wrap(); view.FindViewById <TextView>(Resource.Id.ArticlesPageItemAuthor).Text = malNewsUnitModel.Author; view.FindViewById <TextView>(Resource.Id.ArticlesPageItemViews).Text = malNewsUnitModel.Views; view.FindViewById <TextView>(Resource.Id.ArticlesPageItemTags).Text = malNewsUnitModel.Tags; view.FindViewById <TextView>(Resource.Id.ArticlesPageItemHeader).Text = malNewsUnitModel.Title; view.FindViewById <TextView>(Resource.Id.ArticlesPageItemHighlight).Text = malNewsUnitModel.Highlight; try { view.FindViewById <ImageViewAsync>(Resource.Id.ArticlesPageItemImage).Into(malNewsUnitModel.ImgUrl); } catch (Exception) { //network on mian thread } return(view); }
private static TileBinding GenerateTileBindingLarge(MalNewsUnitModel news) { return(new TileBinding { Content = new TileBindingContentAdaptive() { PeekImage = new TilePeekImage { Source = news.ImgUrl, }, BackgroundImage = new TileBackgroundImage { Source = news.ImgUrl, HintOverlay = 50, }, Children = { new AdaptiveText { Text = news.Title, HintMaxLines = 3, HintWrap = true, HintStyle = AdaptiveTextStyle.Subtitle, }, new AdaptiveText { Text = news.Highlight, HintMaxLines = 12, HintWrap = true, HintStyle = AdaptiveTextStyle.BodySubtle, } } } }); }
private static TileBinding GenerateTileBindingWide(MalNewsUnitModel news) { return(new TileBinding { Content = new TileBindingContentAdaptive() { BackgroundImage = new TileBackgroundImage { HintOverlay = 50, Source = news.ImgUrl, }, Children = { new AdaptiveText { Text = news.Title, HintMaxLines = 2, HintWrap = true, HintStyle = AdaptiveTextStyle.Body, }, new AdaptiveText { Text = news.Highlight, HintMaxLines = 10, HintWrap = true, HintStyle = AdaptiveTextStyle.CaptionSubtle, } } } }); }
private async void LoadArticle(MalNewsUnitModel data) { LoadingVisibility = true; ArticleIndexVisibility = false; ViewModelLocator.GeneralMain.CurrentStatus = data.Title; CurrentNews = Articles.IndexOf(data); OpenWebView?.Invoke(await new MalArticleQuery(data.Url, data.Title, data.Type).GetArticleHtml(), data); }
private async void ViewModelOnOpenWebView(string html, MalNewsUnitModel item) { ViewModelLocator.NavMgr.RegisterOneTimeOverride(new RelayCommand(() => { ViewModel.WebViewVisibility = false; ViewModel.ArticleIndexVisibility = true; })); _currentId = ViewModel.Articles.IndexOf(item); ArticlesPageWebView.LoadDataWithBaseURL(null, ResourceLocator.CssManager.WrapWithCss(html), "text/html; charset=utf-8", "UTF-8", null); }
private async void LoadArticle(MalNewsUnitModel data) { LoadingVisibility = Visibility.Visible; ArticleIndexVisibility = Visibility.Collapsed; ViewModelLocator.Main.CurrentStatus = data.Title; NavMgr.RegisterBackNav(PageIndex.PageArticles, data.Type == MalNewsType.Article ? MalArticlesPageNavigationArgs.Articles : MalArticlesPageNavigationArgs.News); OpenWebView?.Invoke(await new MalArticleQuery(data.Url, data.Title, data.Type).GetArticleHtml(), Articles.IndexOf(data)); }
private void ViewModelOnOpenWebView(string html, MalNewsUnitModel id) { //back nav ViewModelLocator.NavMgr.RegisterOneTimeMainOverride(new RelayCommand(() => { ViewModel.WebViewVisibility = false; ViewModel.ArticleIndexVisibility = true; ViewModelLocator.GeneralMain.CurrentStatus = ViewModel.PrevWorkMode != null && ViewModel.PrevWorkMode.Value == ArticlePageWorkMode.Articles ? "Articles" : "News"; ViewModel.CurrentNews = -1; })); // ArticleWebView.NavigateToString(ResourceLocator.CssManager.WrapWithCss(html)); }
private static TileBinding GenerateTileBindingMedium(MalNewsUnitModel news) { return(new TileBinding { Content = new TileBindingContentAdaptive() { PeekImage = new TilePeekImage { Source = news.ImgUrl, HintCrop = TilePeekImageCrop.Default, }, Children = { new AdaptiveText { Text = news.Title, HintWrap = true, } } } }); }
private void ViewModelOnOpenWebView(string html, MalNewsUnitModel item) { //BackNav ViewModelLocator.NavMgr.RegisterBackNav(PageIndex.PageArticles, item.Type == MalNewsType.Article ? MalArticlesPageNavigationArgs.Articles : MalArticlesPageNavigationArgs.News); // _currentId = ViewModel.Articles.IndexOf(item); var uiSettings = new Windows.UI.ViewManagement.UISettings(); var color = uiSettings.GetColorValue(Windows.UI.ViewManagement.UIColorType.Accent); var color1 = uiSettings.GetColorValue(Windows.UI.ViewManagement.UIColorType.AccentDark2); var color2 = uiSettings.GetColorValue(Windows.UI.ViewManagement.UIColorType.AccentLight2); var css = Css.Replace("AccentColourBase", "#" + color.ToString().Substring(3)). Replace("AccentColourLight", "#" + color2.ToString().Substring(3)). Replace("AccentColourDark", "#" + color1.ToString().Substring(3)) .Replace("BodyBackgroundThemeColor", Settings.SelectedTheme == (int)ApplicationTheme.Dark ? "#2d2d2d" : "#e6e6e6") .Replace("BodyForegroundThemeColor", Settings.SelectedTheme == (int)ApplicationTheme.Dark ? "white" : "black").Replace( "HorizontalSeparatorColor", Settings.SelectedTheme == (int)ApplicationTheme.Dark ? "#0d0d0d" : "#b3b3b3"); ArticleWebView.NavigateToString(css + Begin + html + "</div></body></html>"); }
public async Task <List <MalNewsUnitModel> > GetArticlesIndex(bool force = false) { if (!force) { if (_cachedData.ContainsKey(_mode)) { return(_cachedData[_mode]); } var possibleData = await DataCache.RetrieveArticleIndexData(_mode); if (possibleData != null) { return(possibleData); } } var output = new List <MalNewsUnitModel>(); var raw = await GetRequestResponse(); if (string.IsNullOrEmpty(raw)) { return(null); } var doc = new HtmlDocument(); doc.LoadHtml(raw); switch (_mode) { case ArticlePageWorkMode.Articles: foreach (var newsUnit in doc.WhereOfDescendantsWithClass("div", "news-unit clearfix")) { try { var current = new MalNewsUnitModel(); var img = newsUnit.Descendants("a").First(); current.Url = img.Attributes["href"].Value; current.ImgUrl = img.Descendants("img").First().Attributes["data-src"].Value; var contentDivs = newsUnit.Descendants("div").ToList(); current.Title = WebUtility.HtmlDecode(contentDivs[0].Descendants("p").First().InnerText.Trim()); current.Highlight = WebUtility.HtmlDecode(contentDivs[1].InnerText.Trim()); var infos = contentDivs[2].Descendants("p").ToList(); current.Author = infos[0].InnerText.Trim(); current.Views = infos[1].InnerText.Trim(); try { current.Tags = string.Join(", ", contentDivs[3].Descendants("a").Select(node => node.InnerText.Trim())); } catch (Exception) { //no tags } current.Type = MalNewsType.Article; output.Add(current); } catch (Exception) { //hatml } } break; case ArticlePageWorkMode.News: foreach (var newsUnit in doc.WhereOfDescendantsWithClass("div", "news-unit clearfix rect")) { try { var current = new MalNewsUnitModel(); var img = newsUnit.Descendants("a").First(); current.Url = img.Attributes["href"].Value; current.ImgUrl = img.Descendants("img").First().Attributes["src"].Value; var contentDivs = newsUnit.Descendants("div").ToList(); current.Title = WebUtility.HtmlDecode(contentDivs[0].Descendants("p").First().InnerText.Trim()); current.Highlight = WebUtility.HtmlDecode(contentDivs[1].InnerText.Trim()); var infos = contentDivs[2].Descendants("p").ToList(); current.Author = "By: " + infos[0].ChildNodes[1].InnerText.Trim(); current.Views = infos[0].ChildNodes[3].InnerText.Trim(); try { current.Tags = string.Join(", ", contentDivs[2].ChildNodes[3].Descendants("a").Select(node => node.InnerText.Trim())); } catch (Exception) { //no tags } current.Type = MalNewsType.News; output.Add(current); } catch (Exception) { //hatml } } break; default: throw new ArgumentOutOfRangeException(); } _cachedData[_mode] = output; DataCache.SaveArticleIndexData(_mode, output); return(output); }
public async Task <List <MalNewsUnitModel> > GetArticlesIndex(bool force = false) { if (!force) { if (_cachedData.ContainsKey(_mode)) { return(_cachedData[_mode]); } var possibleData = await DataCache.RetrieveArticleIndexData(_mode); if (possibleData != null && possibleData.Count > 0) { return(possibleData); } } var output = new List <MalNewsUnitModel>(); var raw = await GetRequestResponse(); if (string.IsNullOrEmpty(raw)) { return(null); } var doc = new HtmlDocument(); doc.LoadHtml(raw); switch (_mode) { case ArticlePageWorkMode.Articles: foreach (var featuredNewsUnit in doc.WhereOfDescendantsWithClass("div", "featured-pickup-unit")) { try { var current = new MalNewsUnitModel(); var img = featuredNewsUnit.Descendants("a").First(); var imgUrl = img.Attributes["data-bg"].Value; if (!imgUrl.Contains("questionmark")) { imgUrl = Regex.Replace(imgUrl, @"\/r\/\d+x\d+", ""); current.ImgUrl = imgUrl.Substring(0, imgUrl.IndexOf('?')); } current.Url = img.Attributes["href"].Value; current.Highlight = WebUtility.HtmlDecode(featuredNewsUnit.Descendants("p").First().InnerText.Trim()); current.Title = WebUtility.HtmlDecode(img.InnerText.Trim()); if (current.Title.ToLower().Contains("giveaway")) // emm I'll pass on these { continue; } var infoDiv = featuredNewsUnit.FirstOfDescendantsWithClass("div", "information"); var infoDivsParagraphs = infoDiv.Descendants("p").ToList(); current.Author = WebUtility.HtmlDecode(infoDivsParagraphs[0].InnerText.Trim()); current.Views = WebUtility.HtmlDecode(infoDivsParagraphs[1].InnerText.Trim()); current.Tags = "New"; output.Add(current); } catch (Exception) { } } foreach (var newsUnit in doc.WhereOfDescendantsWithClass("div", "news-unit clearfix")) { try { var current = new MalNewsUnitModel(); var img = newsUnit.Descendants("a").First(); current.Url = img.Attributes["href"].Value; try { current.ImgUrl = img.Descendants("img").First().Attributes["data-src"].Value; } catch (Exception) { //html here is messy, there may be change here soon } var contentDivs = newsUnit.Descendants("div").ToList(); current.Title = WebUtility.HtmlDecode(contentDivs[0].Descendants("p").First().InnerText.Trim()); current.Highlight = WebUtility.HtmlDecode(contentDivs[1].InnerText.Trim()); var infos = contentDivs[2].Descendants("p").ToList(); current.Author = infos[0].InnerText.Trim(); current.Views = infos[1].InnerText.Trim(); try { current.Tags = string.Join(", ", contentDivs[3].Descendants("a").Select(node => node.InnerText.Trim())); } catch (Exception) { //no tags } current.Type = MalNewsType.Article; output.Add(current); } catch (Exception) { //hatml } } break; case ArticlePageWorkMode.News: foreach (var newsUnit in doc.WhereOfDescendantsWithClass("div", "news-unit clearfix rect")) { try { var current = new MalNewsUnitModel(); var img = newsUnit.Descendants("a").First(); current.Url = img.Attributes["href"].Value; try { current.ImgUrl = img.Descendants("img").First().Attributes["srcset"].Value.Split(' ', ' ')[2]; } catch (Exception) { try { current.ImgUrl = img.Descendants("img").First().Attributes["data-src"].Value; } catch (Exception) { //it may work this way, my predicition } //html here is messy, there may be change here soon } var contentDivs = newsUnit.Descendants("div").ToList(); current.Title = WebUtility.HtmlDecode(contentDivs[0].Descendants("p").First().InnerText.Trim()); current.Highlight = WebUtility.HtmlDecode(contentDivs[1].InnerText.Trim()); var infos = contentDivs[2].Descendants("p").ToList(); current.Author = "By: " + infos[0].ChildNodes[1].InnerText.Trim(); current.Views = infos[0].ChildNodes[3].InnerText.Trim(); try { current.Tags = string.Join(", ", contentDivs[2].ChildNodes[3].Descendants("a").Select(node => node.InnerText.Trim())); } catch (Exception) { //no tags } current.Type = MalNewsType.News; output.Add(current); } catch (Exception) { //hatml } } break; default: throw new ArgumentOutOfRangeException(); } _cachedData[_mode] = output; DataCache.SaveArticleIndexData(_mode, output); return(output); }