Ejemplo n.º 1
0
        /// <summary>
        /// Processes all package configurations.
        /// </summary>
        public void ProcessPackageConfigurations()
        {
            // get all products that are configured
            IEnumerable <IProduct> products = ProductService.GetAll();

            // for each product try to find new packages
            foreach (IProduct product in products)
            {
                IPackageConfiguration configuration = null;

                if (product.PackageConfigurations != null)
                {
                    configuration = product.PackageConfigurations
                                    .Where(config => config.IsActive)
                                    .OrderByDescending(config => config.UpdatedAt)
                                    .FirstOrDefault();
                }

                Version lastPackageVersion = null;
                if (product.Packages != null)
                {
                    var packageWithHighestVersion = product.Packages.OrderBy(package => package.Version).LastOrDefault();
                    if (packageWithHighestVersion != null)
                    {
                        lastPackageVersion = packageWithHighestVersion.Version;
                    }
                }

                if (configuration != null)
                {
                    if (configuration.SearchPath != null)
                    {
                        string lastFileName = null;

                        if (lastPackageVersion != null)
                        {
                            lastFileName = string.Format("{0}_{1}.{2}.{3}.zip",
                                                         configuration.Name,
                                                         lastPackageVersion.Major,
                                                         lastPackageVersion.Minor,
                                                         lastPackageVersion.Build);
                        }

                        if (Directory.Exists(configuration.SearchPath))
                        {
                            foreach (string packageUrl in Directory.EnumerateFiles(configuration.SearchPath, configuration.SearchPattern))
                            {
                                var fileName = new FileInfo(packageUrl).Name;

                                if (String.Compare(fileName, lastFileName, StringComparison.InvariantCultureIgnoreCase) > 0)
                                {
                                    //create package for this configuration
                                    IPackage package = PackageService.CreateInstance();
                                    Match    matches = FilenamePattern.Match(fileName);

                                    if (matches.Success)
                                    {
                                        package.Name = matches.Groups[1].Value;

                                        int major;
                                        if (int.TryParse(matches.Groups[2].Value, out major))
                                        {
                                            int minor;
                                            if (int.TryParse(matches.Groups[3].Value, out minor))
                                            {
                                                int build;
                                                if (int.TryParse(matches.Groups[4].Value, out build))
                                                {
                                                    package.Version = new Version(major, minor, build);
                                                }
                                            }
                                        }
                                    }

                                    package.Name       = fileName;
                                    package.Product    = product;
                                    package.Websites   = configuration.Websites;
                                    package.SetupSteps = configuration.SetupSteps;
                                    package.PackageUrl = packageUrl;
                                }
                            }
                        }
                    }
                }
            }
        }