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); } }
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); } }
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()); }