private void DataToControls(CSMScrapeResult csmData) { lbGreenAge.Text = csmData.GreenAge; GraphicsHelpers.DrawRating(csmData.Rating, pbCSMRating, new Font("Microsoft Sans Serif", 24, FontStyle.Regular), "⋆"); var tt = new ToolTip(); tt.IsBalloon = true; tt.AutoPopDelay = 20000; tt.SetToolTip( pbInfo, string.Format( "The ratings are based on child{0}development best practices.{0}We display the minimum age{0}for which content is{0}developmentally appropriate.{0}The star rating reflects overall{0}quality.", Environment.NewLine) ); lbShortDescription.Text = csmData.ShortDescription; if (string.IsNullOrEmpty(csmData.AdultRecomendedAge)) { lbAdultRecommendedAge.Text = "No reviews yet"; lbInfo1.Visible = false; } else { lbAdultRecommendedAge.Text = csmData.AdultRecomendedAge; GraphicsHelpers.DrawRating(csmData.AdultRating, pbAdultRating, new Font("Microsoft Sans Serif", 20, FontStyle.Regular), "⋆"); } if (string.IsNullOrEmpty(csmData.ChildRecomendedAge)) { lbKidsRecommendedAge.Text = "No reviews yet"; lbInfo2.Visible = false; } else { lbKidsRecommendedAge.Text = csmData.ChildRecomendedAge; GraphicsHelpers.DrawRating(csmData.ChildRating, pbKidsRating, new Font("Microsoft Sans Serif", 20, FontStyle.Regular), "⋆"); } var scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.EducationalValue); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbEducationalValue_Rating, lbEducationalValue_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.PositiveMessages); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbPositiveMessages_Rating, lbPosiviteMessages_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.PositiveRoleModelsAndRepresentations); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbPositiveRoles_Rating, lbPositiveRoles_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.ViolenceAndScariness); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbViolenceScariness_Rating, lbViolenceScariness_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.SexyStuff); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbSexyStuff_Rating, lbSexyStuff_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.Language); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbLanguage_Rating, lbLanguage_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.Consumerism); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbConsumerism_Rating, lbConsumerism_Expl); } scrapedDataObj = csmData.ALotOrALittle.FirstOrDefault(_ => _.Category == ALotOrAlittleElements.DrinkingDrugsAndSmoking); if (scrapedDataObj != null) { SetDataToControls(scrapedDataObj, pbDrinkingSmoking_Rating, lbDrinkingSmoking_Expl); } void SetDataToControls(ALotOrALittle dataObj, PictureBox pbCtrl, Label detailsLabelCtrl) { if (dataObj.Rating > 0) { pbCtrl.Visible = true; GraphicsHelpers.DrawRating(dataObj.Rating, pbCtrl, new Font("Microsoft Sans Serif", 16, FontStyle.Regular), "●"); } if (!string.IsNullOrEmpty(dataObj.Description)) { detailsLabelCtrl.Visible = true; detailsLabelCtrl.Click += (sender, e) => { var frmDetails = new FrmALotOrALittle_Explanation(dataObj); frmDetails.Owner = this; frmDetails.ShowDialog(); }; } } lbWhatParentsNeedToKnow.Text = csmData.Review; pWhatParentsNeedToKnow.Height = (lbWhatParentsNeedToKnow.Location.Y * 2) + lbWhatParentsNeedToKnow.Height; lbWhatsTheStory.Text = csmData.Story; pWhatsTheStory.Height = (lbWhatsTheStory.Location.Y * 2) + lbWhatsTheStory.Height; lbIsItAnyGood.Text = csmData.IsItAnyGood; pIsItAnyGood.Height = (lbIsItAnyGood.Location.Y * 2) + lbIsItAnyGood.Height; var totalHeight = 0; foreach (var item in csmData.TalkWithKidsAbout) { var p = new Panel(); p.Dock = DockStyle.Top; //the "Fill" must go fist! var p_text = new Panel(); p_text.Dock = DockStyle.Fill; p_text.Margin = new Padding(0); p.Controls.Add(p_text); var p_bullet = new Panel(); p_bullet.Dock = DockStyle.Left; p_bullet.Margin = new Padding(0); //p_bullet.BackColor = Color.Yellow; p_bullet.Width = 20; p.Controls.Add(p_bullet); var l_text = new Label(); l_text.AutoSize = true; l_text.Font = new Font("Microsoft Sans Serif", 9.75F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))); l_text.Location = new System.Drawing.Point(0, 8); l_text.MaximumSize = new System.Drawing.Size(570, 0); l_text.Text = item; p_text.Controls.Add(l_text); var l_bullet = new Label(); l_bullet.AutoSize = true; //l_bullet.BackColor = Color.Green; l_bullet.Font = new Font("Microsoft Sans Serif", 9.75F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))); l_bullet.Location = new System.Drawing.Point(7, 8); l_bullet.Text = "●"; p_bullet.Controls.Add(l_bullet); p.Height = l_text.Location.Y + l_text.Height; totalHeight += p.Height; pTalkAbout.Controls.Add(p); } pTalkAbout.Height = totalHeight + 8; }
private void btnRefreshMovieData_Click(object sender, EventArgs e) { if (Helpers.UnsavedChanges && !SaveChanges()) { return; } using (var rParam = new FrmMTDFromFile(false, false) { Owner = _parent }) { if (rParam.ShowDialog() != DialogResult.OK) { return; } if (rParam.mtd == null) { MsgBox.Show("An error occurred while determining the file (movie) details. No additional data available!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } OperationResult opRes = null; CSMScrapeResult csmData = null; if (DAL.CurrentMTD.HasRecommendedDataSaved) { opRes = DAL.LoadCSMData(DAL.CurrentMTD.Id); if (opRes.Success) { csmData = (CSMScrapeResult)opRes.AdditionalDataReturn; } } opRes = DAL.RemoveMovieOrEpisode(_previousSelectedMsi.Id); if (!opRes.Success) { MsgBox.Show( string.Format("The following error occurred while removing the previous movie details:{0}{0}{1}{0}{0}The current operation cannot continue!", Environment.NewLine, opRes.CustomErrorMessage), "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //not using UpdateMTD in order to avoud additional check regarding the number of streams opRes = DAL.InsertMTD(rParam.mtd, null); if (!opRes.Success) { MsgBox.Show( string.Format("The following error occurred while inserting the new movie details into the database:{0}{0}{1}{0}{0}", Environment.NewLine, opRes.CustomErrorMessage), "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } rParam.mtd.Id = (int)opRes.AdditionalDataReturn; if (csmData != null) { DAL.SaveCommonSenseMediaData(rParam.mtd.Id, csmData); } try { _preventEvent = true; DAL.CurrentMTD = rParam.mtd; var movieObj = DAL.MoviesData.FirstOrDefault(m => m.Id == _previousSelectedMsi.Id); DAL.MoviesData.Remove(movieObj); var msi = new MovieShortInfo { Id = DAL.CurrentMTD.Id, FileName = DAL.CurrentMTD.FileName, //Cover = DAL.CurrentMTD.Poster, HasPoster = DAL.CurrentMTD.Poster != null, HasSynopsis = !string.IsNullOrEmpty(DAL.CurrentMTD.Synopsis) }; DAL.MoviesData.Add(msi); DAL.MoviesData = new BindingList <MovieShortInfo>(DAL.MoviesData.OrderBy(o => o.FileName).ToList()); RefreshGrid(); _previousSelectedMsi = msi; //not needed? } finally { _preventEvent = false; FocusCurrentMovieInGrid(_previousSelectedMsi); } } }
public static OperationResult GetCommonSenseMediaData(string recommendedLink) { var result = new OperationResult(); CSMScrapeResult csmData = null; using (var client = new HttpClient()) { try { //the implementation if forced to run synchronous to avoid ip banning from scrapped sites var request = client.GetAsync(recommendedLink).Result; request.EnsureSuccessStatusCode(); if (request.Content == null) { result.FailWithMessage("No content"); } var response = request.Content.ReadAsStreamAsync().Result; if (response == null || response.Length == 0) { return(result.FailWithMessage("Invalid response!")); } csmData = new CSMScrapeResult(); var parser = new HtmlParser(); var document = parser.ParseDocument(response); var expandableSinopsis = document.GetElementsByClassName("field-name-field-review-recommended-age"); var greenAge = document.GetElementsByClassName("csm-green-age").FirstOrDefault(); csmData.GreenAge = greenAge == null ? null : greenAge.TextContent; var csmRatingL0 = document.GetElementsByClassName("field-name-field-stars-rating").FirstOrDefault(); if (csmRatingL0 != null) { var csmRatingLx = csmRatingL0.QuerySelectorAll("div.field_stars_rating").FirstOrDefault(); if (csmRatingLx != null) { var ratingClass = csmRatingLx.ClassList.FirstOrDefault(_ => _.StartsWith("rating-")); if (ratingClass != null) { if (int.TryParse(ratingClass.Replace("rating-", ""), out int ratingInt)) { csmData.Rating = ratingInt; } } var shortDescriptionObj = csmRatingL0.QuerySelectorAll("meta[property=\"description\"]").FirstOrDefault(); if (shortDescriptionObj != null) { var metaElement = (AngleSharp.Html.Dom.IHtmlMetaElement)shortDescriptionObj; csmData.ShortDescription = metaElement.Content; } var reviewObj = csmRatingL0.QuerySelectorAll("meta[property=\"reviewBody\"]").FirstOrDefault(); if (reviewObj != null) { var metaElement = (AngleSharp.Html.Dom.IHtmlMetaElement)reviewObj; var rx = new System.Text.RegularExpressions.Regex("<[^>]*>"); csmData.Review = rx.Replace(metaElement.Content, ""); } } } var statisticsAdult = document.GetElementsByClassName("user-review-statistics adult").FirstOrDefault(); if (statisticsAdult != null) { var adultAge = statisticsAdult.GetElementsByClassName("stat-wrapper age").FirstOrDefault(); csmData.AdultRecomendedAge = adultAge == null ? null : adultAge.TextContent; var adultRating = statisticsAdult.GetElementsByClassName("field-stars-rating").FirstOrDefault(); if (adultRating != null) { var ratingClass = adultRating.ClassList.FirstOrDefault(_ => _.StartsWith("rating-")); //result.AdultRating = ratingClass.Replace("rating-", ""); if (int.TryParse(ratingClass.Replace("rating-", ""), out int ratingInt)) { csmData.AdultRating = ratingInt; } } } var statisticsChild = document.GetElementsByClassName("user-review-statistics child").FirstOrDefault(); if (statisticsChild != null) { var childAge = statisticsChild.GetElementsByClassName("stat-wrapper age").FirstOrDefault(); csmData.ChildRecomendedAge = childAge == null ? null : childAge.TextContent; var childRating = statisticsChild.GetElementsByClassName("field-stars-rating").FirstOrDefault(); if (childRating != null) { var ratingClass = childRating.ClassList.FirstOrDefault(_ => _.StartsWith("rating-")); //result.ChildRating = ratingClass.Replace("rating-", ""); if (int.TryParse(ratingClass.Replace("rating-", ""), out int ratingInt)) { csmData.ChildRating = ratingInt; } } } var storyParent = document.GetElementsByClassName("pane-node-field-what-is-story").FirstOrDefault(); if (storyParent != null) { var storyEl = storyParent.QuerySelectorAll("p").FirstOrDefault(); csmData.Story = storyEl == null ? null : storyEl.TextContent; } var isItAnyGoodParent = document.GetElementsByClassName("pane-node-field-any-good").FirstOrDefault(); if (isItAnyGoodParent != null) { var isItAnyGoodEl = isItAnyGoodParent.QuerySelectorAll("p").FirstOrDefault(); csmData.IsItAnyGood = isItAnyGoodEl == null ? null : isItAnyGoodEl.TextContent; } var talkWithKidsAboutParent = document.GetElementsByClassName("pane-node-field-family-topics").FirstOrDefault(); if (talkWithKidsAboutParent != null) { var talkWithKidsAboutEl = talkWithKidsAboutParent.QuerySelectorAll("p"); if (talkWithKidsAboutEl.Any()) { csmData.TalkWithKidsAbout = new List <string>(); foreach (var item in talkWithKidsAboutEl) { csmData.TalkWithKidsAbout.Add(item.TextContent); } } } ALotOrALittle tmp = null; tmp = Get_ALotOrALittle(document, "content-grid-item-educational", ALotOrAlittleElements.EducationalValue); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-message", ALotOrAlittleElements.PositiveMessages); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-role_model", ALotOrAlittleElements.PositiveRoleModelsAndRepresentations); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-violence", ALotOrAlittleElements.ViolenceAndScariness); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-sex", ALotOrAlittleElements.SexyStuff); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-language", ALotOrAlittleElements.Language); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-consumerism", ALotOrAlittleElements.Consumerism); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } tmp = Get_ALotOrALittle(document, "content-grid-item-drugs", ALotOrAlittleElements.DrinkingDrugsAndSmoking); if (tmp != null) { csmData.ALotOrALittle.Add(tmp); } } catch (Exception ex) { return(result.FailWithMessage(ex)); } } result.AdditionalDataReturn = csmData; return(result); ALotOrALittle Get_ALotOrALittle(IHtmlDocument document, string elementId, ALotOrAlittleElements category) { ALotOrALittle result2 = null; var parentElement = document.GetElementById(elementId); if (parentElement != null) { var stars = 0; var description = string.Empty; var ratingEl = parentElement.QuerySelectorAll("div.field_content_grid_rating").FirstOrDefault(); if (ratingEl != null) { var ratingClass = ratingEl.ClassList.FirstOrDefault(_ => _.StartsWith("content-grid-") && char.IsDigit(_[_.Length - 1])); //stars = ratingClass.Replace("content-grid-", ""); if (int.TryParse(ratingClass.Replace("content-grid-", ""), out int ratingInt)) { stars = ratingInt; } } var ratingDescEl = parentElement.QuerySelectorAll("div.field-name-field-content-grid-rating-text").FirstOrDefault(); if (ratingDescEl != null) { var ratingDescEl2 = ratingDescEl.QuerySelectorAll("p").FirstOrDefault(); if (ratingDescEl2 != null) { description = ratingDescEl2.TextContent; } } result2 = new ALotOrALittle() { Rating = stars, Description = description, Category = category }; } return(result2); } }