check for file open error when writing image

improve loadVariant debug msg's
don't modify variant status in LinuxDrive::cancel()
Variant::resetStatus() check for existance of file instead of filename
reset variant status both when download dialog opens and closes
This commit is contained in:
Dmitry Degtyarev 2020-11-05 13:02:30 +04:00
parent a38cd42eb2
commit 8b74d7af10
6 changed files with 30 additions and 28 deletions

View File

@ -43,12 +43,13 @@ Dialog {
}
onVisibleChanged: {
// When dialog is closed via Cancel button or Close button, cancel current download or write
if (!visible) {
if (drives.selected)
drives.selected.cancel()
releases.selected.variant.cancelDownload()
releases.selected.variant.resetStatus()
}
releases.selected.variant.resetStatus()
reset()
}

View File

@ -228,16 +228,6 @@ void LinuxDrive::cancel() {
static bool beingCancelled = false;
if (m_process != nullptr && !beingCancelled) {
beingCancelled = true;
if (m_variant) {
if (m_variant->status() == Variant::WRITE_VERIFYING) {
m_variant->setStatus(Variant::WRITING_FINISHED);
}
else if (m_variant->status() != Variant::DOWNLOADING &&
m_variant->status() != Variant::DOWNLOAD_VERIFYING) {
m_variant->setErrorString(tr("Stopped before writing has finished."));
m_variant->setStatus(Variant::WRITING_FAILED);
}
}
m_process->kill();
m_process->deleteLater();
m_process = nullptr;

View File

@ -133,6 +133,8 @@ void ReleaseManager::downloadMetadata() {
return out;
}();
qDebug() << "Loading releases";
loadReleases(sectionsFiles);
const QList<QString> imagesFiles =
@ -145,6 +147,8 @@ void ReleaseManager::downloadMetadata() {
return out;
}();
qDebug() << "Loading variants";
for (auto imagesFile : imagesFiles) {
loadVariants(imagesFile);
}
@ -203,13 +207,11 @@ void ReleaseManager::loadVariants(const QString &variantsFile) {
if (url.isEmpty()) {
qWarning() << "Variant has no url";
continue;
} else {
qDebug() << "Url:" << url;
}
const QString releaseName = yml_get(variantData, "solution");
if (releaseName.isEmpty()) {
qWarning() << "Variant has no releaseName";
qDebug() << "Variant has no releaseName" << url;
continue;
}
@ -223,7 +225,7 @@ void ReleaseManager::loadVariants(const QString &variantsFile) {
}
}();
if (arch == Architecture_UNKNOWN) {
qWarning() << "Variant has unknown architecture" << arch_string;
qDebug() << "Variant has unknown architecture" << arch_string << url;
continue;
}
@ -240,7 +242,7 @@ void ReleaseManager::loadVariants(const QString &variantsFile) {
const FileType fileType = file_type_from_filename(url);
if (fileType == FileType_UNKNOWN) {
qWarning() << "Variant has unknown file type";
qDebug() << "Variant has unknown file type" << url;
continue;
}
@ -254,7 +256,7 @@ void ReleaseManager::loadVariants(const QString &variantsFile) {
}
}();
qDebug() << QUrl(url).fileName() << releaseName << architecture_name(arch) << board << file_type_name(fileType) << (live ? "LIVE" : "");
// qDebug() << QUrl(url).fileName() << releaseName << architecture_name(arch) << board << file_type_name(fileType) << (live ? "LIVE" : "");
// Find a release that has the same name as this variant
Release *release =
@ -273,7 +275,7 @@ void ReleaseManager::loadVariants(const QString &variantsFile) {
Variant *variant = new Variant(url, arch, fileType, board, live, this);
release->addVariant(variant);
} else {
qWarning() << "Failed to find a release for this variant!" << url;
qDebug() << "Failed to find a release for this variant!" << url;
}
}
}
@ -333,8 +335,6 @@ QStringList ReleaseManager::fileTypeFilters() const {
}
void ReleaseManager::loadReleases(const QList<QString> &sectionsFiles) {
qDebug() << "Loading releases";
for (auto sectionFile : sectionsFiles) {
const YAML::Node section = YAML::Load(sectionFile.toStdString());

View File

@ -212,7 +212,7 @@ void Variant::cancelDownload() {
}
void Variant::resetStatus() {
if (!fileName().isEmpty()) {
if (QFile::exists(filePath())) {
setStatus(READY_FOR_WRITING);
} else {
setStatus(PREPARING);

View File

@ -115,7 +115,13 @@ bool WriteJob::writeCompressed(int fd) {
std::size_t bufferSize = std::get<2>(outBufferOwner);
QFile file(what);
file.open(QIODevice::ReadOnly);
const bool open_success = file.open(QIODevice::ReadOnly);
if (!open_success) {
err << tr("Source image is not readable") << what;
err.flush();
qApp->exit(2);
return false;
}
ret = lzma_stream_decoder(&strm, MEDIAWRITER_LZMA_LIMIT, LZMA_CONCATENATED);
if (ret != LZMA_OK) {
@ -186,9 +192,8 @@ bool WriteJob::writeCompressed(int fd) {
bool WriteJob::writePlain(int fd) {
QFile inFile(what);
inFile.open(QIODevice::ReadOnly);
if (!inFile.isReadable()) {
const bool open_success = inFile.open(QIODevice::ReadOnly);
if (!open_success) {
err << tr("Source image is not readable") << what;
err.flush();
qApp->exit(2);

View File

@ -230,7 +230,13 @@ bool WriteJob::writeCompressed(HANDLE drive) {
uint8_t *outBuffer = new uint8_t[BLOCK_SIZE];
QFile file(what);
file.open(QIODevice::ReadOnly);
const bool open_success = file.open(QIODevice::ReadOnly);
if (!open_success) {
err << tr("Source image is not readable");
err.flush();
qApp->exit(1);
return false;
}
ret = lzma_stream_decoder(&strm, MEDIAWRITER_LZMA_LIMIT, LZMA_CONCATENATED);
if (ret != LZMA_OK) {
@ -322,8 +328,8 @@ bool WriteJob::writePlain(HANDLE drive) {
uint64_t cnt = 0;
QByteArray buffer;
QFile isoFile(what);
isoFile.open(QIODevice::ReadOnly);
if (!isoFile.isOpen()) {
const bool open_success = isoFile.open(QIODevice::ReadOnly);
if (!open_success) {
err << tr("Source image is not readable");
err.flush();
qApp->exit(1);