Exemple #1
0
        public async Task <string> React(PublicId userId, PublicId toId, ReactionType type)
        {
            var reaction = (ActivityObject)Activator.CreateInstance(CustomJsonSerializer.TypeOf(type.ToString()));

            reaction.actor = new List <BaseObject> {
                new Common.Person {
                    PublicId = userId,
                }
            }.ToCollection();

            var target = await _activityContent.Get(toId, userId);

            if (target != null)
            {
                reaction.target = new List <BaseObject> {
                    target
                }.ToCollection();

                var res = await _activityStream.Post("outbox", reaction);

                return(reaction.id);
            }
            else
            {
                return(null);
            }
        }
        // private async Task SendOutNotifications(BaseObject post)
        // {
        //     if (post.PostType == PostType.Text)
        //     {
        //         await SendOutNotificationsToTagFollowers(post);
        //         await SendOutNotificationsToPosterFollowers(post);
        //         await SendOutNotificationsToMentioned(post);
        //     }
        // }

        // private async Task SendOutNotificationsToTagFollowers(BaseObject post)
        // {
        //     var tagIds = post.Tags.Select(t => t.Tag).ToArray();
        //     var tagFollowers = await _dbContext.FollowingPostTags.Where(f => tagIds.Contains(f.Tag)).Select(u => u.UserId).Distinct().ToArrayAsync();
        //     if (tagFollowers.Length > 0)
        //     {
        //         await _notifications.Publish(new Models.AhPushIt.Notification() {
        //             FromUserId = post.UserId,
        //             SubjectId = post.Id,
        //             Priority = NotificationPriority.Normal,
        //             Subject = ReactionSubject.Post,
        //             Type = NotificationType.TEXT_POST_FOLLOWED_TAG,
        //         }, tagFollowers.Select(id => new PublicId(id, 0)).ToArray());
        //     }
        // }

        // private async Task SendOutNotificationsToMentioned(BaseObject post)
        // {
        //     if (post.Mentions.Count > 0)
        //     {
        //         await _notifications.Publish(new Models.AhPushIt.Notification() {
        //             FromUserId = post.UserId,
        //             SubjectId = post.Id,
        //             Priority = NotificationPriority.Normal,
        //             Subject = ReactionSubject.Post,
        //             Type = NotificationType.TEXT_POST_MENTION,
        //         }, post.Mentions.Select(u => new PublicId(u.MentionedUserId, u.MentionedUserPeerId)).ToArray());
        //     }
        // }

        public async Task <BaseObject> TryCreateTextPost(ActorObject publisher, string content, Visibility visibility)
        {
            if (string.IsNullOrWhiteSpace(content))
            {
                return(new Error
                {
                    statusCode = 403,
                    errorCode = 403,
                    summary = "content is empty"
                });
            }
            var audience     = visibility.ToAudience(publisher ?? throw new ArgumentNullException(nameof(publisher)));
            var audienceList = audience?.IntoNewList <BaseObject>()?.ToCollection();
            var from         = publisher.IntoNewList <BaseObject>().ToCollection();
            var post         = new Create
            {
                obj = new Note()
                {
                    content  = content,
                    audience = audienceList,
                    from     = from,
                },
                from = from,
                to   = audienceList,
            };

            return((await _activityStreams.Post("outbox", post)) ?? post);
        }