コード例 #1
0
        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);
        }
コード例 #2
0
        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"));
            }
        }