示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
                        }
                    }
                }
            }
        }