private void MigrateData(XNode source, XNode dest, PresetParserMetadata preset) { var dataNode = $"/package/archives/archive[@client_id='{PresetSectionName}-preset']/section[@id='ParameterValues']/entry"; var nodes = source.XPathSelectElements(dataNode); var dataNode2 = $"/package/archives/archive[@client_id='{PresetSectionName}-state']/section[@id='Slot0']"; var insertNode = dest.XPathSelectElement(dataNode2); insertNode.Elements().Remove(); insertNode.Add(nodes); var presetNameNode = new XElement("entry"); presetNameNode.SetAttributeValue("id", "Preset name"); presetNameNode.SetAttributeValue("type", "string"); var bank = RootBank.CreateRecursive(preset.BankPath); presetNameNode.SetAttributeValue("value", bank.BankName + "/" + preset.PresetName); insertNode.Add(presetNameNode); }
protected async Task <int> H2PScanBanks(string dataDirectoryName, string productName, bool userPresets, bool persist) { Logger.Debug( $"Begin H2PScanBanks with dataDirectoryName {dataDirectoryName} product name {productName} and userPresets {userPresets}"); var rootDirectory = GetPresetDirectory(dataDirectoryName, productName, userPresets); Logger.Debug($"Parsing PresetDirectory {rootDirectory}"); var directoryInfo = new DirectoryInfo(rootDirectory); if (!directoryInfo.Exists) { Logger.Debug($"Directory {rootDirectory} does not exist"); return(0); } var bankName = BankNameFactory; if (userPresets) { bankName = BankNameUser; } var bank = RootBank.CreateRecursive(bankName); var count = await H2PScanBank(bank, directoryInfo, persist); Logger.Debug("End H2PScanBanks"); return(count); }
public override async Task DoScan() { await ProcessPresetDirectory(GetUserBankPath(UserBankPath), RootBank.CreateRecursive(BankNameUser)); await ProcessD16PkgArchive(GetFactoryBankPath(FactoryBankPath), RootBank.CreateRecursive(BankNameFactory)); await base.DoScan(); }
public override int GetNumPresets() { var count = 0; count += ProcessPresetDirectory(GetUserBankPath(UserBankPath), RootBank.CreateRecursive(BankNameUser), false).GetAwaiter().GetResult(); count += ProcessD16PkgArchive(GetFactoryBankPath(FactoryBankPath), RootBank.CreateRecursive(BankNameFactory), false).GetAwaiter().GetResult(); return(base.GetNumPresets() + count); }
protected override List <(string directory, PresetBank presetBank)> GetParseDirectories() { var dirs = new List <(string directory, PresetBank presetBank)>(); foreach (var dir in Directory.EnumerateDirectories(GetExpansionsDirectory())) { var presetDirectory = Path.Combine(dir, "Presets"); if (Directory.Exists(presetDirectory)) { var bank = RootBank.CreateRecursive(Path.GetFileName(dir)); dirs.Add((presetDirectory, bank)); } } return(dirs); }
private async Task ParseAdditionalBanks() { await PluginInstance.LoadPlugin(); DeterminateVstPresetSaveMode(); foreach (var bank in AdditionalBankFiles) { var result = LoadFxp(bank.Path); if (result == VstUtils.LoadFxpResult.Error) { continue; } var presetBank = RootBank.CreateRecursive(bank.BankName); // ReSharper disable once SwitchStatementMissingSomeCases switch (result) { case VstUtils.LoadFxpResult.Program: await GetPresets(presetBank, 0, 1, bank.Path); break; case VstUtils.LoadFxpResult.Bank: { var ranges = bank.GetProgramRanges(); if (ranges.Count == 0) { await GetPresets(presetBank, 0, PluginInstance.Plugin.PluginInfo.ProgramCount, bank.Path); } else { foreach (var(start, length) in ranges) { await GetPresets(presetBank, start - 1, length, bank.Path); } } break; } } } }
protected override List <(string directory, PresetBank presetBank)> GetParseDirectories() { var dirs = new List <(string directory, PresetBank presetBank)>(); var settingsFile = GetSettingsFile(); if (!File.Exists(settingsFile)) { return(new List <(string directory, PresetBank presetBank)>()); } var settingsXml = XDocument.Load(settingsFile); var banksElement = settingsXml.Element("FogConvolver_GENERAL_SETTINGS").Element("BANKS"); var pathsAttribute = banksElement.Attribute("Paths"); if (pathsAttribute == null) { Logger.Error($"The settings file {settingsFile} does not contain bank paths."); return(dirs); } var paths = pathsAttribute.Value.Split('|'); foreach (var path in paths) { if (!Directory.Exists(path)) { continue; } var bankName = path.Split('\\').Last(); var factoryBank = RootBank.CreateRecursive(bankName); dirs.Add((path, factoryBank)); } return(dirs); }
public async Task <int> ScanPresetXmlFile(string filename, string rootTag, bool persist = true) { var fullFilename = Path.Combine(ParseDirectory, filename); if (!File.Exists(fullFilename)) { fullFilename = Path.Combine(FallbackParseDirectory, filename); } if (!File.Exists(fullFilename)) { Logger.Error( $"Error: Could not find {filename} in neither {ParseDirectory} nor {FallbackParseDirectory}"); return(0); } var rootDocument = XDocument.Parse(File.ReadAllText(fullFilename)); var rootElement = rootDocument.Element(rootTag); return(await ScanPresetXml(rootElement, fullFilename, RootBank.CreateRecursive("Factory"), persist)); }
public override int GetNumPresets() { return(base.GetNumPresets() + ProcessPresetDirectory(GetUserBankPath(UserBankPath), RootBank.CreateRecursive(BankNameUser), false).GetAwaiter().GetResult()); }
protected override PresetBank GetRootBank() { return(RootBank.CreateRecursive(BankNameFactory)); }
public override async Task DoScan() { InitDb(); var instruments = GetInstrumentNames(); var instrumentList = GetInstruments(instruments); var allPresets = GetPresets(instrumentList); var presetsByPacks = (from p in allPresets group p by p.Pack.name into g select new { Pack = g, Presets = g.ToList() }).ToList(); foreach (var pack in presetsByPacks) { var presetBank = RootBank.CreateRecursive(pack.Pack.Key); foreach (var presetData in pack.Presets) { var preset = new PresetParserMetadata { BankPath = presetBank.BankPath, PresetName = presetData.Preset.name, Author = presetData.SoundDesigner.name, Comment = presetData.Preset.comment, Plugin = PluginInstance.Plugin }; preset.Types.Add(new Type { TypeName = presetData.Type.name }); var characteristics = GetPresetCharacteristics(presetData.Preset); var characteristicsNames = (from c in characteristics select c.name).ToList(); foreach (var name in characteristicsNames) { preset.Characteristics.Add(new Characteristic { CharacteristicName = name }); } var fileName = presetData.Preset.file_path.Replace('/', '\\'); var content = File.ReadAllBytes(fileName); var ms = new MemoryStream(); ms.Write(LittleEndian.GetBytes(content.Length), 0, 4); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); ms.Write(LittleEndian.GetBytes(content.Length), 0, 4); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); ms.WriteByte(0); ms.Write(content, 0, content.Length); ms.Write(content, 0, content.Length); preset.SourceFile = fileName; await DataPersistence.PersistPreset(preset, ms.ToArray()); } } _db.Close(); _db = null; await base.DoScan(); }
protected override async Task GetFactoryPresets() { var factoryBank = RootBank.CreateRecursive(BankNameFactory); await GetPresets(factoryBank, 0, PluginInstance.Plugin.PluginInfo.ProgramCount, "Builtin"); }