Пример #1
0
        //public static void ImportBaseData(string databasePath, CancellationToken cancellationToken)
        //{
        //    using (var conn = new SQLiteConnection($"Data Source={databasePath}"))
        //    {
        //        conn.Open();

        //        var lddImporter = new LddDataImporter(conn, LDDEnvironment.Current, cancellationToken);
        //        lddImporter.ImportAllData();

        //        if (cancellationToken.IsCancellationRequested)
        //            return;

        //        //var rbImporter = new RebrickableDataImporter(conn, LDDEnvironment.Current, cancellationToken);
        //        //rbImporter.ImportAllData();

        //    }
        //}

        //public static void ImportLddPartsAndAssemblies(string databasePath, CancellationToken cancellationToken)
        //{
        //    using (var conn = new SQLiteConnection($"Data Source={databasePath}"))
        //    {
        //        var lddImporter = new LddDataImporter(conn, LDDEnvironment.Current, cancellationToken);
        //        lddImporter.ImportAllData();
        //    }
        //}

        //public static void ImportRebrickableData(string databasePath, CancellationToken cancellationToken)
        //{
        //    using (var conn = new SQLiteConnection($"Data Source={databasePath}"))
        //    {
        //        conn.Open();
        //        var rbImporter = new RebrickableDataImporter(conn, LDDEnvironment.Current, cancellationToken);
        //        rbImporter.ImportAllData();
        //    }
        //}

        public static void InitializeDefaultMappings(string databasePath, IDbInitProgressHandler progressHandler)
        {
            progressHandler.OnBeginStep("Initializing Rebrickable to LDD mappings");
            progressHandler.OnReportIndefiniteProgress();
            progressHandler.OnReportProgressStatus(string.Empty);

            using (var conn = new SQLiteConnection($"Data Source={databasePath}"))
            {
                conn.Open();

                using (var trans = conn.BeginTransaction())
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = $"DELETE FROM {DbHelper.GetTableName<PartMapping>()} WHERE MatchLevel <= 2";
                        cmd.ExecuteNonQuery();

                        DbHelper.InitializeInsertCommand <PartMapping>(cmd, x => new { x.RebrickableID, x.LegoID, x.MatchLevel, x.IsActive });

                        string insertIntoSQL = cmd.CommandText.Substring(0, cmd.CommandText.IndexOf("VALUES"));
                        cmd.CommandText = insertIntoSQL + " SELECT r.PartID, r.PartID, 0, 1 FROM RbParts r " +
                                          "INNER JOIN LddParts l on l.DesignID = r.PartID " +
                                          "WHERE r.IsPrintOrPattern = 0";
                        cmd.ExecuteNonQuery(); // Insert exact matches

                        cmd.CommandText = insertIntoSQL + " SELECT r.PartID, l.DesignID, 1, 1 FROM RbParts r " +
                                          "INNER JOIN LddParts l on l.Aliases LIKE '%;' || r.PartID || ';%' " +
                                          "WHERE LENGTH(l.Aliases) > 0 AND r.IsPrintOrPattern = 0 AND l.DesignID <> r.PartID";
                        cmd.ExecuteNonQuery(); // Insert exact matches on LDD aliases

                        cmd.CommandText = $"DELETE FROM {DbHelper.GetTableName<PartMapping>()} WHERE MatchLevel = 1 " +
                                          $"AND RebrickableID in (SELECT pm.RebrickableID from {DbHelper.GetTableName<PartMapping>()} pm WHERE pm.MatchLevel = 0) ";
                        cmd.ExecuteNonQuery(); // remove possible duplicates

                        cmd.CommandText = insertIntoSQL + " SELECT r.PartID, '73200', 1, 1 FROM RbParts r " +
                                          "WHERE r.IsPrintOrPattern = 0 and r.PartID like '970c%'";
                        cmd.ExecuteNonQuery(); // Insert minifigs legs alternates

                        cmd.CommandText = insertIntoSQL + "SELECT r1.PartID, '76382', 1, 1 FROM RbParts r1 " +
                                          "WHERE r1.IsPrintOrPattern = 0 and r1.PartID like '973c%' " +
                                          "UNION " +
                                          "SELECT r2.ParentPartID, '76382', 1, 1 FROM RbParts r2 " +
                                          "WHERE r2.IsPrintOrPattern = 1 and r2.ParentPartID like '973c%' ";
                        cmd.ExecuteNonQuery(); //Insert minifigs toros alternates

                        cmd.CommandText = insertIntoSQL + " SELECT r.PartID, l.DesignID, 2, 1 FROM RbParts r " +
                                          "INNER JOIN LddParts l on l.DesignID = substr(r.PartID, 1, length(r.PartID) - 1) " +
                                          "WHERE  r.IsPrintOrPattern = 0 and r.IsAssembly = 0 and (r.PartID like '%a' or r.PartID like '%b' or r.PartID like '%c')";
                        cmd.ExecuteNonQuery(); // Insert possible alternates (e.g.: 3245a, 3245b -> 3245)

                        cmd.CommandText = insertIntoSQL + " SELECT r.PartID, l.DesignID, 2, 1 FROM RbParts r " +
                                          "INNER JOIN LddParts l on l.DesignID = r.ParentPartID " +
                                          $"WHERE r.IsPrintOrPattern = 1 and r.PartID not in (select RebrickableID from {DbHelper.GetTableName<PartMapping>()})";
                        cmd.ExecuteNonQuery(); // Insert prints


                        trans.Commit();
                    }
            }
        }
Пример #2
0
        public static void InitializeOrUpdateDatabase(string databasePath,
                                                      InitializationStep steps,
                                                      CancellationToken cancellationToken,
                                                      IDbInitProgressHandler progressHandler)
        {
            using (var conn = new SQLiteConnection($"Data Source={databasePath}"))
            {
                conn.Open();

                int totalSteps = 0;

                foreach (InitializationStep step in Enum.GetValues(typeof(InitializationStep)))
                {
                    if (step != InitializationStep.All && steps.HasFlag(step))
                    {
                        totalSteps++;
                    }
                }

                progressHandler?.OnInitImportTask(totalSteps);

                if (steps.HasFlag(InitializationStep.LddPartsAndElements))
                {
                    var lddImporter = new LddDataImporter(conn, LDDEnvironment.Current, cancellationToken);
                    lddImporter.ProgressHandler = progressHandler;
                    lddImporter.ImportAllData();
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                if (steps.HasFlag(InitializationStep.RebrickableBaseData) ||
                    steps.HasFlag(InitializationStep.RebrickablePartsAndRelationships) ||
                    steps.HasFlag(InitializationStep.RebrickableSets) ||
                    steps.HasFlag(InitializationStep.RebrickableSetParts))
                {
                    var rbImporter = new RebrickableDataImporter(conn, LDDEnvironment.Current, cancellationToken);
                    rbImporter.ProgressHandler       = progressHandler;
                    rbImporter.InventoriesCsvFile    = @"C:\Users\JWTurner\Downloads\inventories.csv";
                    rbImporter.InventoryPartsCsvFile = @"C:\Users\JWTurner\Downloads\inventory_parts.csv";

                    if (steps.HasFlag(InitializationStep.RebrickableBaseData))
                    {
                        rbImporter.ImportBaseData();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickablePartsAndRelationships))
                    {
                        rbImporter.ImportPartsAndRelationships();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickableSets))
                    {
                        rbImporter.ImportSets();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickableSetParts))
                    {
                        rbImporter.ImportSetParts();
                    }
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                if (steps.HasFlag(InitializationStep.RebrickableLddMappings))
                {
                    InitializeDefaultMappings(databasePath, progressHandler);
                }
            }
        }
Пример #3
0
        public static void InitializeOrUpdateDatabase(string databasePath,
                                                      InitializationStep steps,
                                                      CancellationToken cancellationToken,
                                                      IDbInitProgressHandler progressHandler)
        {
            using (var conn = new SQLiteConnection($"Data Source={databasePath}"))
            {
                conn.Open();

                int totalSteps = 0;

                foreach (InitializationStep step in Enum.GetValues(typeof(InitializationStep)))
                {
                    if (step == InitializationStep.All ||
                        step == InitializationStep.RebrickableData ||
                        step == InitializationStep.RebrickablePartsAndRelationships)
                    {
                        continue;
                    }

                    if (steps.HasFlag(step))
                    {
                        totalSteps++;
                    }
                }

                progressHandler?.OnInitImportTask(totalSteps);

                if (steps.HasFlag(InitializationStep.LddPartsAndElements))
                {
                    var lddImporter = new LddDataImporter(conn, LDDEnvironment.Current, cancellationToken);
                    lddImporter.ProgressHandler = progressHandler;
                    lddImporter.ImportAllData();
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                if (steps.HasFlag(InitializationStep.RebrickableBaseData) ||
                    steps.HasFlag(InitializationStep.RebrickableParts) ||
                    steps.HasFlag(InitializationStep.RebrickablePartsAndRelationships) ||
                    steps.HasFlag(InitializationStep.RebrickableSets) ||
                    steps.HasFlag(InitializationStep.RebrickableSetParts))
                {
                    var rbImporter = new RebrickableDataImporter(conn, LDDEnvironment.Current, cancellationToken);
                    rbImporter.ProgressHandler   = progressHandler;
                    rbImporter.DownloadDirectory = Path.Combine(Settings.SettingsManager.AppDataFolder, "Downloads");

                    if (steps.HasFlag(InitializationStep.RebrickableBaseData))
                    {
                        rbImporter.ImportBaseData();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickableParts))
                    {
                        rbImporter.ImportRebrickableParts();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickablePartRelationships))
                    {
                        rbImporter.ImportRebrickableRelationships();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickableSets))
                    {
                        rbImporter.ImportSets();
                    }

                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (steps.HasFlag(InitializationStep.RebrickableSetParts))
                    {
                        rbImporter.ImportSetParts();
                    }
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                if (steps.HasFlag(InitializationStep.RebrickableLddMappings))
                {
                    InitializeDefaultMappings(databasePath, progressHandler);
                }
            }
        }