public MyAbandonwareGameDialog(AppManager Manager, MyAbandonGameInfo game, MyAbandonware helper, bool ShowDownload)
        {
            InitializeComponent();

            _manager = Manager;
            _game = game;
            _helper = helper;

            //I allow the creation of a new game if the connection is up
            //btnCommit.Visible = (_manager.DB.ConnectionStatus == ConnectionState.Open);

            gameDownloader.Visible = ShowDownload;
            if (!ShowDownload)
                screenshotsList.Height = 502;

            _manager.Translator.TranslateUI(_manager.AppSettings.Language, this.Name, this.Controls);

            CompileUI();
        }
示例#2
0
        private MyAbandonGameInfo ParseGamePage(string queryResult)
        {
            MyAbandonGameInfo result = null;

            if (queryResult != string.Empty)
            {
                htmlDoc.LoadHtml(queryResult);
                if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
                {
                    // Handle any parse errors as required
                    string errorMessage = string.Empty;
                    foreach (HtmlParseError error in htmlDoc.ParseErrors)
                    {
                        errorMessage += error.Reason + "\n";
                    }

                    CustomMessageBox cmb = new CustomMessageBox(errorMessage, _manager.Translator.GetTranslatedMessage(_manager.AppSettings.Language, 28, "Error"),
                                                                MessageBoxDialogButtons.Ok, MessageBoxDialogIcon.Error, false, false);
                    cmb.ShowDialog();
                    cmb.Dispose();

                }
                else
                {

                    if (htmlDoc.DocumentNode != null)
                    {
                        HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body//div[@class='box']");

                        if (bodyNode != null)
                        {
                            result = new MyAbandonGameInfo();

                            //Game Name
                            HtmlNode nameNode = bodyNode.SelectSingleNode("//h2[@itemprop='name']");
                            if (nameNode != null)
                            {
                                result.Title = nameNode.InnerText.Trim();
                            }

                            //Game Data
                            HtmlNode gameDataNode = bodyNode.SelectSingleNode("//div[@class='gameData']/dl");
                            if (gameDataNode != null)
                            {
                                foreach(HtmlNode itemNode in gameDataNode.ChildNodes)
                                {

                                    if (itemNode.Name.ToLower() == "dt")
                                    {
                                        if (itemNode.InnerText.Trim().ToLower() == "year")
                                            flags.SetFlags(true, false, false, false, false, false, false, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "platform")
                                            flags.SetFlags(false, true, false, false, false, false, false, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "released in")
                                            flags.SetFlags(false, false, true, false, false, false, false, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "genre")
                                            flags.SetFlags(false, false, false, true, false, false, false, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "theme")
                                            flags.SetFlags(false, false, false, false, true, false, false, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "publisher")
                                            flags.SetFlags(false, false, false, false, false, true, false, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "developer")
                                            flags.SetFlags(false, false, false, false, false, false, true, false, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "perspectives")
                                            flags.SetFlags(false, false, false, false, false, false, false, true, false);

                                        if (itemNode.InnerText.Trim().ToLower() == "dosbox support")
                                            flags.SetFlags(false, false, false, false, false, false, false, false, true);

                                    }

                                    if(itemNode.Name.ToLower() == "dd")
                                    {

                                        if(flags.IsYear)
                                            result.Year= WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                        if (flags.IsPlatform)
                                            result.Platform = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                        if (flags.IsReleasedIn)
                                            result.ReleasedIn = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                        if(flags.IsGenre)
                                            result.Genre = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                        if (flags.IsTheme)
                                        {
                                            string themeString = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                            if (themeString != string.Empty)
                                                result.Themes = themeString.Replace(", ",",").Split(',').ToList();
                                        }

                                        if (flags.IsPublisher)
                                            result.Publisher = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                        if (flags.IsDeveloper)
                                            result.Developer = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                        if (flags.IsPerspectives)
                                        {
                                            string perspectiveString = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                            if (perspectiveString != string.Empty)
                                                result.Perspectives = perspectiveString.Replace(", ", ",").Split(',', ' ').ToList();
                                        }

                                        if (flags.IsDosBox)
                                            result.DosBoxVersion = WebUtility.HtmlDecode(itemNode.InnerText.Trim());

                                    }
                                }

                            }

                            //Game Vote
                            HtmlNode voteNode = bodyNode.SelectSingleNode("//span[@itemprop='ratingValue']");
                            if (voteNode != null)
                                result.Vote = voteNode.InnerText;

                            //Game Descritpion
                            //First I check if exists the proper node
                            HtmlNode descriptionNode = bodyNode.SelectSingleNode("//div[@class='gameDescription dscr']");
                            if (descriptionNode != null)
                            {
                                result.Description = WebUtility.HtmlDecode(descriptionNode.InnerText);
                            }
                            else
                            {
                                //As it seems missing I try the other one
                                descriptionNode = bodyNode.SelectSingleNode("//div[@class='box']/h3[@class='cBoth']");
                                if (descriptionNode != null)
                                {
                                    HtmlNode descNone = descriptionNode.ParentNode.SelectSingleNode("p");
                                    if (descNone != null)
                                        result.Description = WebUtility.HtmlDecode(descNone.InnerText);
                                }
                            }

                            //Game Screenshots
                            HtmlNodeCollection screenshotsNodes = bodyNode.SelectNodes("//body//div[@class='thumb']/a[@class='lb']/img");
                            if (screenshotsNodes != null)
                            {
                                foreach (HtmlNode screen in screenshotsNodes)
                                {
                                    if(screen.Name.ToLower().Trim() == "img")
                                    {
                                        if (result.Screenshots == null)
                                            result.Screenshots = new List<string>();

                                        result.Screenshots.Add(GetMediaURI(screen.Attributes["src"].Value));
                                    }

                                }
                            }

                            //Game Download & Size
                            HtmlNode downloadNode = bodyNode.SelectSingleNode("//a[@class='button download']");
                            if (downloadNode != null)
                            {
                                result.DownloadLink = downloadNode.Attributes["href"].Value;

                                HtmlNode downloadSize = downloadNode.SelectSingleNode("//a[@class='button download']/span");
                                if (downloadSize != null)
                                {
                                    result.DownloadSize = downloadSize.InnerText.Trim();
                                }
                            }

                        }
                    }
                }
            }

            return result;
        }
        private void LoadGameData(bool noDownload)
        {
            _game = _scraper.RetrieveGameData(_selectedGame.Uri);

            if (_game != null)
            {
                MyAbandonwareGameDialog gameData = new MyAbandonwareGameDialog(_manager, _game, _scraper, noDownload);
                gameData.ShowDialog();
                if (gameData.Screenshot != null)
                {
                    _gameScreenshot = Application.StartupPath + "\\tmp.img";
                    Bitmap bmp = new Bitmap(gameData.Screenshot);
                    bmp.Save(_gameScreenshot);
                    bmp.Dispose();
                }
                else
                    _gameScreenshot = string.Empty;
                gameData.Dispose();
            }
        }
        private void btnGetGameData_Click(object sender, EventArgs e)
        {
            if(_selectedGame != null){
                if (_game == null || _game.GameURI != _selectedGame.Uri)
                {
                    _game = _scraper.RetrieveGameData(_selectedGame.Uri);

                    if (_game == null)
                        return;

                    //Retrieving first available screenshot
                    if (_game.Screenshots != null && _game.Screenshots.Count > 0)
                    {
                        _scraper.DownloadFileCompleted += _scraper_DownloadFileCompleted;
                        _scraper.DownloadMedia(_game.Screenshots[0], Application.StartupPath + "\\tmp.img");
                    }

                }
                else if( _game != null )
                {
                    CustomMessageBox cmb = new CustomMessageBox(_manager.Translator.GetTranslatedMessage(_manager.AppSettings.Language, 77, "Download Completed!!!"),
                                                                _manager.Translator.GetTranslatedMessage(_manager.AppSettings.Language, 59, "Information"),
                                                                MessageBoxDialogButtons.Ok, MessageBoxDialogIcon.Information, false, false);
                    cmb.ShowDialog();
                    cmb.Dispose();

                }

            }
        }