public async override Task <FacebookProcessResult> Process(SocialAccount socialAccount, FbHookChange change) { var result = new FacebookProcessResult(NotificationManager); string token = socialAccount.Token; if (IsDuplicatedMessage(change.Value.CommentId)) { return(result); } FbComment comment = FbClient.GetComment(socialAccount.Token, change.Value.CommentId); SocialUser sender = await GetOrCreateFacebookUser(socialAccount.Token, comment.from.id); var conversation = GetConversation(change.Value.PostId); if (conversation == null) { return(result); } Message message = FacebookConverter.ConvertToMessage(comment); message.SenderId = sender.Id; var parent = GetParent(change.Value.PostId, comment); if (parent != null) { message.ParentId = parent.Id; message.ReceiverId = parent.SenderId; bool ifParentIsComment = parent.ParentId != null; if (ifParentIsComment) { message.Source = MessageSource.FacebookPostReplyComment; } } message.ConversationId = conversation.Id; conversation.IfRead = false; conversation.Status = sender.Id != socialAccount.Id ? ConversationStatus.PendingInternal : ConversationStatus.PendingExternal; conversation.LastMessageSenderId = message.SenderId; conversation.LastMessageSentTime = message.SendTime; if (conversation.TryToMakeWallPostVisible(socialAccount)) { result.WithNewConversation(conversation); } conversation.Messages.Add(message); await UpdateConversation(conversation); await CurrentUnitOfWork.SaveChangesAsync(); if (!conversation.IsHidden) { result.WithNewMessage(message); } return(result); }
private Message GetParent(string postId, FbComment comment) { Message parent; if (comment.parent == null) { parent = GetMessage(MessageSource.FacebookPost, postId); } else { parent = GetMessage(MessageSource.FacebookPostComment, comment.parent.id); } return(parent); }
public static (bool IsError, string Result) GenerateXmlComment(FbComment fbComment) { if (fbComment?.OgObject?.Comment == null) { return(true, "Nothing to import"); } try { // 1. Read XML item string itemFile = File.ReadAllText(@"Templates\Item.xml"); var sbItem = new StringBuilder(); // 2. Loop through FB comments foreach (var comment in fbComment.OgObject.Comment.CommentList ?? Enumerable.Empty <CommentData>()) { string url = fbComment.Id.Replace("/en/", "/blog/") .Replace("/pt/", "/blog/"); sbItem.AppendLine(itemFile); sbItem.Replace("{{TITLE}}", fbComment.OgObject.Title); sbItem.Replace("{{URL}}", url); sbItem.Replace("{{COMMENT_ID}}", comment.Id); sbItem.Replace("{{AUTHOR_NAME}}", comment.From.Name); sbItem.Replace("{{COMMENT_DATE}}", DateTime.Parse(comment.CreatedTime).ToString("yyyy-MM-dd HH:MM:ss")); sbItem.Replace("{{COMMENT_BODY}}", comment.Message); } // 4. Read XML container string mainFile = File.ReadAllText(@"Templates\Main.xml"); var sbMain = new StringBuilder(mainFile); // 5. Add XML with replaced placeholders into XML container sbMain.Replace("{{ITEMS}}", sbItem.ToString()); // 6. Save generated XML content File.WriteAllText($@"Export\{fbComment.OgObject.Title.Replace(":", "")}.xml", sbMain.ToString()); return(false, "XmlComment generated successfully"); } catch (Exception ex) { return(true, ex.Message); } }
public Message ConvertToMessage(FbComment comment) { Message message = new Message { Source = MessageSource.FacebookPostComment, OriginalId = comment.id, SendTime = comment.created_time.ToUniversalTime(), Content = comment.message, OriginalLink = comment.permalink_url, }; if (comment.attachment != null && comment.attachment.media != null) { message.Attachments.Add(ConvertToAttachment(comment.attachment)); } return(message); }
private Mock <IDependencyResolver> MockDependencyResolver(FbHookChange change, FbComment fbComment, SocialUser sender) { var fbClientMock = new Mock <IFbClient>(); fbClientMock.Setup(t => t.GetComment("token", change.Value.CommentId)).Returns(fbComment); var messageServiceMock = new Mock <IMessageService>(); messageServiceMock.Setup(t => t.FindAll()).Returns(new List <Message>().AsQueryable()); var socialUserServiceMock = new Mock <ISocialUserService>(); socialUserServiceMock.Setup(t => t.GetOrCreateFacebookUser("token", fbComment.from.id)).ReturnsAsync(sender); var conversationServiceMock = new Mock <IConversationService>(); conversationServiceMock.Setup(t => t.FindAll()).Returns(new List <Conversation> { new Conversation { OriginalId = fbComment.PostId } }.AsQueryable()); var dependencyResolverMock = new Mock <IDependencyResolver>(); dependencyResolverMock.Setup(t => t.Resolve <IFbClient>()).Returns(fbClientMock.Object); dependencyResolverMock.Setup(t => t.Resolve <IMessageService>()).Returns(messageServiceMock.Object); dependencyResolverMock.Setup(t => t.Resolve <ISocialUserService>()).Returns(socialUserServiceMock.Object); dependencyResolverMock.Setup(t => t.Resolve <IConversationService>()).Returns(conversationServiceMock.Object); return(dependencyResolverMock); }