1 /*
2 SPDX-License-Identifier: GPL-2.0-or-later
3 SPDX-FileCopyrightText: 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
4 SPDX-FileCopyrightText: 2011 Rodrigo Belem <rclbelem@gmail.com>
5 SPDX-FileCopyrightText: 2019 Nate Graham <nate@kde.org>
6 SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org>
7 */
8
9 #include "sambainstaller.h"
10
11 #include <QDebug>
12 #include <QFile>
13
14 #include "sambausershareplugin.h"
15
install()16 void SambaInstaller::install()
17 {
18 setInstalling(true);
19 const QString package = QStringLiteral(SAMBA_PACKAGE_NAME);
20 QStringList distroSambaPackages = package.split(QLatin1Char(','));
21
22 PackageKit::Transaction *resolveTransaction = PackageKit::Daemon::resolve(distroSambaPackages,
23 PackageKit::Transaction::FilterArch);
24
25 QSharedPointer<QStringList> pkgids(new QStringList);
26
27 connect(resolveTransaction, &PackageKit::Transaction::package,
28 this, [pkgids](PackageKit::Transaction::Info /*info*/, const QString &packageId) {
29 pkgids->append(packageId);
30 });
31
32 connect(resolveTransaction, &PackageKit::Transaction::finished,
33 this, [this, pkgids](PackageKit::Transaction::Exit exit) {
34 if (exit != PackageKit::Transaction::ExitSuccess) {
35 setFailed(true);
36 return;
37 }
38 auto installTransaction = PackageKit::Daemon::installPackages(*pkgids);
39 connect(installTransaction, &PackageKit::Transaction::finished,
40 this, &SambaInstaller::packageFinished);
41 });
42 }
43
isInstalling() const44 bool SambaInstaller::isInstalling() const
45 {
46 return m_installing;
47 }
48
hasFailed() const49 bool SambaInstaller::hasFailed() const
50 {
51 return m_failed;
52 }
53
isInstalled()54 bool SambaInstaller::isInstalled()
55 {
56 return SambaUserSharePlugin::isSambaInstalled();
57 }
58
packageFinished(PackageKit::Transaction::Exit status)59 void SambaInstaller::packageFinished(PackageKit::Transaction::Exit status)
60 {
61 setInstalling(false);
62 switch (status) {
63 case PackageKit::Transaction::ExitSuccess:
64 Q_EMIT installedChanged();
65 return;
66 default:
67 break; // failure. technically not true though, not all !success are failures
68 }
69 setFailed(true);
70 }
71
setFailed(bool failed)72 void SambaInstaller::setFailed(bool failed)
73 {
74 if (m_failed == failed) {
75 return;
76 }
77
78 if (m_installing && failed) {
79 setInstalling(false);
80 }
81
82 m_failed = true;
83 Q_EMIT failedChanged();
84 }
85
setInstalling(bool installing)86 void SambaInstaller::setInstalling(bool installing)
87 {
88 if (m_installing == installing) {
89 return;
90 }
91
92 m_installing = installing;
93 if (m_installing) {
94 m_failed = false;
95 Q_EMIT failedChanged();
96 }
97 Q_EMIT installingChanged();
98 }
99
100