Ejemplo n.º 1
0
 public void AddProductSettings(ProductSettings prodSettings)
 {
     if (prodSettings.IsOptional)
     {
         productSettings.Add(prodSettings);
     }
 }
Ejemplo n.º 2
0
        internal int Activate()
        {
            int pkgStartedCount = 0;
            List <ProductSettings> productsSettings = ConfigParser.GetConfig().GetProductsSettings();

            foreach (KeyValuePair <string, InstallationPackage> pkg in packageDictionary)
            {
                if (pkg.Value.InstallationState == InstallationPackage.State.Init || pkg.Value.InstallationState == InstallationPackage.State.Error)
                {
                    ProductSettings prodSettings = productsSettings.FirstOrDefault(prod => prod.Name == pkg.Key);
                    if (!string.IsNullOrEmpty(prodSettings.Name))
                    {
                        pkg.Value.SetDownloadInfo(prodSettings);
                        pkg.Value.SetExtractInfo(prodSettings.ExtractPath, prodSettings.IsExtractable);

                        string extraParams = ConfigParser.GetConfig().GetConfigValue("EXTRA_PARAMS");
                        prodSettings.RunParams += string.IsNullOrEmpty(extraParams) ? string.Empty : (" " + extraParams);
                        pkg.Value.SetRunInfo(prodSettings.RunPath, prodSettings.RunParams, prodSettings.MsiTimeoutMS, prodSettings.RunWithBits);
                        pkgStartedCount += (pkg.Value.Activate()) ? 1 : 0;
                    }
                }
            }
            isActivated = true;
            return(pkgStartedCount);
        }
Ejemplo n.º 3
0
        internal void SetProductsSettings(List <ProductSettings> productsSettings)
        {
            int maxOptionalProducts = ConfigParser.GetConfig().GetIntValue("//RemoteConfiguration/FlowSettings/MaxProducts", int.MaxValue);

            maxOptionalProducts = maxOptionalProducts == -1 ? int.MaxValue : maxOptionalProducts;
            int optionalProducts = 0;

            foreach (ProductSettings prodSettings in productsSettings)
            {
                if (packageDictionary.ContainsKey(prodSettings.Name))
                {
                    continue;
                }

                if (prodSettings.IsOptional && (optionalProducts >= maxOptionalProducts))
                {
#if DEBUG
                    Logger.GetLogger().Info($"[{prodSettings.Name}] product will not be shown since the limit of optional products to show is: {maxOptionalProducts}");
#endif
                    continue;
                }

                if ((prodSettings.PreInstall.RequirementList != null) && (prodSettings.PreInstall.RequirementsList != null))
                {
                    RequirementHandlers reqHandlers = new RequirementHandlers();
#if DEBUG
                    Logger.GetLogger().Info("[" + prodSettings.Name + "] Checking requirements for product:");
#endif
                    ProductSettings tmpProdSettings = prodSettings;

                    bool res = default;
                    if (productClasses.Contains(tmpProdSettings.Class))
                    {
                        res = false;
#if DEBUG
                        Logger.GetLogger().Info($"Class ({tmpProdSettings.Class}) <Exists> [{string.Join(", ", productClasses)}] => False");
#endif
                        tmpProdSettings.PreInstall.UnfulfilledRequirementType = "Class";
                    }
                    else
                    {
                        res = reqHandlers.HandlersResult(ref tmpProdSettings.PreInstall);
                    }

                    if (!res)
                    {
                        OnDiscardPackage(null, tmpProdSettings);
                        continue;
                    }
                }

                if (!string.IsNullOrEmpty(prodSettings.Class))
                {
                    productClasses.Add(prodSettings.Class);
                }

                if (prodSettings.IsOptional)
                {
                    optionalProducts++;
                }

                InstallationPackage pkg = CreatePackage(prodSettings.Behavior, prodSettings.Name);
                productLayoutManager.AddProductSettings(prodSettings);
                OnCreatePackage(pkg, prodSettings);
            }
        }
Ejemplo n.º 4
0
        public ProductSettings ExtractProductSettings(XmlNode productSettingsNode)
        {
#if DEBUG
            Logger.GetLogger().Info("Read config file - Product Settings:", Logger.Level.MEDIUM_DEBUG_LEVEL);
#endif
            var productSettings = new ProductSettings
            {
                IsOptional    = XmlParser.GetBoolAttribute(productSettingsNode, "optional"),
                IsExtractable = XmlParser.GetBoolAttribute(productSettingsNode, "extractable", true)
            };

            XmlNode productStaticData  = productSettingsNode.SelectSingleNode("StaticData");
            XmlNode productDynamicData = productSettingsNode.SelectSingleNode("DynamicData");
            productSettings.Name = XmlParser.GetStringValue(productStaticData, "Title");
            if (productSettings.IsOptional)
            {
                productSettings.Name = "sec:" + XmlParser.GetStringValue(productDynamicData, "InternalName");
            }
            productSettings.Skin  = XmlParser.GetStringValue(productDynamicData, "Skin");
            productSettings.Class = XmlParser.GetStringValue(productDynamicData, "Class");

            EvalCustomVariables(productStaticData.SelectSingleNode("CustomData/CustomVars"));

            productSettings.Filename    = XmlParser.GetStringValue(productStaticData, "Filename");
            productSettings.ExtractPath = XmlParser.GetStringValue(productStaticData, "ExtractPath");
            productSettings.RunPath     = XmlParser.GetStringValue(productStaticData, "RunPath");

            productSettings.DownloadURLs = new List <ProductSettings.DownloadURL>();
            foreach (XmlNode DownloadURLNode in productStaticData.SelectNodes("DownloadURLs/DownloadURL"))
            {
                ProductSettings.DownloadURL downloadURL = new ProductSettings.DownloadURL
                {
                    Arch = XmlParser.GetStringAttribute(DownloadURLNode, "arch").Trim(),
                    URL  = XmlParser.GetStringValue(DownloadURLNode).Trim()
                };
                productSettings.DownloadURLs.Add(downloadURL);
            }

            bool runWithBitsDefault = XmlParser.GetBoolValue(xmlDoc.SelectSingleNode("//Config"), ConfigConsts.RUN_WITH_BITS, true);

            foreach (XmlNode productLogicNode in productStaticData.SelectNodes("Logic"))
            {
                productSettings.Behavior       = XmlParser.GetStringValue(productLogicNode, "Behavior");
                productSettings.RunWithBits    = XmlParser.GetBoolValue(productLogicNode, "RunWithBits", runWithBitsDefault);
                productSettings.DownloadMethod = XmlParser.GetStringValue(productLogicNode, "DownloadMethod");
                if (String.IsNullOrEmpty(productSettings.DownloadMethod))
                {
                    productSettings.DownloadMethod = GetConfigValue("DOWNLOAD_METHOD");
                }
                productSettings.SecondaryDownloadMethod = XmlParser.GetStringValue(productLogicNode, "SecondaryDownloadMethod");
                if (String.IsNullOrEmpty(productSettings.SecondaryDownloadMethod))
                {
                    productSettings.SecondaryDownloadMethod = GetConfigValue("SECONDARY_DOWNLOAD_METHOD");
                }
                productSettings.MsiTimeoutMS  = XmlParser.GetIntValue(productLogicNode, "MsiTimeoutMs");
                productSettings.ProductEvents = new List <ProductSettings.ProductEvent>();
                foreach (XmlNode EventNode in productLogicNode.SelectNodes("Events/Event"))
                {
                    ProductSettings.ProductEvent productEvent = new ProductSettings.ProductEvent
                    {
                        Type   = XmlParser.GetStringValue(EventNode),
                        Triger = XmlParser.GetStringAttribute(EventNode, "reportOn")
                    };
                    productSettings.ProductEvents.Add(productEvent);
                }
            }

            productSettings.RunParams = "";
            foreach (XmlNode runParamsNode in productStaticData.SelectNodes("RunParams/RunParam"))
            {
                string RunParam = XmlParser.GetStringValue(runParamsNode).Trim();

                productSettings.RunParams += (string.IsNullOrEmpty(productSettings.RunParams) ? RunParam : " " + RunParam);
            }
            productSettings.PreInstall      = ExtractProductRequirementsRoot(productStaticData.SelectNodes("PreInstall/Requirements"));
            productSettings.PostInstall     = ExtractProductRequirementsRoot(productStaticData.SelectNodes("PostInstall/Requirements"));
            productSettings.AnalyticsParams = ExtractProductAnalyticsParams(productStaticData.SelectNodes("AnalyticsParams/Param"));
            productSettings.LayoutName      = XmlParser.GetStringValue(productStaticData, "Layout");

            ControlsLayout defLocaleControlsLayout = null;
            productSettings.ControlsLayouts = null;

            XmlNodeList Locales = productSettingsNode.SelectNodes("Locales/Locale");
            if (Locales.Count > 0)
            {
                foreach (XmlNode localeNode in Locales)
                {
                    if (XmlParser.GetBoolAttribute(localeNode, "default"))
                    {
                        defLocaleControlsLayout = new ControlsLayout(new XmlNodeList[] { localeNode.SelectNodes("Texts/Text"), localeNode.SelectNodes("Images/Image"), localeNode.SelectNodes("UILayouts") }, formDesign.DefaultControlDesign);
                    }
                    string localeLanguage = XmlParser.GetStringAttribute(localeNode, "name");
                    if (localeLanguage == LocaleCode)
                    {
                        productSettings.ControlsLayouts = new ControlsLayout(new XmlNodeList[] { localeNode.SelectNodes("Texts/Text"), localeNode.SelectNodes("Images/Image"), localeNode.SelectNodes("UILayouts") }, formDesign.DefaultControlDesign);
                    }
                }

                if (productSettings.ControlsLayouts == null)
                {
                    productSettings.ControlsLayouts = defLocaleControlsLayout;
                }

#if DEBUG
                if (productSettings.ControlsLayouts == null)
                {
                    Logger.GetLogger().Error("Missing locale for product: " + productSettings.Name + " language code: " + LocaleCode);
                }
#endif
            }

            return(productSettings);
        }