Exemplo n.º 1
0
        public static IRPacket LoadSignal(string fileName, string deviceName, string signalName, out string message)
        {
            /*
             * xml-файл может быть одной из четырех вещей:
             *               * 1. IRPacket (скорее всего, поскольку предыдущие версии только понимали этот формат)
             *               * 2. AVDeviceDB (требуется устройство и параметры сигнала)
             *               * 3. AVDevice (требуется опция сигнала)
             *               * 4. Некоторые другие XML-формат
             */
            var result = GenericXmlSerializer <IRPacket> .FromFile(fileName);

            if (result.Successful)
            {
                message = string.Empty;
                return(result.Object);
            }
            else
            {
                var haveDeviceName = !string.IsNullOrEmpty(deviceName);
                var haveSignalName = !string.IsNullOrEmpty(signalName);

                if (result.EncounteredType == "AVDeviceDB")
                {
                    if (haveDeviceName && haveSignalName)
                    {
                        var db = GenericXmlSerializer <AVDeviceDB> .FromFile(fileName).Object;

                        var device = db.AVDevices.FirstOrDefault(d => string.Equals(d.Name, deviceName, StringComparison.InvariantCultureIgnoreCase));
                        if (device != null)
                        {
                            var signal = device.GetSignal(signalName);
                            message = signal == null ? "Couldn't find signal " + signalName : string.Empty;
                            return(signal);
                        }
                        else
                        {
                            message = "Couldn't find device " + deviceName;
                        }
                    }
                    else
                    {
                        message = "Вложенный XML-файл содержит набор устройств и сигналов. Вы должны указать параметры -device и -signal для идентификации используемого сигнала";
                    }
                }
                else if (result.EncounteredType == "AVDevice")
                {
                    if (haveSignalName)
                    {
                        var device = GenericXmlSerializer <AVDevice> .FromFile(fileName).Object;

                        var signal = device.GetSignal(signalName);
                        message = signal == null ? "Couldn't find signal " + signalName : string.Empty;
                        return(signal);
                    }
                    else
                    {
                        message = "Вложенный файл xml содержит набор сигналов. Вы должны указать параметр -signal для определения используемого сигнала";
                    }
                }
                else
                {
                    message = string.Format("Не удалось загрузить " + fileName + ". Файлы xml должны содержать AVDeviceDB, AVDevice или IRPacket. Найдено " + result.EncounteredType);
                }
            }

            return(null);
        }