[partition] Reduce refreshes when reverting

This commit is contained in:
Adriaan de Groot 2019-02-11 19:03:09 -05:00
parent b9fa0398c0
commit dff5afe227
2 changed files with 11 additions and 5 deletions

View File

@ -880,7 +880,7 @@ PartitionCoreModule::revertAllDevices()
} }
} }
revertDevice( ( *it )->device.data() ); revertDevice( ( *it )->device.data(), false );
++it; ++it;
} }
@ -889,7 +889,7 @@ PartitionCoreModule::revertAllDevices()
void void
PartitionCoreModule::revertDevice( Device* dev ) PartitionCoreModule::revertDevice( Device* dev, bool individualRevert )
{ {
QMutexLocker locker( &m_revertMutex ); QMutexLocker locker( &m_revertMutex );
DeviceInfo* devInfo = infoForDevice( dev ); DeviceInfo* devInfo = infoForDevice( dev );
@ -915,7 +915,8 @@ PartitionCoreModule::revertDevice( Device* dev )
m_bootLoaderModel->init( devices ); m_bootLoaderModel->init( devices );
refreshAfterModelChange(); if ( individualRevert )
refreshAfterModelChange();
emit deviceReverted( newDev ); emit deviceReverted( newDev );
} }
@ -931,7 +932,7 @@ PartitionCoreModule::asyncRevertDevice( Device* dev, std::function< void() > cal
watcher->deleteLater(); watcher->deleteLater();
} ); } );
QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev ); QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev, true );
watcher->setFuture( future ); watcher->setFuture( future );
} }

View File

@ -191,7 +191,12 @@ public:
void revert(); // full revert, thread safe, calls doInit void revert(); // full revert, thread safe, calls doInit
void revertAllDevices(); // convenience function, calls revertDevice void revertAllDevices(); // convenience function, calls revertDevice
void revertDevice( Device* dev ); // rescans a single Device and updates DeviceInfo /** @brief rescans a single Device and updates DeviceInfo
*
* When @p individualRevert is true, calls refreshAfterModelChange(),
* used to reduce number of refreshes when calling revertAllDevices().
*/
void revertDevice( Device* dev, bool individualRevert=true );
void asyncRevertDevice( Device* dev, std::function< void() > callback ); //like revertDevice, but asynchronous void asyncRevertDevice( Device* dev, std::function< void() > callback ); //like revertDevice, but asynchronous
void clearJobs(); // only clear jobs, the Device* states are preserved void clearJobs(); // only clear jobs, the Device* states are preserved