logic: Fulltextsearch

* fulltextsearch enabled in sqlite
* fulltextsearch start search with @
* codeview performance improved
* strip sRGB profile from png files to get rid of libpng warning at runtime
This commit is contained in:
Andreas Stallinger
2016-05-10 11:10:13 +02:00
parent 30faa7e52f
commit e775ae1ecd
84 changed files with 455 additions and 111 deletions
+68 -11
View File
@@ -238,6 +238,15 @@ void CodeController::handleMessage(MessageShowErrors* message)
showContents(message);
}
void CodeController::handleMessage(MessageSearchFullText* message)
{
CodeView* view = getView();
std::vector<CodeSnippetParams> snippets = getSnippetsForFullTextSearch(message->searchTerm);
view->showCodeSnippets(snippets, std::vector<Id>());
showContents(message);
}
void CodeController::handleMessage(MessageShowScope* message)
{
std::shared_ptr<TokenLocationCollection> collection =
@@ -362,15 +371,25 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForActiveTokenLocation
return fileSnippets;
}
std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_ptr<TokenLocationFile> activeTokenLocations) const
std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(
std::shared_ptr<TokenLocationFile> activeTokenLocations
) const
{
return getSnippetsForFile(activeTokenLocations, m_storageAccess->getTokenLocationsForFile(activeTokenLocations->getFilePath().str()));
return getSnippetsForFile(
activeTokenLocations,
m_storageAccess->getTokenLocationsForFile(activeTokenLocations->getFilePath().str())
);
}
std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_ptr<TokenLocationFile> activeTokenLocations, const std::shared_ptr<TokenLocationFile> fileLocations) const
std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(
std::shared_ptr<TokenLocationFile> activeTokenLocations,
const std::shared_ptr<TokenLocationFile> fileLocations
) const
{
std::shared_ptr<TextAccess> textAccess = m_storageAccess->getFileContent(activeTokenLocations->getFilePath());
std::shared_ptr<TokenLocationFile> scopeLocations = std::make_shared<TokenLocationFile>(activeTokenLocations->getFilePath().str());
std::shared_ptr<TokenLocationFile> scopeLocations
= std::make_shared<TokenLocationFile>(activeTokenLocations->getFilePath().str());
fileLocations->forEachStartTokenLocation(
[&](TokenLocation* startLoc) -> void
{
@@ -423,9 +442,10 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_pt
ranges = fileScopedMerger.merge(atomicRanges);
}
const int snippetExpandRange = ApplicationSettings::getInstance()->getCodeSnippetExpandRange();
std::vector<CodeSnippetParams> snippets;
std::shared_ptr<TokenLocationFile> file = m_storageAccess->getTokenLocationsForFile(activeTokenLocations->getFilePath().str());
for (const SnippetMerger::Range& range: ranges)
{
CodeSnippetParams params;
@@ -434,8 +454,7 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_pt
params.startLineNumber = std::max<int>(1, range.start.row - (range.start.strong ? 0 : snippetExpandRange));
params.endLineNumber = std::min<int>(textAccess->getLineCount(), range.end.row + (range.end.strong ? 0 : snippetExpandRange));
std::shared_ptr<TokenLocationFile> tempFile =
m_storageAccess->getTokenLocationsForLinesInFile(activeTokenLocations->getFilePath().str(), params.startLineNumber, params.endLineNumber);
std::shared_ptr<TokenLocationFile> tempFile = file->getFilteredByLines(params.startLineNumber, params.endLineNumber);
TokenLocationLine* firstUsedLine = nullptr;
for (size_t i = params.startLineNumber; i <= params.endLineNumber && firstUsedLine == nullptr; i++)
{
@@ -461,7 +480,6 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_pt
params.title = activeTokenLocations->getFilePath().str();
}
TokenLocationLine* lastUsedLine = nullptr;
for (size_t i = params.endLineNumber; i >= params.startLineNumber && lastUsedLine == nullptr; i--)
{
@@ -495,7 +513,11 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_pt
}
std::shared_ptr<SnippetMerger> CodeController::buildMergerHierarchy(
TokenLocation* location, std::shared_ptr<TokenLocationFile> scopeLocations, SnippetMerger& fileScopedMerger, std::map<int, std::shared_ptr<SnippetMerger>>& mergers) const
TokenLocation* location,
std::shared_ptr<TokenLocationFile> scopeLocations,
SnippetMerger& fileScopedMerger,
std::map<int, std::shared_ptr<SnippetMerger>>& mergers
) const
{
const TokenLocation* currentLocation = location;
std::shared_ptr<SnippetMerger> currentMerger = std::make_shared<SnippetMerger>(
@@ -530,7 +552,10 @@ std::shared_ptr<SnippetMerger> CodeController::buildMergerHierarchy(
return currentMerger;
}
std::shared_ptr<TokenLocationFile> CodeController::getTokenLocationOfParentScope(const TokenLocation* location, std::shared_ptr<TokenLocationFile> scopeLocations) const
std::shared_ptr<TokenLocationFile> CodeController::getTokenLocationOfParentScope(
const TokenLocation* location,
std::shared_ptr<TokenLocationFile> scopeLocations
) const
{
const TokenLocation* parent = location;
const FilePath filePath = location->getFilePath();
@@ -545,7 +570,8 @@ std::shared_ptr<TokenLocationFile> CodeController::getTokenLocationOfParentScope
{
parent = tokenLocation;
}
// since tokenLocation is a start location the > location indicates the scope that is closer to the child.
// since tokenLocation is a start location the > location indicates the scope
// that is closer to the child.
else if ((*tokenLocation) > *parent)
{
parent = tokenLocation;
@@ -563,6 +589,37 @@ std::shared_ptr<TokenLocationFile> CodeController::getTokenLocationOfParentScope
return file;
}
std::vector<CodeSnippetParams> CodeController::getSnippetsForFullTextSearch(
const std::string& searchTerm) const
{
std::shared_ptr<TokenLocationCollection> collection =
m_storageAccess->getFullTextSearchLocations(searchTerm);
std::vector<CodeSnippetParams> snippets;
collection->forEachTokenLocationFile(
[&](std::shared_ptr<TokenLocationFile> file) -> void
{
//if (snippets.size() < 10)
{
std::vector<CodeSnippetParams> fileSnippets = getSnippetsForFile(file);
snippets.insert(snippets.end(), fileSnippets.begin(), fileSnippets.end());
}
//else
//{
//CodeSnippetParams params;
//params.locationFile = file;
//params.refCount = file->getUnscopedStartTokenLocationCount();
//params.isCollapsed = true;
//snippets.push_back(params);
//}
}
);
addModificationTimes(snippets);
return snippets;
}
std::vector<CodeSnippetParams> CodeController::getSnippetsForErrorLocations(
std::vector<ErrorInfo>* errors) const
{
@@ -13,6 +13,7 @@
#include "utility/messaging/type/MessageFocusIn.h"
#include "utility/messaging/type/MessageFocusOut.h"
#include "utility/messaging/type/MessageScrollCode.h"
#include "utility/messaging/type/MessageSearchFullText.h"
#include "utility/messaging/type/MessageShowErrors.h"
#include "utility/messaging/type/MessageShowScope.h"
#include "utility/types.h"
@@ -35,6 +36,7 @@ class CodeController
, public MessageListener<MessageFocusIn>
, public MessageListener<MessageFocusOut>
, public MessageListener<MessageScrollCode>
, public MessageListener<MessageSearchFullText>
, public MessageListener<MessageShowErrors>
, public MessageListener<MessageShowScope>
{
@@ -53,6 +55,7 @@ private:
virtual void handleMessage(MessageFocusIn* message);
virtual void handleMessage(MessageFocusOut* message);
virtual void handleMessage(MessageScrollCode* message);
virtual void handleMessage(MessageSearchFullText* message);
virtual void handleMessage(MessageShowErrors* message);
virtual void handleMessage(MessageShowScope* message);
@@ -66,6 +69,7 @@ private:
std::vector<CodeSnippetParams> getSnippetsForFile(
std::shared_ptr<TokenLocationFile> activeTokenLocations, std::shared_ptr<TokenLocationFile> fileLocations) const;
std::vector<CodeSnippetParams> getSnippetsForFile(std::shared_ptr<TokenLocationFile> file) const;
std::vector<CodeSnippetParams> getSnippetsForFullTextSearch(const std::string& searchTerm) const;
std::shared_ptr<SnippetMerger> buildMergerHierarchy(
TokenLocation* location, std::shared_ptr<TokenLocationFile> context, SnippetMerger& fileScopedMerger, std::map<int, std::shared_ptr<SnippetMerger>>& mergers) const;
std::shared_ptr<TokenLocationFile> getTokenLocationOfParentScope(const TokenLocation* location, std::shared_ptr<TokenLocationFile> context) const;
@@ -87,6 +87,11 @@ void GraphController::handleMessage(MessageFlushUpdates* message)
buildGraph(message);
}
void GraphController::handleMessage(MessageSearchFullText* message)
{
clear();
}
void GraphController::handleMessage(MessageFocusIn* message)
{
getView()->focusTokenIds(message->tokenIds);
@@ -13,6 +13,7 @@
#include "utility/messaging/type/MessageGraphNodeBundleSplit.h"
#include "utility/messaging/type/MessageGraphNodeExpand.h"
#include "utility/messaging/type/MessageGraphNodeMove.h"
#include "utility/messaging/type/MessageSearchFullText.h"
#include "utility/messaging/type/MessageShowErrors.h"
#include "component/controller/Controller.h"
@@ -36,6 +37,7 @@ class GraphController
, public MessageListener<MessageGraphNodeBundleSplit>
, public MessageListener<MessageGraphNodeExpand>
, public MessageListener<MessageGraphNodeMove>
, public MessageListener<MessageSearchFullText>
, public MessageListener<MessageShowErrors>
{
public:
@@ -51,6 +53,7 @@ private:
virtual void handleMessage(MessageGraphNodeBundleSplit* message);
virtual void handleMessage(MessageGraphNodeExpand* message);
virtual void handleMessage(MessageGraphNodeMove* message);
virtual void handleMessage(MessageSearchFullText* message);
virtual void handleMessage(MessageShowErrors* message);
GraphView* getView() const;
@@ -37,6 +37,13 @@ void SearchController::handleMessage(MessageSearchAutocomplete* message)
getView()->setAutocompletionList(m_storageAccess->getAutocompletionMatches(message->query));
}
void SearchController::handleMessage(MessageSearchFullText* message)
{
LOG_INFO("fulltext string: \"" + message->searchTerm + "\"");
SearchMatch match("@" + message->searchTerm);
getView()->setMatches(std::vector<SearchMatch>(1, match));
}
void SearchController::handleMessage(MessageShowErrors* message)
{
SearchMatch match = SearchMatch::createCommand(SearchMatch::COMMAND_ERROR);
@@ -7,6 +7,7 @@
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageFind.h"
#include "utility/messaging/type/MessageSearchAutocomplete.h"
#include "utility/messaging/type/MessageSearchFullText.h"
#include "utility/messaging/type/MessageShowErrors.h"
class StorageAccess;
@@ -18,6 +19,7 @@ class SearchController
, public MessageListener<MessageActivateTokens>
, public MessageListener<MessageFind>
, public MessageListener<MessageSearchAutocomplete>
, public MessageListener<MessageSearchFullText>
, public MessageListener<MessageShowErrors>
{
public:
@@ -29,6 +31,7 @@ private:
virtual void handleMessage(MessageActivateTokens* message);
virtual void handleMessage(MessageFind* message);
virtual void handleMessage(MessageSearchAutocomplete* message);
virtual void handleMessage(MessageSearchFullText* message);
virtual void handleMessage(MessageShowErrors* message);
SearchView* getView();
@@ -219,6 +219,18 @@ void UndoRedoController::handleMessage(MessageSearch* message)
processCommand(command);
}
void UndoRedoController::handleMessage(MessageSearchFullText* message)
{
if (sameMessageTypeAsLast(message))// &&
//static_cast<MessageSearchFullText*>(lastMessage())->getMatchesAsString() == message->getMatchesAsString())
{
return;
}
Command command(std::make_shared<MessageSearchFullText>(*message), Command::ORDER_ACTIVATE);
processCommand(command);
}
void UndoRedoController::handleMessage(MessageShowScope* message)
{
Command command(std::make_shared<MessageShowScope>(*message), Command::ORDER_ADAPT);
@@ -20,6 +20,7 @@
#include "utility/messaging/type/MessageRefresh.h"
#include "utility/messaging/type/MessageScrollCode.h"
#include "utility/messaging/type/MessageSearch.h"
#include "utility/messaging/type/MessageSearchFullText.h"
#include "utility/messaging/type/MessageShowScope.h"
#include "utility/messaging/type/MessageUndo.h"
@@ -46,6 +47,7 @@ class UndoRedoController
, public MessageListener<MessageRefresh>
, public MessageListener<MessageScrollCode>
, public MessageListener<MessageSearch>
, public MessageListener<MessageSearchFullText>
, public MessageListener<MessageShowScope>
, public MessageListener<MessageUndo>
{
@@ -86,6 +88,7 @@ private:
virtual void handleMessage(MessageRefresh* message);
virtual void handleMessage(MessageScrollCode* message);
virtual void handleMessage(MessageSearch* message);
virtual void handleMessage(MessageSearchFullText* message);
virtual void handleMessage(MessageShowScope* message);
virtual void handleMessage(MessageUndo* message);