diff --git a/kerfuffle/addtoarchive.h b/kerfuffle/addtoarchive.h --- a/kerfuffle/addtoarchive.h +++ b/kerfuffle/addtoarchive.h @@ -60,6 +60,7 @@ bool showAddDialog(); void setPreservePaths(bool value); void setChangeToFirstPath(bool value); + QString detectBaseName(QStringList path); public slots: bool addInput(const QUrl &url); diff --git a/kerfuffle/addtoarchive.cpp b/kerfuffle/addtoarchive.cpp --- a/kerfuffle/addtoarchive.cpp +++ b/kerfuffle/addtoarchive.cpp @@ -159,10 +159,7 @@ return; } - QString base = QFileInfo(m_inputs.first()).absoluteFilePath(); - if (base.endsWith(QLatin1Char('/'))) { - base.chop(1); - } + const QString base = detectBaseName(m_inputs); QString finalName = base + QLatin1Char( '.' ) + m_autoFilenameSuffix; @@ -240,4 +237,21 @@ emitResult(); } + +QString AddToArchive::detectBaseName(QStringList paths) +{ + QString base = QFileInfo(paths.first()).absoluteFilePath(); + if (paths.size() > 1) { + QDir dir = QFileInfo(paths.first()).dir(); + if (!dir.isRoot()) { + base = dir.absolutePath() + QLatin1Char('/') + dir.dirName(); + } + } + + if (base.endsWith(QLatin1Char('/'))) { + base.chop(1); + } + + return base; +} }