public OmnisphereLibrary GetLibraryFilesystem(string libraryFile) { if (_omnisphereLibraryCache.ContainsKey(libraryFile)) { return(_omnisphereLibraryCache[libraryFile]); } var file = File.ReadAllText(libraryFile, Encoding.ASCII); var startFileSystemLocation = file.IndexOf(FILESYSTEM_START_TAG, StringComparison.OrdinalIgnoreCase); var endFileSystemLocation = file.IndexOf(FILESYSTEM_END_TAG, StringComparison.OrdinalIgnoreCase); if (startFileSystemLocation == -1) { Logger.Error("Unable to find the filesystem start tag."); return(null); } if (startFileSystemLocation == -1) { Logger.Error("Unable to find the filesystem end tag"); return(null); } var fileSystemString = XML_TAG + Environment.NewLine + file.Substring(startFileSystemLocation, endFileSystemLocation - startFileSystemLocation + FILESYSTEM_END_TAG.Length); var fileSystemDocument = XDocument.Parse(fileSystemString); var library = new OmnisphereLibrary(); library.Path = libraryFile; library.ContentOffset = endFileSystemLocation + FILESYSTEM_END_TAG.Length + 1; var rootElement = fileSystemDocument.Element(FILESYSTEM_TAG); var rootDirectory = new FileSystemDirectory(); ParseFileSystemDirectory(rootElement, rootDirectory, library.Files); if (!_omnisphereLibraryCache.ContainsKey(libraryFile)) { _omnisphereLibraryCache.Add(libraryFile, library); } return(library); }
public async Task DoLibraryScan(OmnisphereLibrary library) { library.BuildMetadata(); foreach (var multi in library.GetMultis()) { var presetData = library.GetFileContent(multi); var sourceFile = library.Path + "/" + multi.Directory.DirectoryPath + multi.Filename; var preset = new PresetParserMetadata { PresetName = multi.FilenameWithoutExtension, Plugin = PluginInstance.Plugin, BankPath = library.Name + "/" + multi.Directory.DirectoryPath, SourceFile = sourceFile }; ApplyMetadata(multi, preset); await DataPersistence.PersistPreset(preset, presetData); } foreach (var patch in library.GetPatches()) { var presetData = Encoding.ASCII.GetString(library.GetFileContent(patch)); var template = VendorResources.OmnispherePatchTemplate; presetData = presetData.Replace("<AmberPart >", ""); presetData = presetData.Replace("<AmberPart>", ""); presetData = presetData.Replace("</AmberPart>", ""); template = template.Replace("{{PATCHNAME}}", patch.FilenameWithoutExtension); template = template.Replace("{{LIBRARYNAME}}", library.Name); template = template.Replace("{{PATCHGOESHERE}}", presetData); var sourceFile = library.Path + "/" + patch.Directory.DirectoryPath + patch.Filename; var preset = new PresetParserMetadata { PresetName = patch.FilenameWithoutExtension, Plugin = PluginInstance.Plugin, BankPath = library.Name + "/" + patch.Directory.DirectoryPath, SourceFile = sourceFile }; ApplyMetadata(patch, preset); await DataPersistence.PersistPreset(preset, Encoding.ASCII.GetBytes(template + "\0")); } }