private static List <BlockDataDTO> GetXBlockData(XBLOCK xblock, PSTFile pst) { var ret = new List <BlockDataDTO>(); foreach (var bid in xblock.BIDEntries) { var bbtEntry = pst.GetBlockBBTEntry(bid); ret.AddRange(BlockBO.GetBBTEntryData(bbtEntry, pst)); } return(ret); }
public static NodeDataDTO GetNodeData(Tuple <ulong, ulong> nodeBIDs, PSTFile pst) { var mainData = BlockBO.GetBBTEntryData(pst.GetBlockBBTEntry(nodeBIDs.Item1), pst); var subNodeData = new Dictionary <ulong, NodeDataDTO>(); if (nodeBIDs.Item2 != 0) { subNodeData = BlockBO.GetSubNodeData(pst.GetBlockBBTEntry(nodeBIDs.Item2), pst); } return(new NodeDataDTO { NodeData = mainData, SubNodeData = subNodeData }); }
public static NodeDataDTO GetNodeData(NBTENTRY entry, PSTFile pst) { var mainData = BlockBO.GetBBTEntryData(pst.GetBlockBBTEntry(entry.BID_Data), pst); if (entry.BID_SUB != 0) { var subnodeData = BlockBO.GetSubNodeData(pst.GetBlockBBTEntry(entry.BID_SUB), pst); return(new NodeDataDTO { NodeData = mainData, SubNodeData = subnodeData }); } return(new NodeDataDTO { NodeData = mainData, SubNodeData = null }); }
private static List <BlockDataDTO> GetXXBlockData(XXBLOCK xxblock, PSTFile pst) { var ret = new List <BlockDataDTO>(); foreach (var bid in xxblock.XBlockBIDs) { var bbtEntry = pst.GetBlockBBTEntry(bid); var curXblockData = BlockBO.GetBBTEntryData(bbtEntry, pst); //var curXblockData = BlockBO.GetXBlockData(curXblock); foreach (var block in curXblockData) { ret.Add(block); } } return(ret); }
public static NodeDataDTO GetNodeData(SLENTRY entry, PSTFile pst) { var mainData = BlockBO.GetBBTEntryData(pst.GetBlockBBTEntry(entry.SubNodeBID), pst); if (entry.SubSubNodeBID != 0) { var subNodeData = BlockBO.GetSubNodeData(pst.GetBlockBBTEntry(entry.SubSubNodeBID), pst); return(new NodeDataDTO { NodeData = mainData, SubNodeData = subNodeData }); } return(new NodeDataDTO { NodeData = mainData, SubNodeData = null }); }
private static Dictionary <ulong, NodeDataDTO> GetSIBlockData(SIBLOCK siblock, PSTFile pst) { var ret = new Dictionary <ulong, NodeDataDTO>(); foreach (var entry in siblock.Entries) { var curSLBlockBBT = pst.GetBlockBBTEntry(entry.SLBlockBID); var slblock = new SLBLOCK(pst.Header.isUnicode, BlockBO.GetBBTEntryData(curSLBlockBBT, pst)[0]); var data = BlockBO.GetSLBlockData(slblock, pst); foreach (var item in data) { ret.Add(item.Key, item.Value); } } return(ret); }
//gets all the data for an SL block. an SL block points directly to all the immediate subnodes private static Dictionary <ulong, NodeDataDTO> GetSLBlockData(SLBLOCK slblock, PSTFile pst) { var ret = new Dictionary <ulong, NodeDataDTO>(); foreach (var entry in slblock.Entries) { //this data should represent the main data part of the subnode var data = BlockBO.GetBBTEntryData(pst.GetBlockBBTEntry(entry.SubNodeBID), pst); var cur = new NodeDataDTO { NodeData = data }; ret.Add(entry.SubNodeNID, cur); //see if there are sub nodes of this current sub node if (entry.SubSubNodeBID != 0) { //if there are subnodes, treat them like any other subnode cur.SubNodeData = GetSubNodeData(pst.GetBlockBBTEntry(entry.SubSubNodeBID), pst); } } return(ret); }
private static Dictionary <ulong, NodeDataDTO> GetSubNodeData(BBTENTRY entry, PSTFile pst) { var allData = BlockBO.GetBBTEntryData(entry, pst); var dataBlock = allData[0]; if (entry.Internal) { var type = dataBlock.Data[0]; var cLevel = dataBlock.Data[1]; if (cLevel == 0) //SLBlock, no intermediate { return(BlockBO.GetSLBlockData(new SLBLOCK(pst.Header.isUnicode, dataBlock), pst)); } else //SIBlock { return(BlockBO.GetSIBlockData(new SIBLOCK(pst.Header.isUnicode, dataBlock), pst)); } } else { throw new Exception("Whoops"); } }