Files
modorganizer-bsapacker/src/ArchiveAutoService.cpp
T
Jeremy Rimpo 3525ebda98 Thread BSA writing
- Show progress dialog
- Prevent UI lockup

TODO: Prevent dialog from being closed by Esc
2023-10-11 01:16:49 -05:00

35 lines
1003 B
C++

#include <bsapacker/ArchiveAutoService.h>
#include <QProgressDialog>
#include <QtConcurrent>
#include <QLabel>
namespace BsaPacker
{
bool ArchiveAutoService::CreateBSA(libbsarch::bs_archive_auto* archive, const QString& archiveName, const bsa_archive_type_e type) const
{
try {
QProgressDialog savingDialog;
savingDialog.setWindowFlags(savingDialog.windowFlags() & ~Qt::WindowCloseButtonHint);
savingDialog.setWindowTitle(QObject::tr("Writing Archive"));
savingDialog.setCancelButton(0);
QLabel text;
text.setText(QObject::tr("Writing %1").arg(archiveName));
savingDialog.setLabel(&text);
savingDialog.setRange(0, 0);
savingDialog.show();
auto future = QtConcurrent::run([this, archive, archiveName]() {
archive->save_to_disk(archiveName.toStdString());
});
while (!future.isFinished())
{
QCoreApplication::processEvents();
}
savingDialog.hide();
}
catch (std::exception e) {
return false;
}
return true;
}
} // namespace BsaPacker