コード例 #1
0
ファイル: D16Group.cs プロジェクト: terminar/PresetMagician
        protected async Task <int> ProcessPresetDirectory(string presetDirectory, PresetBank bank, bool persist = true)
        {
            var count = 0;

            if (!Directory.Exists(presetDirectory))
            {
                return(count);
            }

            Logger.Debug($"ProcessPresetDirectory {presetDirectory}");
            var dirInfo = new DirectoryInfo(presetDirectory);

            foreach (var file in dirInfo.EnumerateFiles("*" + Extension))
            {
                count++;

                if (persist)
                {
                    var presetData = File.ReadAllText(file.FullName);
                    var presetInfo = GetPreset(file.Name, presetData, bank);
                    presetInfo.preset.SourceFile = file.FullName;
                    await DataPersistence.PersistPreset(presetInfo.preset, presetInfo.presetData);
                }
            }

            foreach (var directory in dirInfo.EnumerateDirectories())
            {
                count += await ProcessPresetDirectory(directory.FullName, bank.CreateRecursive(directory.Name),
                                                      persist);
            }

            return(count);
        }
コード例 #2
0
        private async Task <int> H2PScanBank(PresetBank bank, DirectoryInfo directory, bool persist)
        {
            var count = 0;

            foreach (var file in directory.EnumerateFiles("*.h2p"))
            {
                count++;
                if (!persist)
                {
                    continue;
                }

                await ProcessPreset(file, bank);
            }

            foreach (var subDirectory in directory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly))
            {
                var subBank = bank.CreateRecursive(subDirectory.Name);
                count += await H2PScanBank(subBank, subDirectory, persist);
            }

            return(count);
        }
コード例 #3
0
        public async Task <int> ScanPresetXml(XElement rootElement, string fileName, PresetBank presetBank,
                                              bool persist = true)
        {
            var count       = 0;
            var directories = rootElement.Elements("Directory");

            foreach (var directory in directories)
            {
                var bankNameElement = directory.Attribute("Name");

                if (bankNameElement == null)
                {
                    bankNameElement = directory.Attribute("name");

                    if (bankNameElement == null)
                    {
                        Logger.Warning($"A directory within {fileName} contains no name attribute. Maybe the file is corrupt?");
                        continue;
                    }
                }

                var subBank = presetBank.CreateRecursive(bankNameElement.Value);
                count += await ScanPresetXml(directory, fileName, subBank, persist);
            }

            var presets = rootElement.Elements("preset");

            foreach (var presetElement in presets)
            {
                var nameAttribute = presetElement.Attribute("name");

                if (nameAttribute == null)
                {
                    nameAttribute = presetElement.Attribute("Name");

                    if (nameAttribute == null)
                    {
                        Logger.Error($"A preset in the file {fileName} has no name attribute. Ignoring the preset, " +
                                     "as PresetMagician does not know how to identify the name of the preset.");
                        continue;
                    }
                }

                count++;

                if (persist)
                {
                    var sourceFile = fileName + ":" + presetBank.BankPath + "/" + nameAttribute.Value;
                    var presetName = nameAttribute.Value;
                    if (SourceFileDuplicates.ContainsKey(sourceFile))
                    {
                        SourceFileDuplicates[sourceFile]++;
                        sourceFile += ":" + (SourceFileDuplicates[sourceFile] + 1);
                        presetName += "-1";
                        Logger.Warning(
                            $"The preset file {fileName} contains a duplicate preset name in {presetBank.BankPath}/" +
                            $"{nameAttribute.Value}. " + Environment.NewLine + Environment.NewLine +
                            "PresetMagician has no reliable way to check which preset is which " +
                            "(think of it as two files with exactly the same name in the same directory). " +
                            Environment.NewLine + Environment.NewLine +
                            $"PresetMagician will use {presetName} for it; however, it could happen that the preset " +
                            "data gets mixed up between these duplicate presets." +
                            Environment.NewLine + Environment.NewLine +
                            "To avoid this, please rename the duplicates to an unique name.");
                    }
                    else
                    {
                        SourceFileDuplicates.Add(sourceFile, 0);
                    }

                    var preset = new PresetParserMetadata
                    {
                        PresetName = presetName, Plugin = PluginInstance.Plugin,
                        BankPath   = presetBank.BankPath,
                        SourceFile = sourceFile
                    };

                    var base64 = presetElement.Value.Trim().Replace("-", "/").Replace("$", "");

                    await DataPersistence.PersistPreset(preset, Convert.FromBase64String(base64));
                }
            }

            return(count);
        }