public void ReadFileNodeHeader(ref FileNodeHeader fileNodeHeader) { if (!Unsafe.ReadStruct(binaryReader, ref fileNodeHeader)) { throw new FileFormatException("Cannot read header of FileNode"); } }
public ObjectGroupListReferenceFND ReadObjectGroupListReferenceFND(FileNodeHeader header) { var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "ObjectSpaceManifestListReferenceFND.ref"); var objectGroupID = new ExtendedGuid(); oneNoteFileReader.ReadExtendedGuid(ref objectGroupID, "ObjectSpaceManifestListReferenceFND.objectGroupID"); return(new ObjectGroupListReferenceFND(header, fileChunkReference, objectGroupID)); }
public ObjectDeclaration2RefCountFND ReadObjectDeclaration2RefCountFND(FileNodeHeader header) { var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "ObjectDeclaration2RefCountFND.BlobRef"); var body = new ObjectDeclaration2Body(); oneNoteFileReader.ReadObjectDeclaration2Body(ref body); var cRef = oneNoteFileReader.ReadByte(); return(new ObjectDeclaration2RefCountFND(header, fileChunkReference, body, cRef)); }
public FNDBase ReadFileNodeData(FileNodeHeader header) { switch (header.FileNodeID) { case FileNodeIDs.ObjectSpaceManifestListReferenceFND: return(ReadObjectSpaceManifestListReferenceFND(header)); case FileNodeIDs.RevisionManifestListReferenceFND: return(ReadRevisionManifestListReferenceFND(header)); case FileNodeIDs.ObjectGroupListReferenceFND: return(ReadObjectGroupListReferenceFND(header)); case FileNodeIDs.ObjectDeclaration2RefCountFND: return(ReadObjectDeclaration2RefCountFND(header)); default: return(null); } }
public RevisionManifestListReferenceFND ReadRevisionManifestListReferenceFND(FileNodeHeader header) { var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "RevisionManifestListReferenceFND.ref"); return(new RevisionManifestListReferenceFND(header, fileChunkReference)); }
public ObjectSpaceManifestListReferenceFND ReadObjectSpaceManifestListReferenceFND(FileNodeHeader header) { var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "ObjectSpaceManifestListReferenceFND.ref"); var gosid = new ExtendedGuid(); oneNoteFileReader.ReadExtendedGuid(ref gosid, "ObjectSpaceManifestListReferenceFND.gosid"); return(new ObjectSpaceManifestListReferenceFND(header, fileChunkReference, gosid)); }
public void ReadFileNodeListFragment(IFileChunkReference fileChunkReference, ICollection <FNDBase> result, ref FileChunkReference64x32 nextFragment, Dictionary <uint, uint> transactionsData, params uint[] fileNodeIds) { oneNoteFileReader.Move(fileChunkReference.Offset, "FileNodeListFragment"); var jumpSizeToNextFragmentReference = GetJumpSizeToNextFragmentReference(fileChunkReference.DataSize); var fileNodeListHeader = new FileNodeListHeader(); oneNoteFileReader.ReadFileNodeListHeader(ref fileNodeListHeader); jumpSizeToNextFragmentReference -= FileNodeListHeader.SizeInBytes; var fileNodeListId = fileNodeListHeader.FileNodeListID; var nodesCount = transactionsData[fileNodeListId]; var fileNodeHeader = new FileNodeHeader(); while (true) { if (nodesCount == 0) { break; } oneNoteFileReader.ReadFileNodeHeader(ref fileNodeHeader); jumpSizeToNextFragmentReference -= FileNodeHeader.SizeInBytes; var fileNodeId = fileNodeHeader.FileNodeID; if (fileNodeId == FileNodeIDs.ChunkTerminatorFND) { break; } var sizeOfData = fileNodeHeader.Size - FileNodeHeader.SizeInBytes; var skip = true; if (fileNodeIds.Length == 0 || Array.IndexOf(fileNodeIds, fileNodeId) >= 0) { var readFileNodeData = ReadFileNodeData(fileNodeHeader); if (readFileNodeData == null) { readFileNodeData = new NotImplementedFND(fileNodeHeader); } else { skip = false; } result.Add(readFileNodeData); jumpSizeToNextFragmentReference -= sizeOfData; } if (skip && sizeOfData != 0) { oneNoteFileReader.Skip(sizeOfData); jumpSizeToNextFragmentReference -= sizeOfData; } nodesCount--; const uint minJumpSize = 4; if (jumpSizeToNextFragmentReference < minJumpSize) { break; } } if (jumpSizeToNextFragmentReference != 0) { oneNoteFileReader.Skip(jumpSizeToNextFragmentReference); } oneNoteFileReader.ReadFileChunkReference64x32(ref nextFragment, "FileNodeListFragment.nextFragment"); oneNoteFileReader.ExpectFileNodeListFooter(); transactionsData[fileNodeListId] = nodesCount; }