/// <summary> /// 读取1个记录 /// </summary> /// <param name="_modeType">项目模式的类型</param> /// <param name="_recordId">Record的编号(通过Record的编号,来读取记录)</param> public void LoadRecord(ModeType _modeType, long _recordId) { try { //判断项目的模式 switch (_modeType) { //如果项目是[默认模式]:所有的Record,都在/Record/Records.json文件中 case ModeType.Default: LoadRecords(_modeType); break; //如果项目是[协同合作模式]:每一个Record,分别在/Record/Record - 20200119080230555.json文件中 case ModeType.Collaboration: //Record文件的路径(文件夹+文件名+后缀) string _recordFilePath = RecordFolderPath + "/Record - " + _recordId + AppManager.Systems.ProjectSystem.OtherFileSuffix; //FileInfo类 用于读取文件信息 FileInfo _recordFileInfo = new FileInfo(_recordFilePath); /* 判断文件是否存在 */ if (_recordFileInfo.Exists == true) //如果存在 { //读取[Record]的Json文本中的内容 string _recordJsonText = File.ReadAllText(_recordFilePath); //然后把Json文本解析成RecordBaseData对象 RecordBaseData _recordBaseData = null; try { _recordBaseData = JsonMapper.ToObject <RecordBaseData>(_recordJsonText); } catch (Exception e) { } //把BugBaseData对象,转化为BugData对象 RecordData _recordData = RecordBaseData.BaseDataToData(_recordBaseData); //如果RecordData的完整度为true if (RecordData.VerifyIntegrity(_recordData) == true) { //把[RecordData对象]赋值到[列表]中 RecordData _oldRecordData = GetRecordData(_recordData.Id); //通过BugId获取到旧的Record对象 if (_oldRecordData != null) //如果有旧的Record对象 { //如果旧的Record和新的Record有不同的地方 if (RecordData.Compare(CompareType.All, _recordData, _oldRecordData) == false) { //修改旧的Record对象的值 _oldRecordData.BugId = _recordData.BugId; _oldRecordData.ReplyId = _recordData.ReplyId; _oldRecordData.Content = _recordData.Content; _oldRecordData.Time = _recordData.Time; _oldRecordData.IsDelete = _recordData.IsDelete; _oldRecordData.Images = _recordData.Images; } } else { RecordDatas.Add(_recordData); //把读取到的Record对象,添加到列表中 } } } break; } } catch (Exception e) { //输出错误 AppManager.Uis.ErrorUi.UiControl.TipContent = e.ToString(); AppManager.Uis.ErrorUi.OpenOrClose(true); } }
/// <summary> /// 同步[Record] /// (当有[Record]文件更改时,2秒后,把已经修改的文件,进行同步) /// </summary> /// <param name="_syncRecordIds">需要同步的所有Record编号</param> /// <param name="_changeTypes">改变的类型(key:Record的编号;value:改变的类型)</param> /// <param name="_logs">同步的日志</param> private void SyncRecord(List <long> _syncRecordIds, out Dictionary <long, ChangeType> _changeTypes, out List <string> _logs) { //out _logs = new List <string>(); //所有的日志 _changeTypes = new Dictionary <long, ChangeType>(); //改变的类型 //遍历所有需要同步的Record for (int i = 0; i < _syncRecordIds.Count; i++) { //Record的编号 long _recordId = _syncRecordIds[i]; /* 取到当前的数据 */ //取到当前Record的数据 RecordData _oldRecordData = RecordData.Copy(AppManager.Systems.RecordSystem.GetRecordData(_recordId)); /* 读取Record数据 */ //Record文件的路径(文件夹+文件名+后缀) string _recordFilePath = AppManager.Systems.ProjectSystem.RecordFolderPath + "/Record - " + _recordId + AppManager.Systems.ProjectSystem.OtherFileSuffix; string _recordJsonText; RecordBaseData _recordBaseData = null; RecordData _newRecordData = null; try { //读取[Record]的Json文本中的内容 _recordJsonText = File.ReadAllText(_recordFilePath); //然后把Json文本解析成RecordBaseData对象 _recordBaseData = JsonMapper.ToObject <RecordBaseData>(_recordJsonText); //把RecordBaseData对象,转化为RecordData对象(取到新的Record数据) _newRecordData = RecordBaseData.BaseDataToData(_recordBaseData); } catch (Exception e) { } /* 对比2个Record的修改 */ //如果是添加一个Record,或者是修改一个Record,或者是IsDelete为true的删除Record if ((_oldRecordData != null && _newRecordData != null) || (_oldRecordData == null && _newRecordData != null)) { //如果新的Record是完整的 if (RecordData.VerifyIntegrity(_newRecordData)) { //如果旧的Record和新的Record有区别 if (RecordData.Compare(CompareType.All, _oldRecordData, _newRecordData) == false) { //读取这个Record文件 AppManager.Systems.RecordSystem.LoadRecord(ModeType, _recordId); //获取Record的更改 ChangeType _changeType = CompareOldRecordAndNewRecord(_oldRecordData, _newRecordData); //获取Log string _log = GenerateRecordSyncLogText(_oldRecordData, _newRecordData, _changeType); //把改变的类型加入到字典中 _changeTypes.Add(_recordId, _changeType); //把_log加入到_logs中 if (_log != null && _log != "") { _logs.Add(_log); } } } } //如果是直接删除文件的删除Record else if (_oldRecordData != null && _newRecordData == null) { //判断Record文件是否存在 FileInfo _recordFileInfo = new FileInfo(_recordFilePath); //如果Record文件已被删除 if (_recordFileInfo.Exists == false) { //标记为已删除 AppManager.Systems.RecordSystem.GetRecordData(_recordId).IsDelete = true; //获取Record的更改 ChangeType _changeType = CompareOldRecordAndNewRecord(_oldRecordData, _newRecordData); //获取Log string _log = GenerateRecordSyncLogText(_oldRecordData, _newRecordData, _changeType); //把改变的类型加入到字典中 _changeTypes.Add(_recordId, _changeType); //把_log加入到_logs中 if (_log != null && _log != "") { _logs.Add(_log); } } } } }