Beispiel #1
0
        public ITwitterIterator <IMessage> GetMessagesIterator(IGetMessagesParameters parameters)
        {
            var pageIterator = _messageRequester.GetMessagesIterator(parameters);

            return(new TwitterIteratorProxy <ITwitterResult <IMessageCursorQueryResultDTO>, IMessage>(pageIterator,
                                                                                                      twitterResult =>
            {
                var messageEventDtos = twitterResult.DataTransferObject.MessageEvents;
                var messageDtos = messageEventDtos.Select(dto =>
                {
                    var messageDto = new MessageEventWithAppDTO
                    {
                        MessageEvent = dto
                    };

                    var appId = dto.MessageCreate.SourceAppId;
                    if (appId != null && twitterResult.DataTransferObject.Apps != null && twitterResult.DataTransferObject.Apps.ContainsKey(appId.Value))
                    {
                        messageDto.App = twitterResult.DataTransferObject.Apps[appId.Value];
                    }

                    return messageDto as IMessageEventWithAppDTO;
                });

                return _client.Factories.CreateMessages(messageDtos);
            }));
        }
 public void Validate(IGetMessagesParameters parameters)
 {
     if (parameters == null)
     {
         throw new ArgumentNullException(nameof(parameters));
     }
 }
 public GetMessagesParameters(IGetMessagesParameters parameters) : base(parameters)
 {
     if (parameters == null)
     {
         PageSize = TwitterLimits.DEFAULTS.MESSAGES_GET_MAX_PAGE_SIZE;
     }
 }
Beispiel #4
0
        /// <summary>
        /// Get the latest messages sent or received
        /// </summary>
        public static async Task <IResultsWithCursor <IMessage> > GetLatestMessages(IGetMessagesParameters queryParameters)
        {
            string cursor = null;
            IEnumerable <IMessage> messages =
                await Sync.ExecuteTaskAsync(() => Message.GetLatestMessages(queryParameters, out cursor));

            return(generateResultsWithCursor(messages, cursor));
        }
        // Get collection of messages
        public string GetLatestMessagesQuery(IGetMessagesParameters queryParameters)
        {
            var query = new StringBuilder(string.Format(Resources.Message_GetMessages, queryParameters.Count));

            query.Append(_queryParameterGenerator.GenerateCursorParameter(queryParameters.Cursor));

            return(query.ToString());
        }
        public string GetMessagesQuery(IGetMessagesParameters parameters)
        {
            var query = new StringBuilder(Resources.Message_GetMessages);

            _queryParameterGenerator.AppendCursorParameters(query, parameters);
            query.AddFormattedParameterToQuery(parameters.FormattedCustomQueryParameters);
            return(query.ToString());
        }
Beispiel #7
0
        public void Validate(IGetMessagesParameters parameters)
        {
            _messagesClientRequiredParametersValidator.Validate(parameters);

            var maxPageSize = Limits.MESSAGES_GET_MAX_PAGE_SIZE;

            if (parameters.PageSize > maxPageSize)
            {
                throw new TwitterArgumentLimitException($"{nameof(parameters)}.{nameof(parameters.PageSize)}", maxPageSize, nameof(Limits.MESSAGES_GET_MAX_PAGE_SIZE), "page size");
            }
        }
Beispiel #8
0
        public IEnumerable <IMessage> GetLatestMessages(IGetMessagesParameters parameters, out string cursor)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            // If we've been asked to fetch more than the maximum number of results that Twitter will return from
            //  a single API request, we need to break this up into multiple requests
            if (parameters.Count > TweetinviConsts.MESSAGE_GET_COUNT)
            {
                // Firstly, run a request for the maximum number of messages from the supplied cursor
                //  Note: copy the request rather than just updating the count in case the caller intends to
                //  reuse the parameters object for future requests
                var thisReqParams = _getMessagesParametersFactory.Create();
                thisReqParams.Count  = TweetinviConsts.MESSAGE_GET_COUNT;
                thisReqParams.Cursor = parameters.Cursor;

                var result = _messageQueryExecutor.GetLatestMessages(thisReqParams);
                cursor = result.NextCursor;

                var messages = _messageFactory.GenerateMessageFromGetMessagesDTO(result);

                // If there are more messages still available to be fetched from Twitter
                if (!string.IsNullOrEmpty(cursor))
                {
                    // Build & run the next request
                    var nextReqParams = _getMessagesParametersFactory.Create();
                    nextReqParams.Count  = parameters.Count - thisReqParams.Count;
                    nextReqParams.Cursor = cursor;

                    IEnumerable <IMessage> nextReqResults = GetLatestMessages(nextReqParams, out cursor);

                    // Combine the results, latest first & return them
                    return(messages.Concat(nextReqResults));
                }

                // Otherwise, just return these results
                return(messages);
            }
            else // Otherwise just run the request as-is against the Twitter API
            {
                var getMessagesDTO = _messageQueryExecutor.GetLatestMessages(parameters);

                if (getMessagesDTO == null)
                {
                    cursor = null;
                    return(null);
                }

                cursor = getMessagesDTO.NextCursor;
                return(_messageFactory.GenerateMessageFromGetMessagesDTO(getMessagesDTO));
            }
        }
Beispiel #9
0
        public ITwitterPageIterator <ITwitterResult <IMessageCursorQueryResultDTO> > GetMessagesIterator(IGetMessagesParameters parameters)
        {
            _messagesClientParametersValidator.Validate(parameters);

            var request = TwitterClient.CreateRequest();

            request.ExecutionContext.Converters = JsonQueryConverterRepository.Converters;
            return(_messageController.GetMessagesIterator(parameters, request));
        }
Beispiel #10
0
 /// <summary>
 /// Warning: Behaviour differs from MessageController.GetLatestMessages.
 /// This method will not make multiple requests to the Twitter API and combine their results,
 /// as that would require parsing the JSON, instead that is left up to the caller.
 /// </summary>
 public static string GetLatestMessages(IGetMessagesParameters parameters)
 {
     return(MessageJsonController.GetLatestMessages(parameters));
 }
 public Task <ITwitterResult <IMessageCursorQueryResultDTO> > GetMessagesAsync(IGetMessagesParameters parameters, TwitterRequest request)
 {
     request.Query.Url        = _messageQueryGenerator.GetMessagesQuery(parameters);
     request.Query.HttpMethod = HttpMethod.GET;
     return(_twitterAccessor.ExecuteRequestAsync <IMessageCursorQueryResultDTO>(request));
 }
Beispiel #12
0
 /// <summary>
 /// Get the latest messages sent or received
 /// </summary>
 public static IEnumerable <IMessage> GetLatestMessages(IGetMessagesParameters queryParameters, out string cursor)
 {
     return(MessageController.GetLatestMessages(queryParameters, out cursor));
 }
Beispiel #13
0
 /// <summary>
 /// Get the latest messages sent or received
 /// </summary>
 public static IEnumerable <IMessage> GetLatestMessages(IGetMessagesParameters queryParameters)
 {
     return(MessageController.GetLatestMessages(queryParameters));
 }
Beispiel #14
0
 public IEnumerable <IMessage> GetLatestMessages(IGetMessagesParameters parameters)
 {
     return(GetLatestMessages(parameters, out _));
 }
Beispiel #15
0
        public async Task <IMessage[]> GetMessages(IGetMessagesParameters parameters)
        {
            var iterator = GetMessagesIterator(parameters);

            return((await iterator.NextPage().ConfigureAwait(false)).ToArray());
        }
Beispiel #16
0
        public ITwitterPageIterator <ITwitterResult <IMessageCursorQueryResultDTO> > GetMessagesIterator(IGetMessagesParameters parameters, ITwitterRequest request)
        {
            return(new TwitterPageIterator <ITwitterResult <IMessageCursorQueryResultDTO> >(
                       parameters.Cursor,
                       cursor =>
            {
                var cursoredParameters = new GetMessagesParameters(parameters)
                {
                    Cursor = cursor
                };

                return _messageQueryExecutor.GetMessagesAsync(cursoredParameters, new TwitterRequest(request));
            },
                       page => page.Model.NextCursorStr,
                       page =>
            {
                return page.Model.NextCursorStr == "0" || string.IsNullOrEmpty(page.Model.NextCursorStr);
            }));
        }
Beispiel #17
0
 public void Validate(IGetMessagesParameters parameters)
 {
     _messagesClientParametersValidator.Validate(parameters);
 }
        // Get Messages
        public IGetMessagesDTO GetLatestMessages(IGetMessagesParameters queryParameters)
        {
            string query = _messageQueryGenerator.GetLatestMessagesQuery(queryParameters);

            return(_twitterAccessor.ExecuteGETQuery <IGetMessagesDTO>(query));
        }