Ejemplo n.º 1
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            SetPartsGridView.AutoGenerateColumns = false;

            if (!SettingsManager.HasInitialized)
            {
                SettingsManager.Initialize();
            }

            LDDEnvironment.Initialize();
            RebrickableAPI.ApiKey = "aU49o5xulf";
            RebrickableAPI.InitializeClient();


            DBFilePath = SettingsManager.GetFilePath(SettingsManager.DATABASE_FILENAME);
            var currentFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            //DBFilePath = Path.Combine(currentFolder, "BrickDatabase.db");
            //if (!File.Exists(DBFilePath))
            //    File.Copy(currentFolder + "\\Resources\\EmptyDatabase.db", DBFilePath);
            if (SettingsManager.DatabaseExists())
            {
                ReloadRebrickableBaseData();
            }
            else
            {
                InitDatabase();
            }
        }
Ejemplo n.º 2
0
        public void ImportThemes()
        {
            using (var trans = Connection.BeginTransaction())
                using (var cmd = Connection.CreateCommand())
                {
                    cmd.CommandText = $"DELETE FROM {DbHelper.GetTableName<RbTheme>()}";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = $"DELETE FROM sqlite_sequence WHERE name='{DbHelper.GetTableName<RbTheme>()}'";
                    cmd.ExecuteNonQuery();

                    NotifyIndefiniteProgress("Downloading rebrickable themes...");
                    var themes = RebrickableAPI.GetAllThemes().ToList();
                    NotifyTaskStart("Importing themes...", themes.Count);

                    DbHelper.InitializeInsertCommand <RbTheme>(cmd, x => new { x.ID, x.Name, x.ParentThemeID });

                    int totalToProcess = themes.Count;
                    int totalProcessed = 0;

                    foreach (var rbTheme in themes)
                    {
                        if (IsCancellationRequested)
                        {
                            break;
                        }

                        DbHelper.InsertWithParameters(cmd, rbTheme.Id, rbTheme.Name, rbTheme.ParentID);

                        ReportProgress(++totalProcessed, totalToProcess);
                    }

                    trans.Commit();
                }
        }
 private void button1_Click(object sender, EventArgs e)
 {
     Task.Factory.StartNew(() =>
     {
         var SetInfo  = RebrickableAPI.GetSet("10019-1"); //10019-1
         var setParts = RebrickableAPI.GetSetParts(SetInfo.SetNum).ToList();
         BeginInvoke((Action)(() => LoadSetParts(setParts)));
         //PalatteGenerator.CreatePaletteFromSet(DBFilePath, setInfo);
     });
 }
Ejemplo n.º 4
0
 private void button2_Click(object sender, EventArgs e)
 {
     Task.Factory.StartNew(() =>
     {
         try
         {
             SetInfo = RebrickableAPI.GetSet(textBox1.Text);
             if (SetInfo != null)
             {
                 var setParts = RebrickableAPI.GetSetParts(SetInfo.SetNum).ToList();
                 BeginInvoke((Action)(() => LoadSetParts(setParts)));
                 //PalatteGenerator.CreatePaletteFromSet(DBFilePath, setInfo);
             }
         }
         catch { }
     });
 }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (!SettingsManager.HasInitialized)
            {
                SettingsManager.Initialize();
            }

            LDDEnvironment.Initialize();
            RebrickableAPI.ApiKey = "aU49o5xulf";
            RebrickableAPI.InitializeClient();

            if (!SettingsManager.DatabaseExists())
            {
                using (var win = new DatabaseInitProgressWindow())
                {
                    win.StartPosition = FormStartPosition.CenterParent;
                    win.ShowDialog();
                }
            }
        }
Ejemplo n.º 6
0
        public void ImportSets()
        {
            NotifyBeginStep("Importing sets");

            using (var trans = Connection.BeginTransaction())
                using (var cmd = Connection.CreateCommand())
                {
                    cmd.CommandText = $"DELETE FROM {DbHelper.GetTableName<RbSet>()}";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = $"DELETE FROM sqlite_sequence WHERE name='{DbHelper.GetTableName<RbSet>()}'";
                    cmd.ExecuteNonQuery();

                    NotifyIndefiniteProgress("Downloading rebrickable sets...");
                    var sets = RebrickableAPI.GetSets(minYear: 2018).ToList();
                    NotifyTaskStart("Importing sets...", sets.Count);

                    DbHelper.InitializeInsertCommand <RbSet>(cmd, x => new { x.SetID, x.Name, x.ThemeID, x.Year, x.InventoryDate });

                    int totalToProcess = sets.Count;
                    int totalProcessed = 0;

                    foreach (var rbSet in sets)
                    {
                        if (IsCancellationRequested)
                        {
                            break;
                        }

                        DbHelper.InsertWithParameters(cmd, rbSet.SetNum, rbSet.Name, rbSet.ThemeId, rbSet.Year, DateTime.Now);

                        ReportProgress(++totalProcessed, totalToProcess);
                    }

                    trans.Commit();
                }
        }
Ejemplo n.º 7
0
        public void ImportColors()
        {
            using (var trans = Connection.BeginTransaction())
                using (var colorCmd = Connection.CreateCommand())
                    using (var matchCmd = Connection.CreateCommand())
                    {
                        colorCmd.CommandText = $"DELETE FROM {DbHelper.GetTableName<RbColorMatch>()}";
                        colorCmd.ExecuteNonQuery();
                        colorCmd.CommandText = $"DELETE FROM {DbHelper.GetTableName<RbColor>()}";
                        colorCmd.ExecuteNonQuery();
                        colorCmd.CommandText = $"DELETE FROM sqlite_sequence WHERE name='{DbHelper.GetTableName<RbColorMatch>()}'";
                        colorCmd.ExecuteNonQuery();
                        colorCmd.CommandText = $"DELETE FROM sqlite_sequence WHERE name='{DbHelper.GetTableName<RbColor>()}'";
                        colorCmd.ExecuteNonQuery();

                        NotifyIndefiniteProgress("Downloading rebrickable colors...");

                        var colors = RebrickableAPI.GetAllColors().ToList();

                        NotifyTaskStart("Importing colors...", colors.Count);

                        DbHelper.InitializeInsertCommand <RbColor>(colorCmd, x =>
                                                                   new
                        {
                            x.ID,
                            x.Name,
                            x.IsTransparent,
                            x.RgbHex
                        });

                        DbHelper.InitializeInsertCommand <RbColorMatch>(matchCmd, x =>
                                                                        new
                        {
                            x.RbColorID,
                            x.Platform,
                            x.ColorID,
                            x.ColorName
                        });

                        int totalToProcess = colors.Count;
                        int totalProcessed = 0;

                        void AddColorMatches(int colorID, PaletteMaker.Rebrickable.Models.ColorIds colorIds, string platform)
                        {
                            int colorCount = colorIds?.ExtIds?.Count ?? 0;

                            for (int i = 0; i < colorCount; i++)
                            {
                                DbHelper.InsertWithParameters(matchCmd,
                                                              colorID,
                                                              platform,
                                                              colorIds.ExtIds[i],
                                                              colorIds.ExtDescrs[i][0]
                                                              );
                            }
                        }

                        foreach (var rbColor in colors)
                        {
                            if (IsCancellationRequested)
                            {
                                break;
                            }

                            DbHelper.InsertWithParameters(colorCmd,
                                                          rbColor.Id,
                                                          rbColor.Name,
                                                          rbColor.IsTransparent,
                                                          rbColor.RgbHex
                                                          );

                            AddColorMatches(rbColor.Id, rbColor.ExternalColorIds.LEGO, "LEGO");
                            AddColorMatches(rbColor.Id, rbColor.ExternalColorIds.BrickLink, "BrickLink");

                            ReportProgress(++totalProcessed, totalToProcess);
                        }

                        trans.Commit();
                    }
        }
Ejemplo n.º 8
0
        public static void FindLddPartsForSet(PaletteDbContext db, List <SetPartWrapper> setParts)
        {
            var rbColors = new Dictionary <int, RbColor>();

            foreach (var col in db.Colors)
            {
                rbColors.Add(col.ID, col);
            }

            foreach (var setPart in setParts)
            {
                if (setPart.CategoryID == 17 || setPart.CategoryID == 58)
                {
                    setPart.MatchingFlags = PartMatchingFlags.NonLegoPart;
                    continue;
                }

                setPart.RbPart = db.RbParts.FirstOrDefault(x => x.PartID == setPart.PartID);

                if (setPart.RbPart == null)
                {
                    setPart.MatchingFlags = PartMatchingFlags.InvalidRbPart;
                    continue;
                }

                if (!rbColors.TryGetValue(setPart.ColorID, out RbColor rbColor))
                {
                    setPart.MatchingFlags |= PartMatchingFlags.InvalidRbColor;
                    //continue;
                }

                var lddColor = rbColor.ColorMatches.Where(x => x.Platform == "LEGO").OrderBy(x => x.ColorID).FirstOrDefault();
                if (lddColor == null)
                {
                    setPart.MatchingFlags |= PartMatchingFlags.InvalidLddColor;
                    //continue;
                }

                setPart.LddColorID = lddColor?.ColorID ?? -1;

                if (!string.IsNullOrEmpty(setPart.ElementID))
                {
                    var foundElem = db.LddElements.FirstOrDefault(x => x.ElementID == setPart.ElementID);
                    if (foundElem != null)
                    {
                        setPart.LddElement         = foundElem;
                        setPart.IsGeneratedElement = false;
                        setPart.LddPart            = db.LddParts.FirstOrDefault(x => x.DesignID == foundElem.DesignID);

                        if (setPart.LddPart != null)
                        {
                            setPart.MatchingFlags = PartMatchingFlags.Matched;
                            continue;
                        }
                    }
                }

                var lddPart = FindLddPart(db, setPart.RbPart);

                if (lddPart == null)
                {
                    setPart.MatchingFlags = PartMatchingFlags.LddPartNotFound;
                    continue;
                }

                //Fix LDD elements that references part aliases
                if (setPart.LddElement != null)
                {
                    Debug.WriteLine("Encountered LDD Element on part alias");
                    string aliasID = setPart.LddElement.DesignID;
                    setPart.LddElement.DesignID = lddPart.DesignID;
                    foreach (var p in setPart.LddElement.Parts)
                    {
                        if (p.PartID == aliasID)
                        {
                            p.PartID = lddPart.DesignID;
                        }
                    }
                    db.SaveChanges();
                }

                setPart.LddPart       = lddPart;
                setPart.MatchingFlags = PartMatchingFlags.Matched;
            }

            foreach (var part in setParts.Where(x => x.MatchingFlags == PartMatchingFlags.Matched))
            {
                Debug.WriteLine($"Matched Part '{part.PartName}' ({part.PartID}) to LDD ID {part.LddPartID}");
            }

            var unmatchedParts = setParts.Where(x => x.MatchingFlags == PartMatchingFlags.LddPartNotFound).ToList();

            if (unmatchedParts.Any())
            {
                Debug.WriteLine("Querying rebrickable....");
                var newMappings = new List <Models.PartMapping>();

                var partDetails = RebrickableAPI.GetPartsDetails(unmatchedParts.Select(x => x.PartID).Distinct()).ToList();
                foreach (var partDetail in partDetails)
                {
                    if (partDetail.ExternalIds.LEGO?.Count > 0)
                    {
                        var relatedSetParts = unmatchedParts.Where(x => x.PartID == partDetail.PartNum).ToList();

                        var legoPartIDs = partDetail.ExternalIds.LEGO.ToArray();

                        relatedSetParts.ForEach(x => x.LegoIDs.AddRange(legoPartIDs));

                        var matchingParts = db.LddParts.Where(x => legoPartIDs.Contains(x.DesignID)).ToList();

                        var foundPart = matchingParts.FirstOrDefault();
                        if (foundPart != null)
                        {
                            Debug.WriteLine($"Matched Part '{partDetail.Name}' ({partDetail.PartNum}) to LDD ID {foundPart.DesignID}");
                            var rbPart = db.RbParts.FirstOrDefault(x => x.PartID == partDetail.PartNum);

                            if (!newMappings.Any(x => x.RebrickableID == (rbPart.ParentPartID ?? rbPart.PartID)))
                            {
                                newMappings.Add(new Models.PartMapping()
                                {
                                    RebrickableID = rbPart.ParentPartID ?? rbPart.PartID,
                                    LegoID        = foundPart.DesignID,
                                    MatchLevel    = 3,
                                    IsActive      = true
                                });
                            }

                            foreach (var setPart in unmatchedParts.Where(x => x.PartID == partDetail.PartNum))
                            {
                                setPart.LddPart        = foundPart;
                                setPart.MatchingFlags |= PartMatchingFlags.Matched;
                            }
                        }
                    }
                }

                if (newMappings.Any())
                {
                    db.PartMappings.AddRange(newMappings);
                    db.SaveChanges();
                }
            }



            foreach (var part in setParts.Where(x => x.LddPartFound && x.LddElement == null))
            {
                part.LddElement         = GenererateElement(db, part);
                part.IsGeneratedElement = (part.LddElement != null);
            }


            foreach (var part in setParts.Where(x => x.MatchingFlags == PartMatchingFlags.LddPartNotFound))
            {
                Debug.WriteLine($"Part '{part.PartName}' ({part.PartID}) not found in LDD");
            }
        }