registry: Create page URL on demand

This gives a significant performance boost for large docsets.
This commit is contained in:
Oleg Shparber
2017-04-22 00:05:46 -04:00
parent cec7ba4f14
commit 6cff27b2d5
4 changed files with 17 additions and 9 deletions
+9 -6
View File
@@ -288,9 +288,8 @@ QList<SearchResult> Docset::search(const QString &query, const CancellationToken
while (m_db->next() && !token.isCanceled()) {
results.append({m_db->value(0).toString(),
parseSymbolType(m_db->value(1).toString()),
const_cast<Docset *>(this),
createPageUrl(m_db->value(2).toString(), m_db->value(3).toString()),
m_db->value(4).toInt()});
m_db->value(2).toString(), m_db->value(3).toString(),
const_cast<Docset *>(this), m_db->value(4).toInt()});
}
return results;
@@ -328,9 +327,8 @@ QList<SearchResult> Docset::relatedLinks(const QUrl &url) const
while (m_db->next()) {
results.append({m_db->value(0).toString(),
parseSymbolType(m_db->value(1).toString()),
const_cast<Docset *>(this),
createPageUrl(m_db->value(2).toString(), m_db->value(3).toString()),
0});
m_db->value(2).toString(), m_db->value(3).toString(),
const_cast<Docset *>(this), 0});
}
if (results.size() == 1)
@@ -339,6 +337,11 @@ QList<SearchResult> Docset::relatedLinks(const QUrl &url) const
return results;
}
QUrl Docset::searchResultUrl(const SearchResult &result) const
{
return createPageUrl(result.urlPath, result.urlFragment);
}
void Docset::loadMetadata()
{
const QDir dir(m_path);
+4
View File
@@ -69,6 +69,9 @@ public:
QList<SearchResult> search(const QString &query, const CancellationToken &token) const;
QList<SearchResult> relatedLinks(const QUrl &url) const;
// FIXME: This a temporary solution to create URL on demand.
QUrl searchResultUrl(const SearchResult &result) const;
// FIXME: This is an ugly workaround before we have a proper docset sources implementation
bool hasUpdate = false;
@@ -84,6 +87,7 @@ private:
void loadSymbols(const QString &symbolType) const;
void loadSymbols(const QString &symbolType, const QString &symbolString) const;
void createIndex();
void createView();
QUrl createPageUrl(const QString &path, const QString &fragment = QString()) const;
static QString parseSymbolType(const QString &str);
+1 -1
View File
@@ -62,7 +62,7 @@ QVariant SearchModel::data(const QModelIndex &index, int role) const
return item->docset->icon();
case ItemDataRole::UrlRole:
return item->url;
return item->docset->searchResultUrl(*item);
default:
return QVariant();
+3 -2
View File
@@ -37,9 +37,10 @@ struct SearchResult
QString name;
QString type;
Docset *docset;
QString urlPath;
QString urlFragment;
QUrl url;
Docset *docset;
int score;