private Structure ReadStructure() { var result = new Structure(); var palmDB = PalmDBEngine.Read(this._stream) ?? throw new InvalidDataException("file can not open."); result.PalmDB = palmDB; if (palmDB.RecordInfoList.Any()) { long firstRecordOffset = palmDB.RecordInfoList.First().Offset; result.PalmDOCHeader = PalmDOCHeaderEngine.Read(this._stream, firstRecordOffset) ?? throw new InvalidDataException("invalid file! missing part:PalmDOC Header."); if (MobiHeaderEngine.TryRead(this._stream, this._stream.Position, out MobiHeader mobiHeader)) { result.MobiHeader = mobiHeader; } else { throw new InvalidDataException("invalid file! missing part:MOBI Header."); } if (ExthHeaderEngine.TryRead(this._stream, this._stream.Position, out ExthHeader exthHeader)) { result.ExthHeader = exthHeader; } if (mobiHeader.FullNameLength > 0) { long fullNameOffset = firstRecordOffset + mobiHeader.FullNameOffset; this._stream.Seek(fullNameOffset, SeekOrigin.Begin); if (this._stream.TryReadString((int)mobiHeader.FullNameLength, out string fullName)) { result.FullName = fullName; } } if (mobiHeader.INDXRecordOffset != MobiHeaderEngine.UnavailableIndex && mobiHeader.INDXRecordOffset < palmDB.RecordInfoList.Count && IndxHeaderEngine.TryRead(this._stream, palmDB.RecordInfoList[(int)mobiHeader.INDXRecordOffset].Offset, out IndxHeader indxHeader)) { result.IndxHeader = indxHeader; } if (mobiHeader.FLISRecordOffset != MobiHeaderEngine.UnavailableIndex && mobiHeader.FLISRecordOffset < palmDB.RecordInfoList.Count && RecordEngine.TryReadFlisRecord(this._stream, palmDB.RecordInfoList[(int)mobiHeader.FLISRecordOffset].Offset, out FlisRecord flisRecord)) { result.FlisRecord = flisRecord; } if (mobiHeader.FCISRecordOffset != MobiHeaderEngine.UnavailableIndex && mobiHeader.FCISRecordOffset < palmDB.RecordInfoList.Count && RecordEngine.TryReadFcisRecord(this._stream, palmDB.RecordInfoList[(int)mobiHeader.FCISRecordOffset].Offset, out FcisRecord fcisRecord)) { result.FcisRecord = fcisRecord; } } return(result); }
public MainWindowViewModel() { MacroTabs = new ObservableCollection <MacroViewModel> { new MacroViewModel("macro0") }; _recordEngine = new RecordEngine(); _recordEngine.RecordStatus += _recordEngine_RecordStatus; _recordEngine.RecordedEvent += _recordEngine_RecordedEvent; }