/// <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(); } }
/// <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(); } }
/// <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); }
/// <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"); } }
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"); } }