mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-18 16:05:21 +01:00
Image customization: search all mountpoints for config.txt
Search all mountpoints associated with the target drive for FAT partition that has config.txt Ref: #171
This commit is contained in:
parent
2bbb8bfba7
commit
f682c3a7dd
1 changed files with 29 additions and 11 deletions
|
@ -807,6 +807,7 @@ void DownloadThread::setImageCustomization(const QByteArray &config, const QByte
|
||||||
bool DownloadThread::_customizeImage()
|
bool DownloadThread::_customizeImage()
|
||||||
{
|
{
|
||||||
QString folder;
|
QString folder;
|
||||||
|
std::vector<std::string> mountpoints;
|
||||||
QByteArray devlower = _filename.toLower();
|
QByteArray devlower = _filename.toLower();
|
||||||
|
|
||||||
emit preparationStatusUpdate(tr("Waiting for FAT partition to be mounted"));
|
emit preparationStatusUpdate(tr("Waiting for FAT partition to be mounted"));
|
||||||
|
@ -832,14 +833,14 @@ bool DownloadThread::_customizeImage()
|
||||||
{
|
{
|
||||||
if (QByteArray::fromStdString(i.device).toLower() == devlower && i.mountpoints.size())
|
if (QByteArray::fromStdString(i.device).toLower() == devlower && i.mountpoints.size())
|
||||||
{
|
{
|
||||||
folder = QByteArray::fromStdString(i.mountpoints.front());
|
mountpoints = i.mountpoints;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
if (folder.isEmpty() && !_nr.isEmpty()) {
|
if (mountpoints.empty() && !_nr.isEmpty()) {
|
||||||
qDebug() << "Windows did not assign drive letter automatically. Ask diskpart to do so manually.";
|
qDebug() << "Windows did not assign drive letter automatically. Ask diskpart to do so manually.";
|
||||||
proc.start("diskpart");
|
proc.start("diskpart");
|
||||||
proc.waitForStarted();
|
proc.waitForStarted();
|
||||||
|
@ -855,7 +856,7 @@ bool DownloadThread::_customizeImage()
|
||||||
{
|
{
|
||||||
if (QByteArray::fromStdString(i.device).toLower() == devlower && i.mountpoints.size())
|
if (QByteArray::fromStdString(i.device).toLower() == devlower && i.mountpoints.size())
|
||||||
{
|
{
|
||||||
folder = QByteArray::fromStdString(i.mountpoints.front());
|
mountpoints = i.mountpoints;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -865,7 +866,7 @@ bool DownloadThread::_customizeImage()
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
bool manualmount = false;
|
bool manualmount = false;
|
||||||
|
|
||||||
if (folder.isEmpty())
|
if (mountpoints.empty())
|
||||||
{
|
{
|
||||||
/* Manually mount folder */
|
/* Manually mount folder */
|
||||||
manualmount = true;
|
manualmount = true;
|
||||||
|
@ -880,7 +881,7 @@ bool DownloadThread::_customizeImage()
|
||||||
/* Not running as root, try to outsource mounting to udisks2 */
|
/* Not running as root, try to outsource mounting to udisks2 */
|
||||||
#ifndef QT_NO_DBUS
|
#ifndef QT_NO_DBUS
|
||||||
UDisks2Api udisks2;
|
UDisks2Api udisks2;
|
||||||
folder = udisks2.mountDevice(fatpartition);
|
mountpoints.push_back(udisks2.mountDevice(fatpartition).toStdString());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -888,8 +889,8 @@ bool DownloadThread::_customizeImage()
|
||||||
/* Running as root, attempt running mount directly */
|
/* Running as root, attempt running mount directly */
|
||||||
QTemporaryDir td;
|
QTemporaryDir td;
|
||||||
QStringList args;
|
QStringList args;
|
||||||
folder = td.path();
|
mountpoints.push_back(td.path().toStdString());
|
||||||
args << "-t" << "vfat" << fatpartition << folder;
|
args << "-t" << "vfat" << fatpartition << td.path();
|
||||||
|
|
||||||
if (QProcess::execute("mount", args) != 0)
|
if (QProcess::execute("mount", args) != 0)
|
||||||
{
|
{
|
||||||
|
@ -901,7 +902,7 @@ bool DownloadThread::_customizeImage()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (folder.isEmpty())
|
if (mountpoints.empty())
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
qDebug() << "drive info. searching for:" << devlower;
|
qDebug() << "drive info. searching for:" << devlower;
|
||||||
|
@ -921,15 +922,32 @@ bool DownloadThread::_customizeImage()
|
||||||
|
|
||||||
/* Some operating system take longer to complete mounting FAT32
|
/* Some operating system take longer to complete mounting FAT32
|
||||||
wait up to 3 seconds for config.txt file to appear */
|
wait up to 3 seconds for config.txt file to appear */
|
||||||
QString configFilename = folder+"/config.txt";
|
QString configFilename;
|
||||||
|
bool foundFile = false;
|
||||||
|
|
||||||
for (int tries = 0; tries < 3; tries++)
|
for (int tries = 0; tries < 3; tries++)
|
||||||
{
|
{
|
||||||
|
/* Search all mountpoints, as on some systems FAT partition
|
||||||
|
may not be first volume */
|
||||||
|
for (auto mp : mountpoints)
|
||||||
|
{
|
||||||
|
folder = QString::fromStdString(mp);
|
||||||
|
if (!folder.isEmpty() && folder.back() == '\\')
|
||||||
|
folder.chop(1);
|
||||||
|
configFilename = folder+"/config.txt";
|
||||||
|
|
||||||
if (QFile::exists(configFilename))
|
if (QFile::exists(configFilename))
|
||||||
|
{
|
||||||
|
foundFile = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (foundFile)
|
||||||
break;
|
break;
|
||||||
QThread::sleep(1);
|
QThread::sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!QFile::exists(configFilename))
|
if (!foundFile)
|
||||||
{
|
{
|
||||||
emit error(tr("Unable to customize. File '%1' does not exist.").arg(configFilename));
|
emit error(tr("Unable to customize. File '%1' does not exist.").arg(configFilename));
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue