예제 #1
0
 /// <summary>
 /// update a single game entry
 /// </summary>
 /// <param name="game"></param>
 public static void UpdateGame(GDB_Game game)
 {
     using (var uG = new AsniScrapeAdminDbContext())
     {
         uG.GDB_Game.Update(game);
         uG.SaveChanges();
         uG.Dispose();
     }
 }
예제 #2
0
 /// <summary>
 /// add a single game entry
 /// </summary>
 /// <param name="game"></param>
 public static void AddGame(GDB_Game game)
 {
     using (var aG = new AsniScrapeAdminDbContext())
     {
         aG.GDB_Game.Add(game);
         aG.SaveChanges();
         aG.Dispose();
     }
 }
예제 #3
0
        /// <summary>
        /// save list of games to database (add or update logic included)
        /// </summary>
        /// <param name="games"></param>
        public static void SaveToDatabase(List <GDB_Game> games)
        {
            // list to hold junction table info
            List <int> jIds = new List <int>();

            using (var db = new AsniScrapeAdminDbContext())
            {
                // get current database context
                var current = db.GDB_Game.AsNoTracking().ToList();

                List <GDB_Game> toAdd    = new List <GDB_Game>();
                List <GDB_Game> toUpdate = new List <GDB_Game>();

                // iterate through the games list and separete out games to be added and games to be updated
                foreach (var g in games)
                {
                    jIds.Add(g.gid);

                    GDB_Game t = (from a in current
                                  where a.gid == g.gid
                                  select a).SingleOrDefault();
                    if (t == null)
                    {
                        toAdd.Add(g);
                    }
                    else
                    {
                        toUpdate.Add(g);
                    }
                }
                db.GDB_Game.UpdateRange(toUpdate);
                db.GDB_Game.AddRange(toAdd);
                db.SaveChanges();
            }

            // now update the junction table if neccesary
            Junction.SaveToDatabaseNoUpdate(jIds);
        }
예제 #4
0
        /// <summary>
        /// update the scrape database with a list of gdb platform games (from the web)
        /// </summary>
        public async void ScrapePlatformGames()
        {
            var mySettings = new MetroDialogSettings()
            {
                NegativeButtonText = "Cancel Scraping",
                AnimateShow        = false,
                AnimateHide        = false,
            };

            var controller = await mw.ShowProgressAsync("MedLaunch - Getting Basic Games List From thegamesdb.net", "", settings : mySettings);

            controller.SetCancelable(true);
            await Task.Delay(100);

            await Task.Run(() =>
            {
                Task.Delay(1);
                List <GDB_Game> gs = new List <GDB_Game>();
                int count          = 0;
                int sysCount       = platforms.Count();

                controller.Minimum = 0;
                controller.Maximum = sysCount;

                foreach (var platform in platforms)
                {
                    controller.SetProgress(Convert.ToDouble(count));
                    controller.SetMessage("Retrieving Game List for Platform: " + platform.name);

                    List <GDBNETGameSearchResult> result = GDBNETGamesDB.GetPlatformGames(platform.pid).ToList();
                    if (result.Count == 0)
                    {
                        // nothing returned
                        if (controller != null)
                        {
                            controller.SetMessage("No results returned.\n Maybe an issue connecting to thegamesdb.net...");
                            Task.Delay(2000);
                        }
                    }

                    foreach (var r in result)
                    {
                        GDB_Game g  = new GDB_Game();
                        g.gid       = r.ID;
                        g.gameTitle = r.Title.Trim();
                        g.pid       = platform.pid;

                        if (r.ReleaseDate != null)
                        {
                            if (r.ReleaseDate.Contains("/"))
                            {
                                g.releaseYear = r.ReleaseDate.Split('/').Last().Trim();
                            }
                            else
                            {
                                g.releaseYear = r.ReleaseDate.Trim();
                            }
                        }

                        gs.Add(g);
                    }

                    // remove duplicates
                    gs.Distinct();

                    controller.SetMessage("Saving to database");
                }

                GDB_Game.SaveToDatabase(gs);
            });

            await controller.CloseAsync();

            if (controller.IsCanceled)
            {
                await mw.ShowMessageAsync("GDB Master Games List Download", "Operation Cancelled");
            }
            else
            {
                await mw.ShowMessageAsync("GDB Master Games List Download", "Scanning and Import Completed");
            }
        }
예제 #5
0
        public static async void ParseManuals()
        {
            MainWindow mw = Application.Current.Windows.OfType <MainWindow>().FirstOrDefault();
            // start progress dialog controller
            var mySettings = new MetroDialogSettings()
            {
                NegativeButtonText = "Cancel Scraping",
                AnimateShow        = false,
                AnimateHide        = false
            };
            var controller = await mw.ShowProgressAsync("Matching game manuals", "Initialising...", true, settings : mySettings);

            controller.SetCancelable(true);
            await Task.Delay(100);

            await Task.Run(() =>
            {
                List <Game_Doc> docs        = new List <Game_Doc>();
                List <Game_Doc> docsNoMatch = new List <Game_Doc>();

                // get all docs
                using (var context = new AsniScrapeAdminDbContext())
                {
                    var mData = from g in context.Game_Doc
                                select g;

                    docs = mData.ToList();
                }

                int Matched = 0;

                // iterate through each doc that does not have a game ID set
                foreach (Game_Doc m in docs.Where(a => a.gid == null))
                {
                    controller.SetMessage("Matching Manuals for Game: " + m.gameName + "\n(" + MedLaunch.Models.GSystem.ReturnGamesDBPlatformName(m.pid.Value) + ")\n\nMatches Found: " + Matched.ToString());

                    var games = from a in GDB_Game.GetGames()
                                where a.pid == m.pid
                                select a;

                    // try exact match
                    var search = (from a in games
                                  where a.gameTitle.Trim().ToLower().Replace(":", "").Replace("-", "").Replace("'", "").Replace("  ", " ")
                                  == m.gameName.Trim().ToLower().Replace(":", "").Replace("-", "").Replace("'", "").Replace("  ", " ")
                                  select a).FirstOrDefault();

                    if (search != null)
                    {
                        // exact match found - update entry
                        Game_Doc gd    = new Game_Doc();
                        gd.id          = m.id;
                        gd.gameName    = m.gameName;
                        gd.pid         = m.pid;
                        gd.downloadUrl = m.downloadUrl;
                        gd.gid         = search.gid;

                        UpdateDoc(gd);

                        Matched++;
                    }
                    else
                    {
                        // no exact match found - do manual selection based on word matching
                        docsNoMatch.Add(m);
                    }
                }

                // now do manual
                foreach (Game_Doc m in docsNoMatch.Where(a => a.gid == null))
                {
                    List <ManualCount> mcount = new List <ManualCount>();
                    var games = from a in GDB_Game.GetGames()
                                where a.pid == m.pid
                                select a;

                    string[] lArr = m.gameName.Trim().Split(' ');

                    List <GDB_Game> hitList = new List <GDB_Game>();

                    for (int i = 0; i < lArr.Length; i++)
                    {
                        var s = games.Where(a => a.gameTitle.ToLower().Trim().Contains(lArr[i].ToLower().Trim()));
                        hitList.AddRange(s);
                    }
                    // count entries in list
                    var q = from x in hitList
                            group x by x into g
                            let count = g.Count()
                                        orderby count descending
                                        select new { Value = g.Key, Count = count };
                    foreach (var x in q)
                    {
                        ManualCount mc = new ManualCount();
                        mc.Game        = x.Value;
                        mc.Matches     = x.Count;
                        mcount.Add(mc);
                    }

                    foreach (var g in mcount.OrderByDescending(a => a.Matches))
                    {
                        string message          = "Manual: \n" + m.gameName + "\n";
                        message                += "\nGame:\n " + g.Game.gameTitle + "\n(" + MedLaunch.Models.GSystem.ReturnGamesDBPlatformName(m.pid.Value) + ")\n";
                        message                += "\nIs this a match??\n";
                        message                += "YES - match / NO - nomatch / CANCEL - cancel";
                        MessageBoxResult result = MessageBox.Show(message, "Manual Matching", MessageBoxButton.YesNoCancel);
                        if (result == MessageBoxResult.Cancel)
                        {
                            break;
                        }
                        if (result == MessageBoxResult.Yes)
                        {
                            // this is a match - update the record
                            Game_Doc gd    = new Game_Doc();
                            gd.id          = m.id;
                            gd.gameName    = m.gameName;
                            gd.pid         = m.pid;
                            gd.downloadUrl = m.downloadUrl;
                            gd.gid         = g.Game.gid;

                            UpdateDoc(gd);
                            Matched++;
                            break;
                        }
                        if (result == MessageBoxResult.No)
                        {
                            // not a match - continue
                            continue;
                        }
                    }
                }
            });

            await controller.CloseAsync();

            if (controller.IsCanceled)
            {
                await mw.ShowMessageAsync("Parse Manuals", "Parsing Cancelled");
            }
            else
            {
                await mw.ShowMessageAsync("Parse Manuals", "Parsing Completed");
            }
        }