/// <summary> /// 读取所有的Bug /// </summary> /// <param name="_modeType">项目模式的类型</param> public void LoadBugs(ModeType _modeType) { /* 读取 */ try { //判断项目的模式 switch (_modeType) { //如果项目是[默认模式]:所有的Bug,都在/Bug/Bugs.json文件中 case ModeType.Default: //Bug文件的路径(文件夹+文件名+后缀) string _bugsFilePath = BugFolderPath + "/Bugs" + AppManager.Systems.ProjectSystem.OtherFileSuffix; //FileInfo类 用于读取文件信息 FileInfo _fileInfo = new FileInfo(_bugsFilePath); /* 判断文件是否存在 */ if (_fileInfo.Exists == true) //如果存在 { //读取[Bug]的Json文本中的内容 string _bugsJsonText = File.ReadAllText(_bugsFilePath); //然后把Json文本解析成BugBaseData对象 List <BugBaseData> _bugBaseDatas = JsonMapper.ToObject <List <BugBaseData> >(_bugsJsonText); //创建BugData对象的集合 ObservableCollection <BugData> _bugs = new ObservableCollection <BugData>(); //把BugBaseData对象,转化为BugData对象 if (_bugBaseDatas != null) { for (int i = 0; i < _bugBaseDatas.Count; i++) { BugData _bug = BugBaseData.BaseDataToData(_bugBaseDatas[i]); if (_bug != null) { _bugs.Add(_bug); } } } //把BugData对象赋值 BugDatas = _bugs; } break; //如果项目是[协同合作模式]:每一个Bug,分别在/Bug/Bug - 20200119080230555.json文件中 case ModeType.Collaboration: //取到Bug文件夹 的信息 DirectoryInfo _bugDirectoryInfo = new DirectoryInfo(BugFolderPath); //如果文件夹存在 if (_bugDirectoryInfo.Exists == true) { //获取到Bug文件夹内所有的文件 的信息 FileInfo[] _bugFileInfos = _bugDirectoryInfo.GetFiles(); //遍历所有的Bug文件 for (int i = 0; i < _bugFileInfos.Length; i++) { //取到Bug文件的名字 string _bugFileName = Path.GetFileNameWithoutExtension(_bugFileInfos[i].FullName); //把[Bug文件的名字]转换为[BugId] _bugFileName = _bugFileName.Replace("Bug - ", ""); long _bugId = -1; bool _isParseOk = long.TryParse(_bugFileName, out _bugId); //把string转换为long //如果转换成功 if (_isParseOk == true) { //就读取这个Bug LoadBug(ModeType.Collaboration, _bugId); } } } break; } } catch (Exception e) { //输出错误 AppManager.Uis.ErrorUi.UiControl.TipContent = e.ToString(); AppManager.Uis.ErrorUi.OpenOrClose(true); } }
/// <summary> /// 读取一个Bug /// </summary> /// <param name="_modeType">项目模式的类型</param> /// <param name="_bugFilePath">要读取的Bug的编号</param> public void LoadBug(ModeType _modeType, long _bugId) { /* 读取 */ try { //判断项目的模式 switch (_modeType) { //如果项目是[默认模式]:所有的Bug,都在/Bug/Bugs.json文件中 case ModeType.Default: LoadBugs(ModeType.Default); break; //如果项目是[协同合作模式]:每一个Bug,分别在/Bug/Bug - 20200119080230555.json文件中 case ModeType.Collaboration: //Bug文件的路径(文件夹+文件名+后缀) string _bugFilePath = BugFolderPath + "/Bug - " + _bugId + AppManager.Systems.ProjectSystem.OtherFileSuffix; //FileInfo类 用于读取文件信息 FileInfo _bugFileInfo = new FileInfo(_bugFilePath); /* 判断文件是否存在 */ if (_bugFileInfo.Exists == true) //如果存在 { //读取[Bug]的Json文本中的内容 string _bugJsonText = File.ReadAllText(_bugFilePath); //然后把Json文本解析成BugBaseData对象 BugBaseData _bugBaseData = null; try { _bugBaseData = JsonMapper.ToObject <BugBaseData>(_bugJsonText); } catch (Exception e) { } //把BugBaseData对象,转化为BugData对象 BugData _bugData = BugBaseData.BaseDataToData(_bugBaseData); //如果BugData的完整度为true if (BugData.VerifyIntegrity(_bugData) == true) { //把BugData对象赋值 BugData _oldBugData = GetBugData(_bugData.Id); //通过BugId获取到旧的Bug对象 if (_oldBugData != null) //如果有旧的Bug对象 { //如果旧的Bug和新的Bug有不同的地方 if (BugData.Compare(CompareType.All, _bugData, _oldBugData) == false) { //修改旧的Bug对象的值 _oldBugData.Name.Text = _bugData.Name.Text; _oldBugData.Progress = _bugData.Progress; _oldBugData.Priority = _bugData.Priority; _oldBugData.CreateTime = _bugData.CreateTime; _oldBugData.SolveTime = _bugData.SolveTime; _oldBugData.UpdateTime = _bugData.UpdateTime; _oldBugData.UpdateNumber = _bugData.UpdateNumber; _oldBugData.TemperamentId = _bugData.TemperamentId; _oldBugData.IsDelete = _bugData.IsDelete; } } else { BugDatas.Add(_bugData); //把读取到的Bug对象,添加到列表中 } } } break; } } /* 如果有错误,就输出错误 */ catch (Exception e) { //输出错误 AppManager.Uis.ErrorUi.UiControl.TipContent = e.ToString(); AppManager.Uis.ErrorUi.OpenOrClose(true); } }
/// <summary> /// 同步[Bug] /// (当有[Bug]文件更改时,2秒后,把已经修改的文件,进行同步) /// </summary> /// <param name="_syncBugIds">需要同步的所有Bug编号</param> /// <param name="_changeTypes">改变的类型(key:Bug的编号;value:改变的类型)</param> /// <param name="_logs">同步的日志</param> private void SyncBug(List <long> _syncBugIds, out Dictionary <long, ChangeType> _changeTypes, out List <string> _logs) { //out _logs = new List <string>(); //所有的日志 _changeTypes = new Dictionary <long, ChangeType>(); //改变的类型 //遍历所有需要同步的Bug for (int i = 0; i < _syncBugIds.Count; i++) { //Bug的编号 long _bugId = _syncBugIds[i]; /* 取到当前的数据 */ //取到当前Bug的数据 BugData _oldBugData = BugData.Copy(AppManager.Systems.BugSystem.GetBugData(_bugId)); if (_oldBugData != null) { _oldBugData.Name = _oldBugData.Name.Copy(); } /* 读取Bug数据 */ //Bug文件的路径(文件夹+文件名+后缀) string _bugFilePath = AppManager.Systems.ProjectSystem.BugFolderPath + "/Bug - " + _bugId + AppManager.Systems.ProjectSystem.OtherFileSuffix; string _bugJsonText; BugBaseData _bugBaseData = null; BugData _newBugData = null; try { //读取[Bug]的Json文本中的内容 _bugJsonText = File.ReadAllText(_bugFilePath); //然后把Json文本解析成BugBaseData对象 _bugBaseData = JsonMapper.ToObject <BugBaseData>(_bugJsonText); //把BugBaseData对象,转化为BugData对象(取到新的Bug数据) _newBugData = BugBaseData.BaseDataToData(_bugBaseData); } catch (Exception e) { } /* 对比2个Bug的修改 */ //如果是添加一个Bug,或者是修改一个Bug,或者是IsDelete为true的删除Bug if ((_oldBugData != null && _newBugData != null) || (_oldBugData == null && _newBugData != null)) { //如果新的Bug是完整的 if (BugData.VerifyIntegrity(_newBugData)) { //如果旧的Bug和新的Bug有区别 if (BugData.Compare(CompareType.All, _oldBugData, _newBugData) == false) { //读取这个Bug文件 AppManager.Systems.BugSystem.LoadBug(ModeType, _bugId); //获取Bug的更改 ChangeType _changeType = CompareOldBugAndNewBug(_oldBugData, _newBugData); //获取Log string _log = GenerateBugSyncLogText(_oldBugData, _newBugData, _changeType); //把改变的类型加入到字典中 _changeTypes.Add(_bugId, _changeType); //把_log加入到_logs中 if (_log != null && _log != "") { _logs.Add(_log); } } } } //如果是直接删除文件的删除Bug else if (_oldBugData != null && _newBugData == null) { //判断Bug文件是否存在 FileInfo _bugFileInfo = new FileInfo(_bugFilePath); //如果Bug文件已被删除 if (_bugFileInfo.Exists == false) { //标记为已删除 AppManager.Systems.BugSystem.GetBugData(_bugId).IsDelete = true; //获取Bug的更改 ChangeType _changeType = CompareOldBugAndNewBug(_oldBugData, _newBugData); //获取Log string _log = GenerateBugSyncLogText(_oldBugData, _newBugData, _changeType); //把改变的类型加入到字典中 _changeTypes.Add(_bugId, _changeType); //把_log加入到_logs中 if (_log != null && _log != "") { _logs.Add(_log); } } } } }