예제 #1
0
        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;
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
        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);
            }
        }