Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <summary>
        /// 获取[Bug]在当前页面中的索引
        /// (根据BugData,获取Bug当前页面中的索引)
        /// </summary>
        /// <param name="_bugData">哪个Bug?</param>
        /// <param name="_isReal">是否查找的是真实的索引? 如果为true,从FilterBugDatas中进行查找;如果为false,从ShowBugDatas中进行查找</param>
        /// <returns>>Bug在此页面中的索引(如果这个Bug不存在,就返回-1)(从0开始) </returns>
        public int GetBugIndexInCurrentPage(BugData _bugData, bool _isReal = false)
        {
            /* _isReal参数:是否查找的是真实的索引?
             *              如果为true,从FilterBugDatas中进行查找,那么找到的就是这个Bug在当前页面的真实索引;
             *              如果为false,从ShowBugDatas中进行查找,那么找到的就是这个Bug当前在当前页面中的索引 */

            int _index = -1;


            if (_bugData != null)
            {
                //判断
                switch (_isReal)
                {
                //从ShowBugDatas中进行查找,那么找到的就是这个Bug当前在当前页面中的索引
                case false:
                    if (ShowBugItemDatas != null)
                    {
                        //遍历所有正在显示的Bug
                        for (int i = 0; i < ShowBugItemDatas.Count; i++)
                        {
                            if (BugData.Compare(CompareType.Id, ShowBugItemDatas[i].Data, _bugData))
                            {
                                _index = i;
                                break;
                            }
                        }
                    }
                    break;


                //从FilterBugDatas中进行查找,那么找到的就是这个Bug在当前页面的真实索引
                case true:
                    //获取到过滤后的文字
                    ObservableCollection <BugData> _filterBugDatas = AppManager.Systems.SearchSystem.FilterBugDatas;

                    //找出Bug在当前页的索引
                    if (_filterBugDatas != null)
                    {
                        //然后,查找到Bug所在的索引
                        for (int i = 0; i < _filterBugDatas.Count; i++)
                        {
                            //如果找到了Bug
                            if (BugData.Compare(CompareType.Id, _filterBugDatas[i], _bugData) == true)
                            {
                                //就判断Bug所在的页码是否是当前页码
                                int _bugPageNumber = (i / ShowBugNumber) + 1;

                                //如果是当前页码
                                if (_bugPageNumber == CurrentPageNumber)
                                {
                                    //就获取Bug所在的索引
                                    _index = i % ShowBugNumber;
                                }
                            }
                        }
                    }

                    break;
                }
            }


            return(_index);
        }
Пример #3
0
        /// <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);
                        }
                    }
                }
            }
        }