Пример #1
0
        public void Merge(PrinterSettingsLayer destinationLayer, PrinterSettings settingsToImport, List <PrinterSettingsLayer> rawSourceFilter, bool setLayerName)
        {
            HashSet <string> skipKeys = new HashSet <string>
            {
                "layer_id",
            };

            if (!setLayerName)
            {
                skipKeys.Add(SettingsKey.layer_name);
            }

            var destinationFilter = new List <PrinterSettingsLayer>
            {
                OemLayer,
                BaseLayer,
                destinationLayer,
            }.Where(layer => layer != null);

            var sourceFilter = rawSourceFilter.Where(layer => layer != null);

            foreach (var keyName in PrinterSettings.KnownSettings)
            {
                if (settingsToImport.Contains(keyName))
                {
                    // Compare the value to import to the layer cascade value and only set if different
                    string currentValue = this.GetValue(keyName, destinationFilter).Trim();
                    string importValue  = settingsToImport.GetValue(keyName, sourceFilter).Trim();

                    if (!string.IsNullOrEmpty(importValue) &&
                        currentValue != keyName &&
                        !skipKeys.Contains(keyName))
                    {
                        destinationLayer[keyName] = importValue;
                    }
                }
            }

            if (setLayerName)
            {
                destinationLayer[SettingsKey.layer_name] = settingsToImport.GetValue(SettingsKey.layer_name, sourceFilter);
            }

            this.Save();

            ApplicationController.Instance.ReloadAdvancedControlsPanel();
        }
Пример #2
0
        internal static bool ImportFromExisting(string settingsFilePath)
        {
            if (string.IsNullOrEmpty(settingsFilePath) || !File.Exists(settingsFilePath))
            {
                return(false);
            }

            string fileName             = Path.GetFileNameWithoutExtension(settingsFilePath);
            var    existingPrinterNames = Instance.ActiveProfiles.Select(p => p.Name);

            var printerInfo = new PrinterInfo
            {
                Name  = agg_basics.GetNonCollidingName(existingPrinterNames, fileName),
                ID    = Guid.NewGuid().ToString(),
                Make  = "Other",
                Model = "Other",
            };

            bool importSuccessful = false;

            string importType = Path.GetExtension(settingsFilePath).ToLower();

            switch (importType)
            {
            case ProfileManager.ProfileExtension:
                // Add the Settings as a profile before performing any actions on it to ensure file paths resolve
            {
                Instance.Profiles.Add(printerInfo);

                var printerSettings = PrinterSettings.LoadFile(settingsFilePath);
                printerSettings.ID = printerInfo.ID;
                printerSettings.ClearValue(SettingsKey.device_token);
                printerInfo.DeviceToken = "";

                // TODO: Resolve name conflicts
                printerSettings.Helpers.SetName(printerInfo.Name);

                if (printerSettings.OemLayer.ContainsKey(SettingsKey.make))
                {
                    printerInfo.Make = printerSettings.OemLayer[SettingsKey.make];
                }

                if (printerSettings.OemLayer.ContainsKey(SettingsKey.model))
                {
                    printerInfo.Model = printerSettings.OemLayer[SettingsKey.model] ?? "Other";
                }

                printerSettings.Save();
                importSuccessful = true;
            }
            break;

            case ".ini":
                //Scope variables
            {
                var settingsToImport = PrinterSettingsLayer.LoadFromIni(settingsFilePath);
                var printerSettings  = new PrinterSettings()
                {
                    ID = printerInfo.ID,
                };

                bool containsValidSetting = false;

                printerSettings.OemLayer = new PrinterSettingsLayer();

                printerSettings.OemLayer[SettingsKey.make]  = "Other";
                printerSettings.OemLayer[SettingsKey.model] = "Other";

                foreach (var item in settingsToImport)
                {
                    if (printerSettings.Contains(item.Key))
                    {
                        containsValidSetting = true;
                        string currentValue = printerSettings.GetValue(item.Key).Trim();
                        // Compare the value to import to the layer cascade value and only set if different
                        if (currentValue != item.Value)
                        {
                            printerSettings.OemLayer[item.Key] = item.Value;
                        }
                    }
                }

                if (containsValidSetting)
                {
                    printerSettings.UserLayer[SettingsKey.printer_name] = printerInfo.Name;

                    printerSettings.ClearValue(SettingsKey.device_token);
                    printerInfo.DeviceToken = "";

                    printerInfo.Make  = printerSettings.OemLayer[SettingsKey.make] ?? "Other";
                    printerInfo.Model = printerSettings.OemLayer[SettingsKey.model] ?? "Other";

                    Instance.Profiles.Add(printerInfo);

                    printerSettings.Helpers.SetName(printerInfo.Name);

                    printerSettings.Save();
                    importSuccessful = true;
                }
            }
            break;
            }
            return(importSuccessful);
        }