diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,7 @@ endif(WIN32) option(SAMBA_INSTALL "Offer to install Samba for file sharing with PackageKit if it is not already installed, use -DSAMBA_INSTALL=off to disable, use -DSAMBA_PACKAGE_NAME= to set package name." ON) -set(SAMBA_PACKAGE_NAME \"samba\" CACHE STRING "Name of distribution package to install to get a functional samba stack.") +set(SAMBA_PACKAGE_NAME \"samba\" CACHE STRING "Single package or comma-separated list of packages needed for a functional Samba stack on this distribution.") if(SAMBA_INSTALL AND PackageKitQt5_FOUND) add_definitions(-DSAMBA_INSTALL) diff --git a/samba/filepropertiesplugin/sambausershareplugin.h b/samba/filepropertiesplugin/sambausershareplugin.h --- a/samba/filepropertiesplugin/sambausershareplugin.h +++ b/samba/filepropertiesplugin/sambausershareplugin.h @@ -53,9 +53,6 @@ void checkShareName(const QString &name); #ifdef SAMBA_INSTALL void installSamba(); - void packageInstall(PackageKit::Transaction::Info info, - const QString &packageId, - const QString &summary); void packageFinished(PackageKit::Transaction::Exit status, uint runtime); #endif // SAMBA_INSTALL diff --git a/samba/filepropertiesplugin/sambausershareplugin.cpp b/samba/filepropertiesplugin/sambausershareplugin.cpp --- a/samba/filepropertiesplugin/sambausershareplugin.cpp +++ b/samba/filepropertiesplugin/sambausershareplugin.cpp @@ -146,31 +146,31 @@ void SambaUserSharePlugin::installSamba() { QString package = QStringLiteral(SAMBA_PACKAGE_NAME); - PackageKit::Transaction *transaction = PackageKit::Daemon::resolve(package, - PackageKit::Transaction::FilterArch); - connect(transaction, - SIGNAL(package(PackageKit::Transaction::Info,QString,QString)), - SLOT(packageInstall(PackageKit::Transaction::Info,QString,QString))); + QStringList distroSambaPackages = package.split(QLatin1Char(',')); + + PackageKit::Transaction *transaction = PackageKit::Daemon::resolve(distroSambaPackages, PackageKit::Transaction::FilterArch); + + QSharedPointer pkgids(new QStringList); + + connect(transaction, &PackageKit::Transaction::package, + this, [pkgids] (PackageKit::Transaction::Info /*info*/, const QString& packageId, const QString& /*summary*/) { pkgids->append(packageId); }); + + connect(transaction, &PackageKit::Transaction::finished, + this, [this, pkgids] (PackageKit::Transaction::Exit exit) { + if (exit != PackageKit::Transaction::ExitSuccess) { return; } + auto installTransaction = PackageKit::Daemon::installPackages(*pkgids); + connect(installTransaction, &PackageKit::Transaction::finished, + this, &SambaUserSharePlugin::packageFinished); + } + ); m_sambaStatusMessage->setText(i18n("Installing Samba...")); m_installProgress->setMaximum(0); m_installProgress->setMinimum(0); m_installProgress->show(); m_installSambaButton->hide(); } -void SambaUserSharePlugin::packageInstall(PackageKit::Transaction::Info info, - const QString &packageId, - const QString &summary) -{ - Q_UNUSED(info); - Q_UNUSED(summary); - PackageKit::Transaction *installTransaction = PackageKit::Daemon::installPackage(packageId); - connect(installTransaction, - SIGNAL(finished(PackageKit::Transaction::Exit, uint)), - SLOT(packageFinished(PackageKit::Transaction::Exit, uint))); -} - void SambaUserSharePlugin::packageFinished(PackageKit::Transaction::Exit status, uint runtime) { Q_UNUSED(runtime);