Skip to content

Commit

Permalink
When pruning logged network requests, never prune expanded out nodes
Browse files Browse the repository at this point in the history
Otherwise it's rather annoying for users when the request they are
currently examining "magically" vanishes from their screen
  • Loading branch information
nyalldawson committed Mar 30, 2020
1 parent c0bd6aa commit 8d53f14
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 17 deletions.
20 changes: 10 additions & 10 deletions src/app/devtools/networklogger/qgsnetworklogger.cpp
Expand Up @@ -80,9 +80,6 @@ void QgsNetworkLogger::requestAboutToBeCreated( QgsNetworkRequestParameters para
mRequestGroups.insert( parameters.requestId(), group.get() );
mRootNode->addChild( std::move( group ) );
endInsertRows();

if ( childCount > ( MAX_LOGGED_REQUESTS * 1.2 ) ) // 20 % more as buffer
trimRequests( childCount - MAX_LOGGED_REQUESTS );
}

void QgsNetworkLogger::requestFinished( QgsNetworkReplyContent content )
Expand Down Expand Up @@ -193,17 +190,20 @@ QModelIndex QgsNetworkLogger::indexOfParentLayerTreeNode( QgsNetworkLoggerNode *
return createIndex( row, 0, parentNode );
}

void QgsNetworkLogger::trimRequests( int count )
void QgsNetworkLogger::removeRows( const QList<int> &rows )
{
for ( int i = 0; i < count; ++i )
QList< int > res = rows;
std::sort( res.begin(), res.end(), std::greater< int >() );

for ( int row : qgis::as_const( res ) )
{
int popId = data( index( i, 0, QModelIndex() ), QgsNetworkLoggerNode::RoleId ).toInt();
int popId = data( index( row, 0, QModelIndex() ), QgsNetworkLoggerNode::RoleId ).toInt();
mRequestGroups.remove( popId );
}

beginRemoveRows( QModelIndex(), 0, count - 1 );
mRootNode->trimRequests( count );
endRemoveRows();
beginRemoveRows( QModelIndex(), row, row );
mRootNode->removeRow( row );
endRemoveRows();
}
}

int QgsNetworkLogger::rowCount( const QModelIndex &parent ) const
Expand Down
10 changes: 8 additions & 2 deletions src/app/devtools/networklogger/qgsnetworklogger.h
Expand Up @@ -75,6 +75,14 @@ class QgsNetworkLogger : public QAbstractItemModel
*/
QList< QAction * > actions( const QModelIndex &index, QObject *parent );


/**
* Removes a list of request \a rows from the log.
*/
void removeRows( const QList< int > &rows );

static constexpr int MAX_LOGGED_REQUESTS = 1000;

public slots:

/**
Expand All @@ -99,7 +107,6 @@ class QgsNetworkLogger : public QAbstractItemModel
//! Returns index for a given node
QModelIndex node2index( QgsNetworkLoggerNode *node ) const;
QModelIndex indexOfParentLayerTreeNode( QgsNetworkLoggerNode *parentNode ) const;
void trimRequests( int count );

QgsNetworkAccessManager *mNam = nullptr;
bool mIsLogging = false;
Expand All @@ -108,7 +115,6 @@ class QgsNetworkLogger : public QAbstractItemModel

QHash< int, QgsNetworkLoggerRequestGroup * > mRequestGroups;

static constexpr int MAX_LOGGED_REQUESTS = 1000;
};

/**
Expand Down
5 changes: 2 additions & 3 deletions src/app/devtools/networklogger/qgsnetworkloggernode.cpp
Expand Up @@ -102,10 +102,9 @@ QVariant QgsNetworkLoggerRootNode::data( int ) const
return QVariant();
}

void QgsNetworkLoggerRootNode::trimRequests( int count )
void QgsNetworkLoggerRootNode::removeRow( int row )
{
for ( int i = 0; i < count; ++i )
mChildren.pop_front();
mChildren.erase( mChildren.begin() + row );
}


Expand Down
4 changes: 2 additions & 2 deletions src/app/devtools/networklogger/qgsnetworkloggernode.h
Expand Up @@ -176,9 +176,9 @@ class QgsNetworkLoggerRootNode final : public QgsNetworkLoggerGroup
QVariant data( int role = Qt::DisplayRole ) const override final;

/**
* Removes \a count requests from the start of the root group.
* Removes a \a row from the root group.
*/
void trimRequests( int count );
void removeRow( int row );
};


Expand Down
22 changes: 22 additions & 0 deletions src/app/devtools/networklogger/qgsnetworkloggerpanelwidget.cpp
Expand Up @@ -50,6 +50,28 @@ QgsNetworkLoggerTreeView::QgsNetworkLoggerTreeView( QgsNetworkLogger *logger, QW

connect( mLogger, &QAbstractItemModel::rowsInserted, this, [ = ]
{
if ( mLogger->rowCount() > ( QgsNetworkLogger::MAX_LOGGED_REQUESTS * 1.2 ) ) // 20 % more as buffer
{
// never trim expanded nodes
const int toTrim = mLogger->rowCount() - QgsNetworkLogger::MAX_LOGGED_REQUESTS;
int trimmed = 0;
QList< int > rowsToTrim;
rowsToTrim.reserve( toTrim );
for ( int i = 0; i < mLogger->rowCount(); ++i )
{
const QModelIndex proxyIndex = mProxyModel->mapFromSource( mLogger->index( i, 0 ) );
if ( !proxyIndex.isValid() || !isExpanded( proxyIndex ) )
{
rowsToTrim << i;
trimmed++;
}
if ( trimmed == toTrim )
break;
}

mLogger->removeRows( rowsToTrim );
}

if ( mAutoScroll )
scrollToBottom();
} );
Expand Down

0 comments on commit 8d53f14

Please sign in to comment.