コード例 #1
0
 private void SetMaterialFade()
 {
     foreach (Material CaseMaterial in ListMaterial)
     {
         CaseMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
         CaseMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
         CaseMaterial.SetInt("_ZWrite", 0);
         CaseMaterial.DisableKeyword("_ALPHATEST_ON");
         CaseMaterial.EnableKeyword("_ALPHABLEND_ON");
         CaseMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON");
         CaseMaterial.renderQueue = 3000;
     }
 }
コード例 #2
0
 private void SetMaterialOpaque()
 {
     foreach (Material CaseMaterial in ListMaterial)
     {
         CaseMaterial.SetInt("_ScrBlend", (int)UnityEngine.Rendering.BlendMode.One);
         CaseMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
         CaseMaterial.SetInt("_ZWrite", 1);
         CaseMaterial.DisableKeyword("_ALPHATEST_ON");
         CaseMaterial.DisableKeyword("_ALPHABLEND_ON");
         CaseMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON");
         CaseMaterial.renderQueue = -1;
     }
 }
コード例 #3
0
        public async Task <string> ScrapeFromProductPageAsync(string productUrl)
        {
            if (productUrl.Contains("Combo"))
            {
                var message = "Invalid Product.";
                this.logger.LogWarning(message);
                return(message);
            }

            var document = await this.Context.OpenAsync(productUrl);

            var caseDataTableRows = this.GetAllTablesRows(document);
            var caseDataTables    = this.GetAllTables(document);
            var casePc            = new Case
            {
                Price            = this.GetPrice(document),
                ImageUrl         = this.GetImageUrl(document),
                Category         = this.GetCategoryFromUrl(productUrl),
                DownloadedRating = this.GetRatings(document),
            };

            casePc.DownloadedRating.ProductId = casePc.Id;

            this.logger.LogInformation(productUrl);

            foreach (var tableRow in caseDataTableRows)
            {
                var rowName  = tableRow.FirstChild.TextContent.Trim();
                var rowValue = tableRow.LastElementChild.InnerHtml.Replace("<br><br>", "{n}").Replace("<br>", "{n}").Trim();

                switch (rowName)
                {
                case "Model":
                    if (this.caseRepo.AllAsNoTracking().Any(x => x.Model == rowValue))
                    {
                        var message = "Already exists.";
                        this.logger.LogWarning(message);
                        return(message);
                    }

                    casePc.Model = rowValue;
                    break;

                case "Brand":
                    casePc.Brand = this.GetOrCreateBrand(this.brandRepo, rowValue);
                    break;

                case "Series":
                    casePc.Series = this.GetOrCreateSeries(this.seriesRepo, rowValue);
                    break;

                case "Type":
                    var type = this.caseTypeRepo.All().FirstOrDefault(x => x.Name == rowValue);
                    if (type == null)
                    {
                        type = new CaseType
                        {
                            Name = rowValue,
                        };
                    }

                    casePc.CaseType = type;
                    break;

                case "Color":
                    var color = this.colorRepo.All().FirstOrDefault(x => x.Name == rowValue);
                    if (color == null)
                    {
                        color = new Color
                        {
                            Name = rowValue,
                        };
                    }

                    casePc.Color = color;
                    break;

                case "Case Material":
                    var materialParts = rowValue.Split("/");
                    foreach (var materialPart in materialParts)
                    {
                        var materialName = materialPart.Trim();
                        if (this.caseMaterialRepo.AllAsNoTracking()
                            .Any(x => x.Material.Name == materialName && x.CaseId == casePc.Id))
                        {
                            continue;
                        }

                        var material = this.materialRepo.All().FirstOrDefault(x => x.Name == rowValue);
                        if (material == null)
                        {
                            material = new Material
                            {
                                Name = rowValue,
                            };
                        }

                        var caseMaterial = new CaseMaterial
                        {
                            Material = material,
                            CaseId   = casePc.Id,
                        };

                        casePc.CaseMaterials.Add(caseMaterial);
                    }

                    break;

                case "With Power Supply":
                    bool?hasPowerSupply = null;
                    if (rowValue.ToLower().Contains("no"))
                    {
                        hasPowerSupply = false;
                    }
                    else if (rowValue.ToLower().Contains("yes"))
                    {
                        hasPowerSupply = true;
                    }

                    casePc.HasPowerSupply = hasPowerSupply;
                    break;

                case "Power Supply Mounted":
                    casePc.CasePowerSupplyPosition = Enum.Parse <CasePowerSupplyPosition>(rowValue);
                    break;

                case "Motherboard Compatibility":
                    var formFactorParts = rowValue.Split("/");
                    foreach (var formFactorPart in formFactorParts)
                    {
                        var formFactorName = formFactorPart.Trim();
                        if (this.caseFormFactorRepo.AllAsNoTracking()
                            .Any(x => x.FormFactor.Name == formFactorName && x.CaseId == casePc.Id))
                        {
                            continue;
                        }

                        var formFactor = this.formFactorRepo.All().FirstOrDefault(x => x.Name == formFactorName);
                        if (formFactor == null)
                        {
                            formFactor = new FormFactor
                            {
                                Name = formFactorName,
                            };
                        }

                        var caseFormFactor = new CaseFormFactor
                        {
                            CaseId     = casePc.Id,
                            FormFactor = formFactor,
                        };

                        casePc.CaseFormFactors.Add(caseFormFactor);
                    }

                    break;

                case "Side Panel Window":
                    bool?hasPanelWindow = null;
                    if (rowValue.ToLower().Contains("no"))
                    {
                        hasPanelWindow = false;
                    }
                    else if (rowValue.ToLower().Contains("yes"))
                    {
                        hasPanelWindow = true;
                    }

                    casePc.SidePanelWindow = hasPanelWindow;
                    break;

                case "Dust Filters":
                    casePc.DustFilters = rowValue;
                    break;

                case "Internal 3.5\" Drive Bays":
                    var driveBay3point5Match = this.MatchOneOrMoreDigits.Match(rowValue);
                    if (!driveBay3point5Match.Success)
                    {
                        continue;
                    }

                    casePc.DriveBay3point5 = byte.Parse(driveBay3point5Match.Value);
                    break;

                case "Internal 2.5\" Drive Bays":
                    var driveBay2point5Match = this.MatchOneOrMoreDigits.Match(rowValue);
                    if (!driveBay2point5Match.Success)
                    {
                        continue;
                    }

                    casePc.DriveBay2point5 = byte.Parse(driveBay2point5Match.Value);
                    break;

                case "Expansion Slots":
                    var expansionSlotsMatch = this.MatchOneOrMoreDigits.Match(rowValue);
                    if (!expansionSlotsMatch.Success)
                    {
                        continue;
                    }

                    casePc.ExpansionSlots = byte.Parse(expansionSlotsMatch.Value);
                    break;

                case "Front Ports":
                    casePc.FrontPorts = rowValue;
                    break;

                case "Fan Options":
                    casePc.FanOptions = rowValue;
                    break;

                case "Radiator Options":
                    casePc.RadioatorOptions = rowValue;
                    break;

                case "Max GPU Length":
                    var gpuLenghtMatch = this.MatchOneOrMoreDigits.Match(rowValue);
                    if (!gpuLenghtMatch.Success)
                    {
                        continue;
                    }

                    casePc.MaxGPULength = short.Parse(gpuLenghtMatch.Value);
                    break;

                case "Max CPU Cooler Height":
                    var cpuCoolerHeightMatch = this.MatchOneOrMoreDigits.Match(rowValue);
                    if (!cpuCoolerHeightMatch.Success)
                    {
                        continue;
                    }

                    casePc.MaxCPUCoolerHeight = short.Parse(cpuCoolerHeightMatch.Value);
                    break;

                case "Max PSU Length":
                    var psuLenghtMatch = this.MatchOneOrMoreDigits.Match(rowValue);
                    if (!psuLenghtMatch.Success)
                    {
                        continue;
                    }

                    casePc.MaxPSULenght = short.Parse(psuLenghtMatch.Value);
                    break;

                case "Dimensions (H x W x D)":
                    var dimensions        = rowValue.Split("{n}")[0];
                    var dimensionsMatches = this.MatchOneOrMoreDigitsFloat.Matches(dimensions);
                    if (dimensionsMatches.Count >= 3)
                    {
                        casePc.Height = this.MatchAndParseFloat(dimensionsMatches[0].Value) * 2.54F;
                        casePc.Width  = this.MatchAndParseFloat(dimensionsMatches[1].Value) * 2.54F;
                        casePc.Depth  = this.MatchAndParseFloat(dimensionsMatches[2].Value) * 2.54F;
                    }

                    break;

                case "Weight":
                    casePc.Weight = this.MatchAndParseFloat(rowValue) * 0.45F;
                    break;

                case "Features":
                    casePc.Features = rowValue;
                    break;

                case "Date First Available":
                    casePc.FirstAvailable = DateTime.Parse(rowValue);
                    break;
                }
            }

            if (casePc.Model == null)
            {
                var message = "Invalid Model.";
                this.logger.LogWarning(message);
                return(message);
            }

            await this.caseRepo.AddAsync(casePc);

            await this.caseRepo.SaveChangesAsync();

            var successMessage = $"Successfully added {casePc.Model}.";

            this.logger.LogInformation(successMessage);
            return(successMessage);
        }