fix: handle KF6 Parts temporary file failures

This commit is contained in:
2026-05-07 08:16:32 +01:00
parent d848d5323a
commit 923091b4ab
3 changed files with 30 additions and 7 deletions
@@ -178,7 +178,11 @@ void ReadOnlyPartPrivate::openRemoteFile()
}
QTemporaryFile tempFile(QDir::tempPath() + QLatin1Char('/') + m_metaData.pluginId() + QLatin1String("XXXXXX") + extension);
tempFile.setAutoRemove(false);
tempFile.open();
if (!tempFile.open()) {
qCWarning(KPARTSLOG) << "Could not create temporary file for remote open:" << tempFile.errorString();
Q_EMIT q->canceled(QString());
return;
}
m_file = tempFile.fileName();
QUrl destURL = QUrl::fromLocalFile(m_file);
@@ -148,7 +148,10 @@ bool ReadWritePart::save()
d->m_saveOk = false;
if (d->m_file.isEmpty()) { // document was created empty
d->prepareSaving();
if (!d->prepareSaving()) {
Q_EMIT canceled(QString());
return false;
}
}
if (saveFile()) {
return saveToUrl();
@@ -170,7 +173,14 @@ bool ReadWritePart::saveAs(const QUrl &url)
d->m_originalURL = d->m_url;
d->m_originalFilePath = d->m_file;
d->m_url = url; // Store where to upload in saveToURL
d->prepareSaving();
if (!d->prepareSaving()) {
d->m_url = d->m_originalURL;
d->m_file = d->m_originalFilePath;
d->m_duringSaveAs = false;
d->m_originalURL = QUrl();
d->m_originalFilePath.clear();
return false;
}
bool result = save(); // Save local file and upload local file
if (result) {
if (d->m_originalURL != d->m_url) {
@@ -190,7 +200,7 @@ bool ReadWritePart::saveAs(const QUrl &url)
}
// Set m_file correctly for m_url
void ReadWritePartPrivate::prepareSaving()
bool ReadWritePartPrivate::prepareSaving()
{
// Local file
if (m_url.isLocalFile()) {
@@ -200,17 +210,22 @@ void ReadWritePartPrivate::prepareSaving()
m_bTemp = false;
}
m_file = m_url.toLocalFile();
return true;
} else {
// Remote file
// We haven't saved yet, or we did but locally - provide a temp file
if (m_file.isEmpty() || !m_bTemp) {
QTemporaryFile tempFile;
tempFile.setAutoRemove(false);
tempFile.open();
if (!tempFile.open()) {
qCWarning(KPARTSLOG) << "Could not create temporary file for remote save:" << tempFile.errorString();
return false;
}
m_file = tempFile.fileName();
m_bTemp = true;
}
// otherwise, we already had a temp file
return true;
}
}
@@ -244,7 +259,11 @@ bool ReadWritePart::saveToUrl()
d->m_uploadJob = nullptr;
}
QTemporaryFile *tempFile = new QTemporaryFile();
tempFile->open();
if (!tempFile->open()) {
qCWarning(KPARTSLOG) << "Could not create upload temporary file:" << tempFile->errorString();
delete tempFile;
return false;
}
QString uploadFile = tempFile->fileName();
delete tempFile;
QUrl uploadUrl = QUrl::fromLocalFile(uploadFile);
@@ -31,7 +31,7 @@ public:
void slotUploadFinished(KJob *job);
void prepareSaving();
bool prepareSaving();
bool m_bModified;
bool m_bReadWrite;