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(); }
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); }