diff --git a/kerfuffle/addtoarchive.h b/kerfuffle/addtoarchive.h --- a/kerfuffle/addtoarchive.h +++ b/kerfuffle/addtoarchive.h @@ -80,6 +80,8 @@ void slotStartJob(); private: + void detectFileName(); + CompressionOptions m_options; CreateJob *m_createJob; QString m_filename; diff --git a/kerfuffle/addtoarchive.cpp b/kerfuffle/addtoarchive.cpp --- a/kerfuffle/addtoarchive.cpp +++ b/kerfuffle/addtoarchive.cpp @@ -92,10 +92,16 @@ { qCDebug(ARK) << "Opening add dialog"; + if (m_filename.isEmpty()) { + detectFileName(); + } + QPointer dialog = new Kerfuffle::CreateDialog( nullptr, // parent i18n("Compress to Archive"), // caption - QUrl::fromLocalFile(m_firstPath)); // startDir + QUrl::fromLocalFile(QFileInfo(m_filename).path())); // startDir + + dialog->setFileName(QFileInfo(m_filename).fileName()); bool ret = dialog.data()->exec(); @@ -164,20 +170,7 @@ return; } - const QString base = detectBaseName(m_entries); - - QString finalName = base + QLatin1Char( '.' ) + m_autoFilenameSuffix; - - //if file already exists, append a number to the base until it doesn't - //exist - int appendNumber = 0; - while (QFileInfo::exists(finalName)) { - ++appendNumber; - finalName = base + QLatin1Char( '_' ) + QString::number(appendNumber) + QLatin1Char( '.' ) + m_autoFilenameSuffix; - } - - qCDebug(ARK) << "Autoset filename to" << finalName; - m_filename = finalName; + detectFileName(); } if (m_changeToFirstPath) { @@ -208,6 +201,25 @@ m_createJob->start(); } +void AddToArchive::detectFileName() +{ + const QString base = detectBaseName(m_entries); + const QString suffix = !m_autoFilenameSuffix.isEmpty() ? QLatin1Char( '.' ) + m_autoFilenameSuffix : QString(); + + QString finalName = base + suffix; + + //if file already exists, append a number to the base until it doesn't + //exist + int appendNumber = 0; + while (QFileInfo::exists(finalName)) { + ++appendNumber; + finalName = base + QLatin1Char( '_' ) + QString::number(appendNumber) + suffix; + } + + qCDebug(ARK) << "Autoset filename to" << finalName; + m_filename = finalName; +} + void AddToArchive::slotFinished(KJob *job) { qCDebug(ARK) << "job finished"; diff --git a/kerfuffle/createdialog.h b/kerfuffle/createdialog.h --- a/kerfuffle/createdialog.h +++ b/kerfuffle/createdialog.h @@ -54,6 +54,7 @@ explicit CreateDialog(QWidget *parent, const QString &caption, const QUrl &startDir); + void setFileName(const QString &fileName); QUrl selectedUrl() const; QString password() const; QMimeType currentMimeType() const; diff --git a/kerfuffle/createdialog.cpp b/kerfuffle/createdialog.cpp --- a/kerfuffle/createdialog.cpp +++ b/kerfuffle/createdialog.cpp @@ -101,6 +101,18 @@ slotUpdateFilenameExtension(m_ui->mimeComboBox->currentIndex()); } +void CreateDialog::setFileName(const QString &fileName) +{ + m_ui->filenameLineEdit->setText(fileName); + + const QString detectedSuffix = QMimeDatabase().suffixForFileName(fileName); + if (currentMimeType().suffixes().contains(detectedSuffix)) { + m_ui->filenameLineEdit->setSelection(0, fileName.length() - detectedSuffix.length() - 1); + } else { + m_ui->filenameLineEdit->selectAll(); + } +} + void CreateDialog::slotFileNameEdited(const QString &fileName) { const QMimeType mimeFromFileName = QMimeDatabase().mimeTypeForFile(fileName, QMimeDatabase::MatchExtension);