Progress dialog when searching VMs (also a divide-by-zero fix) (#2)

This commit is contained in:
Cacodemon345
2025-05-31 01:21:17 +06:00
committed by GitHub
parent e53715bdc5
commit cdf742fac3

View File

@@ -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;
} }