private async Task <uint> LoadMoreItemsInternalAsync(uint count, CancellationToken cancellationToken)
        {
            var REDDIT_API_BASE         = "http://www.bbc.co.uk/search/more?page={0}&q={1}";
            var REDDIT_API_BASE_REQUEST = string.Format(REDDIT_API_BASE, "1", Uri.EscapeDataString(this._query));

            var requestUrl = REDDIT_API_BASE_REQUEST;
            int page       = 1;

            while (!this._cancellationToken.IsCancellationRequested && requestUrl != null)
            {
                string response = await Downloader.DownloadTextAsync(requestUrl);

                if (response == null)
                {
                    // Brute Force Algorithm
                    continue;
                }

                IEnumerable <BaseSearchResult> results = BBCParser.ParseSearchResults(response, _query);
                await System.Windows.Application.Current.Dispatcher.BeginInvoke(
                    System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
                {
                    foreach (var result in results)
                    {
                        if (_itemsAvailable > _itemsRequired)
                        {
                            break;
                        }

                        if (!this._cancellationToken.IsCancellationRequested)
                        {
                            this._store.Add(result);
                        }
                    }
                }));

                page      += 1;
                requestUrl = string.Format(REDDIT_API_BASE, page, Uri.EscapeDataString(this._query));
            }

            return((uint)_itemsAvailable);
        }
Esempio n. 2
0
        /// <summary>
        /// Some minor housekeeping on the message before we get into the heavy lifting.
        /// </summary>
        public async Task <InputModels.ProcessedMessageInput> PreProcess(InputModels.ProcessedMessageInput processedMessage)
        {
            processedMessage.DisplayBody = processedMessage.DisplayBody.Trim();

            if (string.IsNullOrEmpty(processedMessage.DisplayBody))
            {
                throw new ArgumentException("Message body is empty.");
            }

            var smileys = await SmileyRepository.Records();

            // Ensures the smileys are safe from other HTML processing.
            for (var i = 0; i < smileys.Count(); i++)
            {
                var pattern     = $@"(^|[\r\n\s]){Regex.Escape(smileys[i].Code)}(?=$|[\r\n\s])";
                var replacement = $"$1SMILEY_{i}_INDEX";
                processedMessage.DisplayBody = Regex.Replace(processedMessage.DisplayBody, pattern, replacement, RegexOptions.Singleline);
            }

            processedMessage.DisplayBody = BBCParser.ToHtml(processedMessage.DisplayBody);

            return(processedMessage);
        }
Esempio n. 3
0
		public void ParseBBC(InputModels.ProcessedMessageInput processedMessageInput) {
			processedMessageInput.DisplayBody = BBCParser.ToHtml(processedMessageInput.DisplayBody);
		}