Example #1
0
        public void FindSimilarBooks(string itemID, BooksFoundEventHandler callback)
        {
            if (!_books.ContainsKey(itemID)) {
                BooksFoundEvent foundEvent = new BooksFoundEvent();
                foundEvent.Success = false;
                foundEvent.FailureMessage = "No item exists for the given ID";
                foundEvent.Results = new List<Book>();
                callback.Invoke(itemID, foundEvent);
            }

            //check if the search has been cached, if it hasn't then call the web service
            if (!_similaritySearches.ContainsKey(itemID))
            {
                IDictionary<string, string> requestParams = new Dictionary<string, String>();
                requestParams["Service"] = "AWSECommerceService";
                requestParams["Operation"] = "SimilarityLookup";
                requestParams["ItemId"] = itemID;
                requestParams["ResponseGroup"] = RESPONSE_GROUP;
                requestParams["SimilarityType"] = "Random";
                requestParams["Version"] = SERVICE_VERSION;
                requestParams["AssociateTag"] = Constants.MY_AWS_ASSOCIATE_TAG;

                _similaritySearches.Add(itemID, new List<Book>());
                WebRequest request = CreateRequest(requestParams);

                TextSearchState state = new TextSearchState();
                state.SearchText = itemID;
                state.Callback = callback;
                state.Request = request;

                request.BeginGetResponse(Service_SimilarityLookupCompleted, state);
            }
            //if it has then retrieve the results from the cache
            else
            {
                BooksFoundEvent foundEvent = new BooksFoundEvent();
                foundEvent.Success = true;
                foundEvent.Results = _similaritySearches[itemID];
                callback.Invoke(itemID, foundEvent);
            }
        }
Example #2
0
        public void FindBooksByKeyword(string searchText, BooksFoundEventHandler callback)
        {
            //check if the search has been cached, if it hasn't then call the web service
            if (!_textSearches.ContainsKey(searchText))
            {
                IDictionary<string, string> requestParams = new Dictionary<string, String>();
                requestParams["Service"] = "AWSECommerceService";
                requestParams["Operation"] = "ItemSearch";
                requestParams["Keywords"] = HttpUtility.UrlEncode(searchText);
                requestParams["ResponseGroup"] = RESPONSE_GROUP;
                requestParams["SearchIndex"] = SEARCH_INDEX;
                requestParams["ItemPage"] = ITEM_PAGE;
                requestParams["Version"] = SERVICE_VERSION;
                requestParams["AssociateTag"] = Constants.MY_AWS_ASSOCIATE_TAG;

                _textSearches.Add(searchText, new List<Book>());
                WebRequest request = CreateRequest(requestParams);

                TextSearchState state = new TextSearchState();
                state.SearchText = searchText;
                state.Callback = callback;
                state.Request = request;

                request.BeginGetResponse(Service_ItemSearchCompleted, state);
            }
            //if it has then retrive the results from the cache
            else
            {
                BooksFoundEvent foundEvent = new BooksFoundEvent();
                foundEvent.Success = true;
                foundEvent.Results = _textSearches[searchText];
                callback.Invoke(string.Empty, foundEvent);
            }
        }
Example #3
0
        public List <TextSearchResult> FindTextInAllTabs(TextSearchProperties searchProperties)
        {
            if (_searchState == null)
            {
                _searchState = new TextSearchState
                {
                    InitialTabIndex = searchProperties.TabIndex,
                    TabIndex        = searchProperties.TabIndex,
                    StartPos        = searchProperties.StartPosition,
                    InitialStartPos = searchProperties.StartPosition,
                    MatchesFound    = 0
                };
            }

            TextSearchResultCollection resultCollection = new TextSearchResultCollection();
            int searchStrLength = searchProperties.SearchText.Length;

            int tabPageIndex = searchProperties.TabIndex;

            for (int i = 0; i < _searchCollection.Count; i++)
            {
                if (tabPageIndex > _searchCollection.Count)
                {
                    tabPageIndex = 0;
                }

                var item = _searchCollection.FirstOrDefault(x => x.TabPageIndex == tabPageIndex);

                if (item != null)
                {
                    int index = -1;

                    while (index > 0)
                    {
                        if (_searchState.StartPos > item.RichTextBox.TextLength)
                        {
                            break;
                        }

                        index = item.RichTextBox.Find(searchProperties.SearchText, _searchState.StartPos, RichTextBoxFinds.None);

                        if (index == -1)
                        {
                            break;
                        }

                        TextSearchResult searchResult = new TextSearchResult {
                            StartPos = index, Length = searchStrLength, TabIndex = tabPageIndex
                        };
                        resultCollection.AddSearchResult(searchResult);

                        _searchState.StartPos = index + searchStrLength;
                    }
                }

                _searchState.StartPos = 0;
                tabPageIndex++;
            }


            return(resultCollection.GetAllSearchResults());
        }