diff --git a/kerfuffle/createdialog.cpp b/kerfuffle/createdialog.cpp --- a/kerfuffle/createdialog.cpp +++ b/kerfuffle/createdialog.cpp @@ -83,7 +83,6 @@ m_vlayout->addWidget(m_fileWidget); m_fileWidget->setMode(KFile::File | KFile::LocalOnly); - m_fileWidget->setConfirmOverwrite(true); m_fileWidget->setOperationMode(KFileWidget::Saving); m_fileWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding); m_fileWidget->setFilter(filterFromMimeTypes(Kerfuffle::supportedWriteMimeTypes())); diff --git a/part/part.h b/part/part.h --- a/part/part.h +++ b/part/part.h @@ -83,6 +83,12 @@ */ bool isLocalFileValid(); + /** + * Ask the user whether to overwrite @p targetFile, when creating a new archive with the same path. + * @return True if the file has been successfully removed upon user's will. False otherwise. + */ + bool confirmAndDelete(const QString& targetFile); + public slots: void extractSelectedFilesTo(const QString& localPath); diff --git a/part/part.cpp b/part/part.cpp --- a/part/part.cpp +++ b/part/part.cpp @@ -600,12 +600,14 @@ if (creatingNewArchive) { if (localFileInfo.exists()) { - int overwrite = KMessageBox::questionYesNo(widget(), xi18nc("@info", "The archive %1 already exists. Would you like to open it instead?", localFile), i18nc("@title:window", "File Exists"), KGuiItem(i18n("Open File")), KStandardGuiItem::cancel()); - - if (overwrite == KMessageBox::No) { + if (!confirmAndDelete(localFile)) { + displayMsgWidget(KMessageWidget::Error, xi18nc("@info", + "Could not overwrite %1. Check whether you have write permission.", + localFile)); return false; } } + displayMsgWidget(KMessageWidget::Information, xi18nc("@info", "The archive %1 will be created as soon as you add a file.", localFile)); } else { if (!localFileInfo.exists()) { @@ -622,6 +624,26 @@ return true; } +bool Part::confirmAndDelete(const QString &targetFile) +{ + QFileInfo targetInfo(targetFile); + const auto buttonCode = KMessageBox::warningYesNo(widget(), + xi18nc("@info", + "The archive %1 already exists. Do you wish to overwrite it?", + targetInfo.fileName()), + i18nc("@title:window", "File Exists"), + KGuiItem(i18nc("@action:button", "Overwrite")), + KStandardGuiItem::cancel()); + + if (buttonCode != KMessageBox::Yes || !targetInfo.isWritable()) { + return false; + } + + qCDebug(ARK) << "Removing file" << targetFile; + + return QFile(targetFile).remove(); +} + void Part::slotLoadingStarted() { }