Пример #1
0
        public static AddQueueResponse Unmarshall(UnmarshallerContext _ctx)
        {
            AddQueueResponse addQueueResponse = new AddQueueResponse();

            addQueueResponse.HttpResponse = _ctx.HttpResponse;
            addQueueResponse.RequestId    = _ctx.StringValue("AddQueue.RequestId");

            return(addQueueResponse);
        }
        public override async Task <AddQueueResponse> AddQueueItem(AddQueueRequest request, ServerCallContext context)
        {
            AddQueueResponse response = new AddQueueResponse();
            QueueItem        item     = null;

            switch (request.NewItemCase)
            {
            case AddQueueRequest.NewItemOneofCase.Item:
                item = response.Item = request.Item;
                break;

            case AddQueueRequest.NewItemOneofCase.TweetId:
                ITweet tweet = await TweetAsync.GetTweet(request.TweetId);

                item         = new QueueItem();
                item.TweetId = tweet.Id;
                item.Played  = 0;
                item.User    = _dataStore.GetUser(tweet.CreatedBy.Id);
                item.Created = tweet.CreatedAt
                               .ToUniversalTime()
                               .ToTimestamp();

                StringBuilder             builder = new StringBuilder("<speak>");
                ISet <IUserMentionEntity> users   = new HashSet <IUserMentionEntity>(tweet.UserMentions);

                if (tweet.IsRetweet)
                {
                    ITweet retweeted = tweet.RetweetedTweet;
                    builder.AppendFormat("I, {0} retweetet {1}:",
                                         tweet.CreatedBy.Name,
                                         tweet.CreatedBy.Id == retweeted.CreatedBy.Id ?
                                         "myself" :
                                         retweeted.CreatedBy.Name);
                    builder.Append("<break time=\"500ms\"/>");
                    builder.Append(retweeted.FullText);

                    foreach (var userMention in retweeted.UserMentions)
                    {
                        users.Add(userMention);
                    }
                }
                else if (tweet.QuotedTweet != null)
                {
                    ITweet quoted = tweet.QuotedTweet;
                    builder.AppendFormat("I, {0} quoted {1}: ",
                                         tweet.CreatedBy.Name,
                                         tweet.CreatedBy.Id == quoted.CreatedBy.Id ?
                                         "myself" :
                                         quoted.CreatedBy.Name);
                    builder.Append("<break time=\"500ms\"/>");
                    builder.Append(quoted.FullText);
                    builder.Append("<break time=\"500ms\"/>");
                    builder.AppendFormat("My quote on that: {0}", tweet.FullText);

                    foreach (var userMention in quoted.UserMentions)
                    {
                        users.Add(userMention);
                    }
                }
                else
                {
                    builder.AppendFormat("I, {0} tweeted: ",
                                         tweet.CreatedBy.Name);
                    builder.Append(tweet.FullText);
                }

                builder.Append("<break time=\"1s\"/>");
                builder.Append("</speak>");

                string text = _urlRegex.Replace(builder.ToString(), "");
                if (string.IsNullOrWhiteSpace(text))
                {
                    response.IsEmpty = true;
                    break;
                }

                foreach (var user in users)
                {
                    text = text.Replace($"@{user.ScreenName}", user.Name);
                }

                item.Ssml     = HttpUtility.HtmlDecode(text);
                item.Content  = HttpUtility.HtmlDecode(tweet.FullText);
                response.Item = item;
                break;
            }

            if (!response.IsEmpty)
            {
                _logger.LogInformation("Added Item {0} by {1}", item.TweetId, item.User.Handle);
                _dataStore.Enqueue(item);
            }

            return(response);
        }
Пример #3
0
        protected internal virtual AddQueueResponse Convert(Amazon.SQS.Model.SendMessageResponse response)
        {
            var addQueueResponse = new AddQueueResponse();
            if (response.IsSetSendMessageResult())
            {
                var sendMessageResult = response.SendMessageResult;
                if (sendMessageResult.IsSetMessageId())
                {
                    addQueueResponse.MessageId = sendMessageResult.MessageId;
                }
            }
            if (response.IsSetResponseMetadata())
            {
                var metadata = response.ResponseMetadata;
                if (metadata.IsSetRequestId())
                {
                    addQueueResponse.RequestId = metadata.RequestId;
                }
            }

            return addQueueResponse;
        }