Ejemplo n.º 1
0
        public async Task <JsonResult> UpdateNoteOrContent([ModelBinder(BinderType = typeof(NoteOrContentModelBinder))] NoteOrContent noteOrContent)
        {
            var userid  = GetUserIdBySession();
            var oldNote = noteService.GetNoteById(noteOrContent.NoteId);

            // 新添加note
            if (noteOrContent.IsNew.IsValidTrue() && oldNote == null)
            {
                var userId = GetUserIdBySession();
                // 为共享新建?
                if (noteOrContent.FromUserId != null)
                {
                    userId = noteOrContent.FromUserId;
                }

                //todo:IsBlog.Value 缺陷 空指针异常
                var note = new Note()
                {
                    UserId     = userId,
                    NoteId     = noteOrContent.NoteId,
                    NotebookId = noteOrContent.NotebookId,
                    Title      = noteOrContent.Title,
                    Src        = noteOrContent.Src,
                    Tags       = noteOrContent.Tags.ToTagsArray(),
                    Desc       = noteOrContent.Desc,
                    ImgSrc     = noteOrContent.ImgSrc,
                    IsBlog     = noteOrContent.IsBlog.GetValueOrDefault(),
                    IsMarkdown = noteOrContent.IsMarkdown.GetValueOrDefault()
                };
                var noteContent = new NoteContent()
                {
                    UserId   = userId,
                    IsBlog   = note.IsBlog,
                    Content  = noteOrContent.Content,
                    Abstract = noteOrContent.Abstract
                };
                note = noteService.AddNoteAndContentForController(note, noteContent, userid);
                return(Json(note, MyJsonConvert.GetLeanoteOptions()));
            }
            var noteUpdate     = new Note();
            var needUpdateNote = false;

            if (noteOrContent.Desc.IsValid())
            {
                needUpdateNote  = true;
                noteUpdate.Desc = noteOrContent.Desc;
            }
            if (noteOrContent.Title.IsValid())
            {
                needUpdateNote   = true;
                noteUpdate.Title = noteOrContent.Title;
            }

            if (noteOrContent.ImgSrc.IsValid())
            {
                needUpdateNote    = true;
                noteUpdate.ImgSrc = noteOrContent.ImgSrc;
            }
            if (noteOrContent.Tags.IsValid())
            {
                needUpdateNote  = true;
                noteUpdate.Tags = noteOrContent.Tags.ToTagsArray();
            }

            // web端不控制
            if (needUpdateNote)
            {
                noteService.UpdateNote(userid, noteOrContent.NoteId, noteUpdate, -1);
            }

            if (noteOrContent.Content.IsValid())
            {
                noteContentService.UpdateNoteContent(userid, noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract, needUpdateNote, -1, DateTime.Now);
            }
            return(Json(true));
        }
Ejemplo n.º 2
0
        public JsonResult UpdateNote(ApiNote noteOrContent, string token)
        {
            Note noteUpdate     = new Note();
            var  needUpdateNote = false;
            var  re             = new ReUpdate();
            long?tokenUserId    = GetUserIdByToken(token);
            var  noteId         = noteOrContent.NoteId.ToLongByHex();

            //-------------校验参数合法性
            if (tokenUserId == 0)
            {
                re.Msg = "NOlogin";
                re.Ok  = false;
                return(Json(re, MyJsonConvert.GetSimpleOptions()));
            }

            if (string.IsNullOrEmpty(noteOrContent.NoteId))
            {
                re.Msg = "noteIdNotExists";
                re.Ok  = false;
                return(Json(re, MyJsonConvert.GetSimpleOptions()));
            }

            if (noteOrContent.Usn < 1)
            {
                re.Msg = "usnNotExists";
                re.Ok  = false;
                return(Json(re, MyJsonConvert.GetSimpleOptions()));
            }
            // 先判断USN的问题, 因为很可能添加完附件后, 会有USN冲突, 这时附件就添错了
            var note        = noteService.GetNote(noteId, tokenUserId);
            var noteContent = noteContentService.GetNoteContent(note.NoteId, tokenUserId, false);

            if (note == null || note.NoteId == 0)
            {
                re.Msg = "notExists";
                re.Ok  = false;
                return(Json(re, MyJsonConvert.GetSimpleOptions()));
            }
            //判断服务器版本与客户端版本是否一致
            if (note.Usn != noteOrContent.Usn)
            {
                re.Msg = "conflict";
                re.Ok  = false;
                return(Json(re, MyJsonConvert.GetSimpleOptions()));
            }
            //-------------更新文件和附件内容
            if (noteOrContent.Files != null && noteOrContent.Files.Length > 0)
            {
                for (int i = 0; i < noteOrContent.Files.Length; i++)
                {
                    var file = noteOrContent.Files[i];
                    if (file.HasBody)
                    {
                        if (!string.IsNullOrEmpty(file.LocalFileId))
                        {
                            var result = UploadImages("FileDatas[" + file.LocalFileId + "]", tokenUserId, noteId, file.IsAttach, out long?serverFileId, out string msg);
                            if (!result)
                            {
                                if (string.IsNullOrEmpty(msg))
                                {
                                    re.Msg = "fileUploadError";
                                }
                                if (!string.Equals(msg, "notImage", System.StringComparison.OrdinalIgnoreCase))
                                {
                                    return(Json(re, MyJsonConvert.GetLeanoteOptions()));
                                }
                            }
                            else
                            {
                                // 建立映射
                                file.FileId            = serverFileId.ToHex24();
                                noteOrContent.Files[i] = file;
                            }
                        }
                        else
                        {
                            return(Json(new ReUpdate()
                            {
                                Ok = false,
                                Msg = "LocalFileId_Is_NullOrEmpty",
                                Usn = 0
                            }, MyJsonConvert.GetSimpleOptions()));
                        }
                    }
                }
            }
            //更新用户元数据
            //int usn = UserService.IncrUsn(tokenUserId);

            // 移到外面来, 删除最后一个file时也要处理, 不然总删不掉
            // 附件问题, 根据Files, 有些要删除的, 只留下这些
            if (noteOrContent.Files != null)
            {
                attachService.UpdateOrDeleteAttachApiAsync(noteId, tokenUserId, noteOrContent.Files);
            }
            //-------------更新笔记内容
            var  afterContentUsn = 0;
            var  contentOk       = false;
            var  contentMsg      = "";
            long?contentId       = 0;

            if (noteOrContent.Content != null)
            {
                // 把fileId替换下
                FixPostNotecontent(ref noteOrContent);
                // 如果传了Abstract就用之
                if (noteOrContent.Abstract != null)
                {
                    noteOrContent.Abstract = MyHtmlHelper.SubHTMLToRaw(noteOrContent.Abstract, 200);
                }
                else
                {
                    noteOrContent.Abstract = MyHtmlHelper.SubHTMLToRaw(noteOrContent.Content, 200);
                }
            }
            else
            {
                noteOrContent.Abstract = MyHtmlHelper.SubHTMLToRaw(noteContent.Content, 200);
            }
            //上传noteContent的变更
            contentOk = noteContentService.UpdateNoteContent(
                noteOrContent,
                out contentMsg,
                out contentId
                );
            //返回处理结果
            if (!contentOk)
            {
                re.Ok  = false;
                re.Msg = contentMsg;
                re.Usn = afterContentUsn;
                return(Json(re, MyJsonConvert.GetLeanoteOptions()));
            }

            //-------------更新笔记元数据
            int afterNoteUsn = 0;
            var noteOk       = false;
            var noteMsg      = "";

            noteOk = noteService.UpdateNote(
                ref noteOrContent,
                tokenUserId,
                contentId,
                true,
                true,
                out noteMsg,
                out afterNoteUsn
                );
            if (!noteOk)
            {
                re.Ok  = false;
                re.Msg = noteMsg;
                return(Json(re, MyJsonConvert.GetLeanoteOptions()));
            }
            //处理结果
            //-------------API返回客户端信息
            note = noteService.GetNote(noteId, tokenUserId);
            // noteOrContent.NoteId = noteId.ToHex24();
            // noteOrContent.UserId = tokenUserId.ToHex24();
            //  noteOrContent.Title = note.Title;
            // noteOrContent.Tags = note.Tags;
            // noteOrContent.IsMarkdown = note.IsMarkdown;
            // noteOrContent.IsBlog = note.IsBlog;
            //noteOrContent.IsTrash = note.IsTrash;
            //noteOrContent.IsDeleted = note.IsDeleted;
            //noteOrContent.IsTrash = note.IsTrash;

            //noteOrContent.Usn = note.Usn;
            //noteOrContent.CreatedTime = note.CreatedTime;
            //noteOrContent.UpdatedTime = note.UpdatedTime;
            //noteOrContent.PublicTime = note.PublicTime;

            noteOrContent.Content     = "";
            noteOrContent.Usn         = afterNoteUsn;
            noteOrContent.UpdatedTime = DateTime.Now;
            noteOrContent.IsDeleted   = false;
            noteOrContent.UserId      = tokenUserId.ToHex24();
            return(Json(noteOrContent, MyJsonConvert.GetLeanoteOptions()));
        }