Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }