3#include <QtConcurrent/QtConcurrentRun>
15 (void)connect(&_queryWatcher, &QFutureWatcher<QueryResult>::finished,
this, &LogStoreQueryModel::_onQueryFinished);
18int LogStoreQueryModel::rowCount(
const QModelIndex& parent)
const
20 return parent.isValid() ? 0 : _results.size();
25 if (row < 0 || row >= _results.size()) {
28 return &_results.at(row);
31void LogStoreQueryModel::setSessionFilter(
const QString& session)
33 if (_sessionFilter != session) {
34 _sessionFilter = session;
40void LogStoreQueryModel::setFilterLevel(
int level)
42 if (_filterLevel != level) {
49void LogStoreQueryModel::setFilterCategory(
const QString& category)
51 if (_filterCategory != category) {
52 _filterCategory = category;
58void LogStoreQueryModel::setFilterText(
const QString& text)
60 if (_filterText != text) {
67void LogStoreQueryModel::refresh()
72void LogStoreQueryModel::loadMore()
74 if (_results.size() < _totalResults) {
79QStringList LogStoreQueryModel::availableSessions()
const
81 return _store ? _store->sessions() : QStringList();
84void LogStoreQueryModel::_executeQuery(
bool append)
86 if (!_store || !_store->isOpen()) {
87 if (!_results.isEmpty()) {
100 const quint64 gen = ++_queryGeneration;
102 LogStore::QueryParams params;
103 params.sessionId = _sessionFilter;
104 params.minLevel = _filterLevel;
105 params.category = _filterCategory;
106 params.textFilter = _filterText;
107 params.limit = kPageSize;
108 params.offset = append ? _results.size() : 0;
111 _queryWatcher.setFuture(QtConcurrent::run([store, params, append, gen]() -> QueryResult {
112 return {store->query(params), append, gen};
116void LogStoreQueryModel::_onQueryFinished()
118 const QueryResult result = _queryWatcher.result();
120 if (result.generation != _queryGeneration) {
124 const auto& page = result.page;
126 if (result.append && !page.isEmpty()) {
127 const int first = _results.size();
128 beginInsertRows(QModelIndex(), first, first + page.size() - 1);
129 _results.append(page);
131 }
else if (!result.append) {
137 if (page.size() < kPageSize) {
138 _totalResults = _results.size();
139 }
else if (!_sessionFilter.isEmpty()) {
140 _totalResults = _store->sessionEntryCount(_sessionFilter);
142 _totalResults = _results.size() + kPageSize;
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void filterCategoryChanged()
void availableSessionsChanged()
void sessionFilterChanged()
const LogEntry * entryAt(int row) const override
Return entry at visible row, or nullptr if out of range.
void filterLevelChanged()
void totalResultsChanged()