public void ArticalOverviewProcessedCallback(string uid, string url, ArticalOverview[] articalOverviews, OverviewType overviewType, string nextPageUrl) { ArticalOverview[] newData = null; lock (NextPageRequestUids) { if (NextPageRequestUids == uid) { newData = new ArticalOverview[adapter.data.Length + articalOverviews.Length]; adapter.data.CopyTo(newData, 0); articalOverviews.CopyTo(newData, adapter.data.Length); NextPageRequestUids = string.Empty; } } if (nextPageUrl != null && nextPageUrl != string.Empty) { nextPageContext = new NextPageContext() { overviewType = overviewType, url = nextPageUrl }; //save the next page state } if (uid == refreshingRequestUid) { newData = null; refreshingRequestUid = string.Empty; RunOnUiThread(new Action(() => { swipeRefLayout.Refreshing = false; })); } adapter.data = newData == null ? articalOverviews : newData; database.IsSeen(UidGenerator(), adapter.data); //request a filter from DB RunOnUiThread(responseUpdate); }
public static void StartActivityArtical(Context context, ArticalOverview overview, string websiteKey, bool isOfflineArtical = false) { var b = overview.ToBundle(); Intent intent = new Intent(context, typeof(Activities.ArticalActivityV2)); intent.PutExtra(Activities.ArticalActivityV2.PassArticalOverviewObj, b); intent.PutExtra(Activities.ArticalActivityV2.PassWebsiteKey, websiteKey); intent.PutExtra(Activities.ArticalActivityV2.PassIsOffline, isOfflineArtical); context.StartActivity(intent); }
public override Artical ReadArtical(ArticalOverview overview, HtmlDocument doc) { var container = Helper.AnyChild(doc.DocumentNode, "div", "content"); if (container == null) { return(null); } var artical = new Artical() { MyLink = overview.LinkOfActualArtical }; var titleNode = Helper.AnyChild(Helper.AnyChild(container, "div", "posthead"), "h1", "headline"); artical.Title = HtmlEntity.DeEntitize(titleNode.InnerText); var conNode = Helper.AnyChild(container, "div", "post_content"); artical.HtmlText = $"<html><head></head><body>{conNode.InnerHtml}</body></html>"; var authorNode = Helper.AnyChild(Helper.AnyChild(container, "div", "author-bio"), "a"); artical.Authors = new Author[] { new Author() { Name = HtmlEntity.DeEntitize(authorNode.InnerText), Link = authorNode.GetAttributeValue("href", "") } }; var relatedPostNode = Helper.AnyChild(container, "div", "yarpp-related"); if (relatedPostNode != null) { var re = new List <ArticalOverview>(); var aLinks = Helper.AllChild(relatedPostNode, "a", new SearchCritriaBuilder().AddNotHasChild(new ChildNode() { Name = "img" }).Build()); foreach (var aL in aLinks) { re.Add(new ArticalOverview() { LinkOfActualArtical = aL.GetAttributeValue("href", ""), Title = HtmlEntity.DeEntitize(aL.InnerText) }); } artical.RelatedPosts = re.ToArray(); } return(artical); }
public override Artical ReadArtical(ArticalOverview overview, HtmlDocument doc) { var container = doc.GetElementbyId("maincontent"); if (container == null) return null; var contentTable = Helper.AnyChild(container, "td", new Dictionary<string, string>() { ["align"] = "left", ["style"] = "TEXT-ALIGN:justify;line-height:20px" }); if (contentTable == null) return null; return new Artical() { Title = overview.Title, MyLink = overview.LinkOfActualArtical, HtmlText = contentTable.InnerHtml }; }
public override ArticalOverview[] ReadIndexPage(string url, HtmlDocument doc, out string nextPageUrl) { nextPageUrl = null; var allPosts = Helper.AllChild(doc.DocumentNode, "div", "postcontentbox"); if (allPosts == null) { return(null); } List <ArticalOverview> overview = new List <ArticalOverview>(); foreach (var postNode in allPosts) { var o = new ArticalOverview(); var titleNode = Helper.AnyChild(Helper.AnyChild(postNode, "h2", "headline"), "a"); o.LinkOfActualArtical = titleNode.GetAttributeValue("href", ""); o.Title = HtmlEntity.DeEntitize(titleNode.InnerText); o.SummaryText = HtmlEntity.DeEntitize(Helper.AnyChild(postNode, "div", new Dictionary <string, string>() { ["itemprop"] = "description" }).InnerText); overview.Add(o); } var divPage = Helper.AnyChild(doc.DocumentNode, "div", "wp-pagenavi"); var currentPageIndex = int.Parse(Helper.AnyChild(divPage, "span", "current").InnerText); var aPageLinks = Helper.AllChild(divPage, "a", "page larger"); foreach (var aPage in aPageLinks) { if (aPage.InnerText == (currentPageIndex + 1).ToString()) { nextPageUrl = aPage.GetAttributeValue("href", ""); break; } } return(overview.Count == 0 ? null : overview.ToArray()); }
public void ArticalOverviewProcessedCallback(string uid, string url, ArticalOverview[] articalOverviews, OverviewType overviewType, string nextPageUrl) { MyLog.Log(this, nameof(ArticalOverviewProcessedCallback)); ArticalOverview[] newData = null; lock (NextPageRequestUids) { if (NextPageRequestUids == uid) { MyLog.Log(this, $"next page data received" + "..."); newData = new ArticalOverview[adapter.data.Length + articalOverviews.Length]; adapter.data.CopyTo(newData, 0); articalOverviews.CopyTo(newData, adapter.data.Length); NextPageRequestUids = string.Empty; MyLog.Log(this, $"next page data received" + "...Done"); } } if (nextPageUrl != null && nextPageUrl != string.Empty) { nextPageContext = new NextPageContext() { overviewType = overviewType, url = nextPageUrl }; //save the next page state } if (uid == refreshingRequestUid) { MyLog.Log(this, "refreshing content received" + "..."); newData = null; refreshingRequestUid = string.Empty; Activity.RunOnUiThread(new Action(() => { swipeRefLayout.Refreshing = false; })); MyLog.Log(this, "refreshing content received" + "...Done"); } MyLog.Log(this, "Updating adapter data" + "..."); adapter.data = newData == null ? articalOverviews : newData; database.IsSeen(UidGenerator(), adapter.data); //request a filter from DB Activity.RunOnUiThread(responseUpdate); MyLog.Log(this, "Updating adapter data" + "...Done"); MyLog.Log(this, nameof(ArticalOverviewProcessedCallback) + "...Done"); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); MyLog.Log(this, nameof(OnCreate) + "..."); SetContentView(Resource.Layout.artical); ActionBar?.Hide(); articalOverview = null; Bundle extras = Intent.Extras; Website currentWebsite = null; MyLog.Log(this, "Loading bundle data" + "..."); if (extras != null && extras.ContainsKey(PassArticalOverviewObj)) { articalOverview = new ArticalOverview(extras.GetBundle(PassArticalOverviewObj)); } else { Finish(); return; } if (extras != null || extras.ContainsKey(PassWebsiteKey)) { currentWebsiteKey = extras.GetString(PassWebsiteKey); } else { Finish(); return; } if (extras != null || extras.ContainsKey(PassIsOffline)) { isOffline = extras.GetBoolean(PassIsOffline); } else { Finish(); return; } MyLog.Log(this, "Loading bundle data" + "...Done"); if (!isOffline) { MyLog.Log(this, $"Request artical data online url {articalOverview.LinkOfActualArtical}" + "..."); analysisModule.ReadArtical(UidGenerator(), currentWebsiteKey, articalOverview, this); //make the request MyLog.Log(this, $"Request artical data online url {articalOverview.LinkOfActualArtical}" + "...Done"); } else { MyLog.Log(this, $"Requesting artical data offline url{articalOverview.LinkOfActualArtical}" + "..."); database.GetArtical(UidGenerator(), articalOverview, this); MyLog.Log(this, $"Requesting artical data offline url{articalOverview.LinkOfActualArtical}" + "...Done"); } currentWebsite = Config.GetWebsite(currentWebsiteKey); MyLog.Log(this, "Loading webview" + "..."); articalContentWebview = FindViewById <WebView>(Resource.Id.articalContentWebView); articalContentWebview.Settings.DefaultFontSize = 20; articalContentWebview.Settings.BuiltInZoomControls = true; articalContentWebview.Settings.JavaScriptEnabled = true; articalContentWebview.Settings.AllowFileAccessFromFileURLs = true; articalContentWebview.Settings.AllowUniversalAccessFromFileURLs = true; articalContentWebview.Visibility = ViewStates.Gone; MyLog.Log(this, "Loading webview" + "...Done"); ChangeStatusBarColor(Window, currentWebsite.Color); gridview = FindViewById <GridView>(Resource.Id.relatedPostGridView); adapter = new GridviewAdapter() { parent = this }; gridview.Adapter = adapter; gridview.ItemClick += Gridview_ItemClick; articalContentTextview = FindViewById <TextView>(Resource.Id.articalContentTextView); headerLayout = FindViewById <LinearLayout>(Resource.Id.articalHeaderLinearLayout); articalTitleTextview = FindViewById <TextView>(Resource.Id.articalTitleTextView); articalDateTextview = FindViewById <TextView>(Resource.Id.articalDateTextView); articalWebsiteComicTextview = FindViewById <TextView>(Resource.Id.articalWebsiteComicTextView); scrollView = FindViewById <other.ObservableScrollView>(Resource.Id.articalScrollView); floatingButton = FindViewById <other.FloatingActionButton>(Resource.Id.articalFab); navDrawerLayout = FindViewById <DrawerLayout>(Resource.Id.articalDrawerLayout); headerLayout.SetBackgroundColor(Android.Graphics.Color.ParseColor(currentWebsite.Color)); articalTitleTextview.Text = articalOverview.Title ?? ""; articalDateTextview.Text = GetHumanReadableDate(articalOverview.Date) ?? ""; articalWebsiteComicTextview.Text = currentWebsite.ComicText ?? ""; articalContentTextview.Text = "Loading..."; articalContentTextview.Gravity = GravityFlags.CenterHorizontal; floatingButton.AttachToScrollView(scrollView); floatingButton.Visibility = !isOffline ? ViewStates.Visible : ViewStates.Gone; optionOpenInBrowser = FindViewById <TextView>(Resource.Id.articalOptionOpenInBrowserTextView); optionOpenInBrowser.Click += OptionOpenInBrowser_Click; floatingButton.Click += FloatingButton_Click; MyLog.Log(this, nameof(OnCreate) + "...Done"); }
private void RecyclerView_OnItemClick(object sender, ArticalOverview articalOverview) { MyLog.Log(this, $"Starting activity artical" + "..."); StartActivityArtical(applicationContext, articalOverview, websiteKey); MyLog.Log(this, $"Starting activity artical" + "...Done"); }
public override Artical ReadArtical(ArticalOverview overview, HtmlDocument doc) { //TODO: Fix the single cote (') bug in http://taxguru.in/chartered-accountant/hey-examinee-thy-duty-result-thy-concern.html //TODO: Fix bug http://taxguru.in/company-law/download-annual-fillingxbrleforms.html var container = Helper.AnyChild(doc.DocumentNode, "div", "latestPosts main-box latestPostsBg"); if (container == null) { return(null); } var artical = new Artical() { MyLink = overview.LinkOfActualArtical }; var aLinkTitle = Helper.AnyChild(Helper.AnyChild(container, "div", "homeTitle margint-10"), "a"); artical.Title = HtmlEntity.DeEntitize(aLinkTitle.GetAttributeValue("title", "")); var aLinkAuthor = Helper.AnyChild(Helper.AnyChild(container, "li", "postAuthor"), "a"); artical.Authors = new Author[] { new Author() { Name = aLinkAuthor.InnerText, Link = aLinkAuthor.GetAttributeValue("href", "") } }; var aLinkDate = Helper.AnyChild(Helper.AnyChild(container, "li", "MetapostDate"), "a"); artical.Date = getFormatedDate(aLinkDate.InnerText); var relatedPostContainer = Helper.AnyChild(container, "div", "rp4wp-related-posts rp4wp-related-post"); var aLinkRelatedPosts = Helper.AllChild(relatedPostContainer, "a"); if (aLinkRelatedPosts != null) { var reletedPost = new List <ArticalOverview>(); foreach (var aNode in aLinkRelatedPosts) { reletedPost.Add( new ArticalOverview() { LinkOfActualArtical = aNode.GetAttributeValue("href", ""), Title = aNode.InnerText }); } artical.RelatedPosts = reletedPost.ToArray(); } var articalContainer = Helper.AnyChild(container, "div", "fsize16"); if (relatedPostContainer != null) { articalContainer.RemoveChild(relatedPostContainer); } //HtmlNode node = HtmlNode.CreateNode("<div></div>"); //var pNodes = Helper.AllChild(articalContainer, "p"); //foreach (var pNode in pNodes) // node.AppendChild(pNode); artical.HtmlText = $"<html><head><link rel='stylesheet' id='custom-css' href='http://taxguru.in/wp-content/themes/tg4/style.css?ver=4.5.1' type='text/css' media='all' /></head><body>{ articalContainer.InnerHtml}</body></html>"; return(artical); }
public override ArticalOverview[] ReadIndexPage(string url, HtmlDocument doc, out string nextPageUrl) { nextPageUrl = string.Empty; HtmlNode contentBox = null; foreach (var item in Helper.AllChild(doc.DocumentNode, "div", "contentBox")) { if (Helper.AnyChild(item, "div", "seprate-col-post") != null) { contentBox = item; break; } } var oNodes = Helper.AllChild(contentBox, "div", "newsBoxPost margint-10"); if (oNodes == null) { return(null); } List <ArticalOverview> overview = new List <ArticalOverview>(); foreach (var oNode in oNodes) { var o = new ArticalOverview(); var aLinkTitleNode = Helper.AnyChild(oNode, "a"); o.Title = HtmlEntity.DeEntitize(aLinkTitleNode.GetAttributeValue("title", "")); o.LinkOfActualArtical = aLinkTitleNode.GetAttributeValue("href", ""); var aLinkAuthors = Helper.AnyChild(Helper.AnyChild(oNode, "li"), "a"); Author author = new Author() { Name = aLinkAuthors.InnerText, Link = aLinkAuthors.GetAttributeValue("href", "") }; o.Authors = new Author[] { author }; var aLinkDate = Helper.AnyChild(Helper.AnyChild(oNode, "li", "MetapostDate"), "a", "linkblack"); o.Date = getFormatedDate(aLinkDate.InnerText); var divSummaryNode = Helper.AnyChild(oNode, "div", "fsize16"); o.SummaryText = divSummaryNode.InnerText; var allGroups = Helper.AllChild(oNode, "div", "margint10"); var tagNodeContainer = allGroups[allGroups.Count - 1]; var tagNodes = Helper.AllChild(tagNodeContainer, "a"); var catList = new List <Category>(); foreach (var tagNode in tagNodes) { catList.Add(new Category() { Name = tagNode.InnerText, Link = tagNode.GetAttributeValue("href", "") }); } o.Categorys = catList.ToArray(); overview.Add(o); } var divPage = Helper.AnyChild(contentBox, "div", "wp-pagenavi"); var currentPageIndex = int.Parse(Helper.AnyChild(divPage, "span", "current").InnerText); var aPageLinks = Helper.AllChild(divPage, "a"); foreach (var aPage in aPageLinks) { if (aPage.InnerText == (currentPageIndex + 1).ToString()) { nextPageUrl = aPage.GetAttributeValue("href", ""); break; } } return(overview.ToArray()); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); MyLog.Log(this, nameof(OnCreate) + "..."); SetContentView(Resource.Layout.artical_layout_v2); ActionBar?.Hide(); #region Grabbing data from bundles articalOverview = null; Bundle extras = Intent.Extras; MyLog.Log(this, "Loading bundle data" + "..."); if (extras != null && extras.ContainsKey(PassArticalOverviewObj)) { articalOverview = new ArticalOverview(extras.GetBundle(PassArticalOverviewObj)); } else { Finish(); return; } if (extras != null || extras.ContainsKey(PassWebsiteKey)) { currentWebsiteKey = extras.GetString(PassWebsiteKey); } else { Finish(); return; } if (extras != null || extras.ContainsKey(PassIsOffline)) { isOffline = extras.GetBoolean(PassIsOffline); } else { Finish(); return; } MyLog.Log(this, "Loading bundle data" + "...Done"); #endregion #region Making request for artical if (!isOffline) { MyLog.Log(this, $"Request artical data online url {articalOverview.LinkOfActualArtical}" + "..."); analysisModule.ReadArtical(UidGenerator(), currentWebsiteKey, articalOverview, this); //make the request MyLog.Log(this, $"Request artical data online url {articalOverview.LinkOfActualArtical}" + "...Done"); } else { MyLog.Log(this, $"Requesting artical data offline url{articalOverview.LinkOfActualArtical}" + "..."); database.GetArtical(UidGenerator(), articalOverview, this); MyLog.Log(this, $"Requesting artical data offline url{articalOverview.LinkOfActualArtical}" + "...Done"); } #endregion //=================Getting current website=============== var currentWebsite = Config.GetWebsite(currentWebsiteKey); ChangeStatusBarColor(Window, currentWebsite.Color); //===============Variable Findings================== appBarLayout = FindViewById <AppBarLayout>(Resource.Id.mainAppbar); toolBar = FindViewById <SupportToolBar>(Resource.Id.mainToolbar); loadingTextView = FindViewById <TextView>(Resource.Id.articalLoadingTextView); fabOfflineButton = FindViewById <FloatingActionButton>(Resource.Id.articalFab); articalContentWebview = FindViewById <WebView>(Resource.Id.articalContentWebView); articalTitleTextview = FindViewById <TextView>(Resource.Id.articalTitleTextView); articalDateTextview = FindViewById <TextView>(Resource.Id.articalDateTextView); articalWebsiteComicTextview = FindViewById <TextView>(Resource.Id.articalWebsiteComicTextView); //===============Setup WebView================== MyLog.Log(this, "Loading web view" + "..."); articalContentWebview.Settings.DefaultFontSize = 20; articalContentWebview.Settings.BuiltInZoomControls = true; articalContentWebview.Settings.JavaScriptEnabled = true; articalContentWebview.Settings.AllowFileAccessFromFileURLs = true; articalContentWebview.Settings.AllowUniversalAccessFromFileURLs = true; articalContentWebview.Visibility = ViewStates.Gone; MyLog.Log(this, "Loading web view" + "...Done"); //===============Setup WebView================== appBarLayout.SetBackgroundColor(Android.Graphics.Color.ParseColor(currentWebsite.Color)); //Loading data from artical overview toolBar.Title = articalOverview.Title ?? "Artical"; articalTitleTextview.Text = articalOverview.Title ?? ""; articalDateTextview.Text = GetHumanReadableDate(articalOverview.Date) ?? ""; articalWebsiteComicTextview.Text = currentWebsite.ComicText ?? ""; //Setting the text for loading loadingTextView.Text = "Loading..."; loadingTextView.Gravity = GravityFlags.CenterHorizontal; fabOfflineButton.Visibility = !isOffline ? ViewStates.Visible : ViewStates.Gone;//determining the visibility of fab as online or offline //TODO: Add a support to open the artical in web browser fabOfflineButton.Click += FloatingButton_Click; MyLog.Log(this, nameof(OnCreate) + "...Done"); }
private void RecyclerView_OnItemClick(object sender, ArticalOverview articalOverview) { database.UpdateIsSeen(UidGenerator(), articalOverview);//add to seen list StartActivityArtical(this, articalOverview, currentWebsiteKey); }
public override Artical ReadArticalExtrnal(ArticalOverview overview, string extrnalLink) { var artical = overview.ToArtical(); artical.ExternalFileLink = extrnalLink; return artical; }
public override Artical ReadArticalExtrnal(ArticalOverview overview, string extrnalLink) => Parent.ReadArticalExtrnal(overview, extrnalLink);
public override Artical ReadArtical(ArticalOverview overview, HtmlDocument doc) => Parent.ReadArtical(overview, doc);