Esempio n. 1
0
        public static int[] SaveToDatabase(List <DAT_Rom> roms)
        {
            // get current rom list
            List <DAT_Rom> current = DAT_Rom.GetRoms();

            int added   = 0;
            int updated = 0;

            // create temp objects pre-database actions
            List <DAT_Rom> toAdd    = new List <DAT_Rom>();
            List <DAT_Rom> toUpdate = new List <DAT_Rom>();

            // iterate through each incoming rom
            foreach (var r in roms)
            {
                // attempt rom lookup in current
                DAT_Rom l = (from a in current
                             where a.md5 == r.md5 && a.pid == r.pid
                             select a).ToList().FirstOrDefault();

                if (l == null)
                {
                    // no entry found
                    toAdd.Add(r);
                }
                else
                {
                    // entry found - update required fields
                    DAT_Rom dr = r;
                    dr.gid = l.gid;
                    dr.rid = l.rid;

                    toUpdate.Add(dr);
                }
            }


            using (var db = new AsniDATAdminDbContext())
            {
                // check for duplicate keys
                var distinctToAdd    = toAdd.GroupBy(x => x.rid).Select(g => g.OrderByDescending(x => x.rid).First());
                var distinctToUpdate = toUpdate.GroupBy(x => x.rid).Select(g => g.OrderByDescending(x => x.rid).First());

                // update existing entries
                db.DAT_Rom.UpdateRange(distinctToUpdate);
                // add new entries
                db.DAT_Rom.AddRange(distinctToAdd);

                db.SaveChanges();

                added   = distinctToAdd.Count();
                updated = distinctToUpdate.Count();

                return(new int[] { added, updated });
            }
        }
Esempio n. 2
0
        public async void CalculateYearsAndPublishers()
        {
            var mySettings = new MetroDialogSettings()
            {
                NegativeButtonText = "Cancel Procedure",
                AnimateShow        = false,
                AnimateHide        = false
            };

            int    working = 0;
            string output  = "Processing Years & Publishers \n";

            var controller = await mw.ShowProgressAsync("Searching Years & Publishers", output, true, settings : mySettings);

            controller.SetCancelable(true);
            controller.SetIndeterminate();
            await Task.Delay(1000);

            await Task.Run(() =>
            {
                // get all games
                List <DAT_Game> AllGames = DAT_Game.GetGames();
                List <DAT_Rom> AllRoms   = DAT_Rom.GetRoms();

                List <DAT_Game> gWorking = new List <DAT_Game>();

                // automated searching first

                int numGames = AllGames.Where(a => a.year == null || a.publisher == null || a.developer == null).Count();

                int skipped = 0;

                // iterate through each game that does not have a year or publisher set
                foreach (var game in AllGames.Where(a => a.year == null || a.publisher == null || a.developer == null))
                {
                    DAT_Game g = new DAT_Game();
                    g          = game;

                    controller.SetMessage(output + "Number of games to process: " + numGames + "\nFixed: " + gWorking.Count() + "\nSkipped: " + skipped);

                    bool updateNeeded = false;

                    // lookup all roms for this game
                    List <DAT_Rom> search = (from a in AllRoms.Where(x => x.gid == game.gid)
                                             select a).ToList();

                    if (search.Count() > 0)
                    {
                        var yearSearch = (from a in search
                                          where a.year != null
                                          select a).FirstOrDefault();

                        var devSearch = (from a in search
                                         where a.developer != null
                                         select a).FirstOrDefault();

                        var pubSearch = (from a in search
                                         where a.publisher != null
                                         select a).FirstOrDefault();


                        if (yearSearch != null)
                        {
                            g.year       = yearSearch.year;
                            updateNeeded = true;
                        }
                        if (pubSearch != null)
                        {
                            g.publisher  = pubSearch.publisher;
                            updateNeeded = true;
                        }
                        if (devSearch != null)
                        {
                            g.developer  = pubSearch.developer;
                            updateNeeded = true;
                        }
                    }

                    if (updateNeeded == true)
                    {
                        gWorking.Add(g);
                    }
                    else
                    {
                        skipped++;
                    }
                }

                // db work
                DAT_Game.SaveToDatabase(gWorking);
                working = gWorking.Count();
            });


            await controller.CloseAsync();

            if (controller.IsCanceled)
            {
                await mw.ShowMessageAsync("DAT_Game Builder", "Procedure Cancelled");
            }
            else
            {
                await mw.ShowMessageAsync("DAT_Game Builder", "Procedure Completed - " + working + " games updated");
            }
        }