void SearchResult::pickResults(SearchResultList& aResults, int aMaxCount) noexcept { if (static_cast<int>(aResults.size()) <= aMaxCount) { // we can pick all matches } else { // pick the best matches sort(aResults.begin(), aResults.end(), SearchResult::SpeedSortOrder()); aResults.erase(aResults.begin() + aMaxCount, aResults.end()); } }
void SearchResult::pickResults(SearchResultList& aResults, int pickedNum) { if (static_cast<int>(aResults.size()) <= pickedNum) { //we can pick all matches } else { //pick the best matches sort(aResults.begin(), aResults.end(), SearchResult::SpeedSortOrder()); aResults.erase(aResults.begin()+pickedNum, aResults.end()); } }
void SearchManager::respond(const AdcCommand& adc, const CID& from) { // Filter own searches if(from == ClientManager::getInstance()->getMe()->getCID()) return; UserPtr p = ClientManager::getInstance()->findUser(from); if(!p) return; SearchResultList results; ShareManager::getInstance()->search(results, adc.getParameters(), 10); string token; adc.getParam("TO", 0, token); if(results.empty()) return; for(SearchResultList::const_iterator i = results.begin(); i != results.end(); ++i) { AdcCommand cmd = (*i)->toRES(AdcCommand::TYPE_UDP); if(!token.empty()) cmd.addParam("TO", token); ClientManager::getInstance()->send(cmd, from); } }
void FindResultsTab::OnSearchMatch(wxCommandEvent& e) { SearchResultList* res = (SearchResultList*)e.GetClientData(); if(!res) return; int m = m_book ? m_book->GetPageIndex(m_recv) : 0; if(m == wxNOT_FOUND) { wxDELETE(res); return; } MatchInfo& matchInfo = GetMatchInfo(m); for(SearchResultList::iterator iter = res->begin(); iter != res->end(); iter++) { if(matchInfo.empty() || matchInfo.rbegin()->second.GetFileName() != iter->GetFileName()) { if(!matchInfo.empty()) { AppendText("\n"); } wxFileName fn(iter->GetFileName()); fn.MakeRelativeTo(); AppendText(fn.GetFullPath() + wxT("\n")); } int lineno = m_recv->GetLineCount() - 1; matchInfo.insert(std::make_pair(lineno, *iter)); wxString text = iter->GetPattern(); int delta = -text.Length(); text.Trim(false); delta += text.Length(); text.Trim(); wxString linenum; if(iter->GetMatchState() == CppWordScanner::STATE_CPP_COMMENT || iter->GetMatchState() == CppWordScanner::STATE_C_COMMENT) linenum = wxString::Format(wxT(" %5u //"), iter->GetLineNumber()); else linenum = wxString::Format(wxT(" %5u "), iter->GetLineNumber()); SearchData* d = GetSearchData(m_recv); // Print the scope name if(d->GetDisplayScope()) { TagEntryPtr tag = TagsManagerST::Get()->FunctionFromFileLine(iter->GetFileName(), iter->GetLineNumber()); wxString scopeName(wxT("global")); if(tag) { scopeName = tag->GetPath(); } linenum << wxT("[ ") << scopeName << wxT(" ] "); iter->SetScope(scopeName); } delta += linenum.Length(); AppendText(linenum + text + wxT("\n")); m_recv->IndicatorFillRange(m_sci->PositionFromLine(lineno) + iter->GetColumn() + delta, iter->GetLen()); } wxDELETE(res); }
void FindResultsTab::OnSearchMatch(wxCommandEvent& e) { SearchResultList* res = (SearchResultList*)e.GetClientData(); if(!res) return; SearchResultList::iterator iter = res->begin(); for(; iter != res->end(); ++iter) { if(m_matchInfo.empty() || m_matchInfo.rbegin()->second.GetFileName() != iter->GetFileName()) { if(!m_matchInfo.empty()) { AppendText("\n"); } wxFileName fn(iter->GetFileName()); fn.MakeRelativeTo(); AppendText(fn.GetFullPath() + wxT("\n")); } int lineno = m_sci->GetLineCount() - 1; m_matchInfo.insert(std::make_pair(lineno, *iter)); wxString text = iter->GetPattern(); // int delta = -text.Length(); // text.Trim(false); // delta += text.Length(); // text.Trim(); wxString linenum = wxString::Format(wxT(" %5u: "), iter->GetLineNumber()); SearchData* d = GetSearchData(); // Print the scope name if(d->GetDisplayScope()) { TagEntryPtr tag = TagsManagerST::Get()->FunctionFromFileLine(iter->GetFileName(), iter->GetLineNumber()); wxString scopeName(wxT("global")); if(tag) { scopeName = tag->GetPath(); } linenum << wxT("[ ") << scopeName << wxT(" ] "); iter->SetScope(scopeName); } AppendText(linenum + text + wxT("\n")); int indicatorStartPos = m_sci->PositionFromLine(lineno) + iter->GetColumn() + linenum.Length(); int indicatorLen = iter->GetLen(); m_indicators.push_back(indicatorStartPos); m_sci->IndicatorFillRange(indicatorStartPos, indicatorLen); } wxDELETE(res); }
void SearchManager::respond(const AdcCommand& adc, const CID& from, bool isUdpActive, const string& hubIpPort) { // Filter own searches if(from == ClientManager::getInstance()->getMe()->getCID()) return; UserPtr p = ClientManager::getInstance()->findUser(from); if(!p) return; SearchResultList results; ShareManager::getInstance()->search(results, adc.getParameters(), isUdpActive ? 10 : 5); string token; adc.getParam("TO", 0, token); // TODO: don't send replies to passive users if(results.empty()) { string tth; if(!adc.getParam("TR", 0, tth)) return; PartsInfo partialInfo; if(!QueueManager::getInstance()->handlePartialSearch(TTHValue(tth), partialInfo)) { // if not found, try to find in finished list if(!FinishedManager::getInstance()->handlePartialRequest(TTHValue(tth), partialInfo)) { return; } } AdcCommand cmd = toPSR(true, Util::emptyString, hubIpPort, tth, partialInfo); ClientManager::getInstance()->send(cmd, from); return; } for(SearchResultList::const_iterator i = results.begin(); i != results.end(); ++i) { AdcCommand cmd = (*i)->toRES(AdcCommand::TYPE_UDP); if(!token.empty()) cmd.addParam("TO", token); ClientManager::getInstance()->send(cmd, from); } }