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