Example #1
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);
        }