Progress dialog when searching VMs (also a divide-by-zero fix) (#2)
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
#include <QCryptographicHash>
|
#include <QCryptographicHash>
|
||||||
#include <QtNetwork>
|
#include <QtNetwork>
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
|
#include <QProgressDialog>
|
||||||
#include "qt_vmmanager_system.hpp"
|
#include "qt_vmmanager_system.hpp"
|
||||||
// #include "qt_vmmanager_details_section.hpp"
|
// #include "qt_vmmanager_details_section.hpp"
|
||||||
#include "qt_vmmanager_detailsection.hpp"
|
#include "qt_vmmanager_detailsection.hpp"
|
||||||
@@ -108,6 +109,15 @@ VMManagerSystem::~VMManagerSystem() {
|
|||||||
QVector<VMManagerSystem *>
|
QVector<VMManagerSystem *>
|
||||||
VMManagerSystem::scanForConfigs(const QString &searchPath)
|
VMManagerSystem::scanForConfigs(const QString &searchPath)
|
||||||
{
|
{
|
||||||
|
QProgressDialog progDialog;
|
||||||
|
unsigned int found = 0;
|
||||||
|
progDialog.setCancelButton(nullptr);
|
||||||
|
progDialog.setWindowTitle(tr("Searching for VMs..."));
|
||||||
|
progDialog.setMinimumDuration(0);
|
||||||
|
progDialog.setValue(0);
|
||||||
|
progDialog.setMinimum(0);
|
||||||
|
progDialog.setMaximum(0);
|
||||||
|
progDialog.setWindowFlags(progDialog.windowFlags() & ~Qt::WindowCloseButtonHint);
|
||||||
QElapsedTimer scanTimer;
|
QElapsedTimer scanTimer;
|
||||||
scanTimer.start();
|
scanTimer.start();
|
||||||
QVector<VMManagerSystem *> system_configs;
|
QVector<VMManagerSystem *> system_configs;
|
||||||
@@ -132,8 +142,9 @@ VMManagerSystem::scanForConfigs(const QString &searchPath)
|
|||||||
search_directory = searchPath.isEmpty()? vmm_path : searchPath;
|
search_directory = searchPath.isEmpty()? vmm_path : searchPath;
|
||||||
|
|
||||||
if(!QDir(search_directory).exists()) {
|
if(!QDir(search_directory).exists()) {
|
||||||
qWarning() << "Path" << search_directory << "does not exist. Cannot continue";
|
//qWarning() << "Path" << search_directory << "does not exist. Cannot continue";
|
||||||
return {};
|
QDir(search_directory).mkpath(".");
|
||||||
|
//return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QDirIterator dir_iterator(search_directory, filters, QDir::Files, QDirIterator::Subdirectories);
|
QDirIterator dir_iterator(search_directory, filters, QDir::Files, QDirIterator::Subdirectories);
|
||||||
@@ -143,6 +154,9 @@ VMManagerSystem::scanForConfigs(const QString &searchPath)
|
|||||||
QElapsedTimer timer;
|
QElapsedTimer timer;
|
||||||
timer.start();
|
timer.start();
|
||||||
while (dir_iterator.hasNext()) {
|
while (dir_iterator.hasNext()) {
|
||||||
|
found++;
|
||||||
|
progDialog.setLabelText(tr("Found %1").arg(QString::number(found)));
|
||||||
|
QApplication::processEvents();
|
||||||
QString filename = dir_iterator.next();
|
QString filename = dir_iterator.next();
|
||||||
matches.append(filename);
|
matches.append(filename);
|
||||||
}
|
}
|
||||||
@@ -154,12 +168,21 @@ VMManagerSystem::scanForConfigs(const QString &searchPath)
|
|||||||
// foreach (QFileInfo hit, matches) {
|
// foreach (QFileInfo hit, matches) {
|
||||||
// system_configs.append(new VMManagerSystem(hit));
|
// system_configs.append(new VMManagerSystem(hit));
|
||||||
// }
|
// }
|
||||||
|
progDialog.setMaximum(found);
|
||||||
|
progDialog.setValue(0);
|
||||||
|
unsigned int appended = 0;
|
||||||
for (const auto &filename : matches) {
|
for (const auto &filename : matches) {
|
||||||
system_configs.append(new VMManagerSystem(filename));
|
system_configs.append(new VMManagerSystem(filename));
|
||||||
|
appended++;
|
||||||
|
progDialog.setLabelText(system_configs.last()->displayName);
|
||||||
|
progDialog.setValue(appended);
|
||||||
|
QApplication::processEvents();
|
||||||
|
}
|
||||||
|
if (matches.size()) {
|
||||||
|
auto elapsed = timer.elapsed();
|
||||||
|
qDebug() << "Load loop took" << elapsed << "ms for" << matches.size() << "loads";
|
||||||
|
qDebug() << "Overall scan time was" << scanTimer.elapsed() << "ms, average" << elapsed / matches.size() << "ms / load";
|
||||||
}
|
}
|
||||||
auto elapsed = timer.elapsed();
|
|
||||||
qDebug() << "Load loop took" << elapsed << "ms for" << matches.size() << "loads";
|
|
||||||
qDebug() << "Overall scan time was" << scanTimer.elapsed() << "ms, average" << elapsed / matches.size() << "ms / load";
|
|
||||||
return system_configs;
|
return system_configs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user