private WhowatchMessageContext CreateMessageContext(IWhowatchMessage message, bool isInitialComment)
        {
            IMessageMetadata metadata = null;

            if (message is IWhowatchComment comment)
            {
                var user = GetUser(comment.UserId);
                user.Name = comment.NameItems;
                var isFirstComment = _first.IsFirstComment(user.UserId);
                metadata = new CommentMessageMetadata(comment, _options, _siteOptions, user, this, isFirstComment)
                {
                    IsInitialComment = isInitialComment,
                    SiteContextGuid  = SiteContextGuid,
                };
            }
            else if (message is IWhowatchItem item)
            {
                var user = GetUser(item.UserId.ToString());
                user.Name = item.NameItems;
                metadata  = new ItemMessageMetadata(item, _options, _siteOptions, user, this)
                {
                    IsInitialComment = true,
                    SiteContextGuid  = SiteContextGuid,
                };
            }
            WhowatchMessageContext context = null;

            if (metadata != null)
            {
                var methods = new WhowatchMessageMethods();
                context = new WhowatchMessageContext(message, metadata, methods);
            }
            return(context);
        }
 public CommentMessageMetadata(IWhowatchMessage message, ICommentOptions options, IWhowatchSiteOptions siteOptions, IUser user, ICommentProvider cp, bool isFirstComment)
     : base(options, siteOptions, cp)
 {
     User                  = user;
     IsFirstComment        = isFirstComment;
     user.PropertyChanged += User_PropertyChanged;
 }
        private void InternalCommentProvider_MessageReceived(object sender, IWhowatchMessage e)
        {
            var whowatchMessage = e;

            try
            {
                var context = CreateMessageContext(whowatchMessage, false);
                if (context != null)
                {
                    MessageReceived?.Invoke(this, context);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(whowatchMessage.Raw);
                _logger.LogException(ex);
            }
        }
 public WhowatchMessageContext(IWhowatchMessage message, IMessageMetadata metadata, IMessageMethods methods)
 {
     Message  = message;
     Metadata = metadata;
     Methods  = methods;
 }