Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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
            };
        }
Example #5
0
        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");
 }
Example #9
0
        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);
        }
Example #10
0
        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());
        }
Example #11
0
        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");
        }
Example #12
0
        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);