File smolt.diff of Package kpackagekit

iff -rupN kpackagekit-0.6.2/Updater/CMakeLists.txt kpackagekit-0.6.2/Updater/CMakeLists.txt
--- kpackagekit-0.6.2/Updater/CMakeLists.txt	2010-10-06 01:39:37.000000000 +0200
+++ kpackagekit-0.6.2/Updater/CMakeLists.txt	2010-12-07 14:08:32.392749646 +0100
@@ -1,6 +1,7 @@
 set(kpk_update_SRCS
     KpkUpdateDetails.cpp
     KpkDistroUpgrade.cpp
+    KpkSmolt.cpp
     KpkCheckableHeader.cpp
     UpdateKCM.cpp
 )
diff -rupN kpackagekit-0.6.2/Updater/KpkSmolt.cpp kpackagekit-0.6.2/Updater/KpkSmolt.cpp
--- kpackagekit-0.6.2/Updater/KpkSmolt.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kpackagekit-0.6.2/Updater/KpkSmolt.cpp	2010-12-07 17:17:58.220827849 +0100
@@ -0,0 +1,91 @@
+#include "KpkSmolt.h"
+
+#include <KpkStrings.h>
+#include <KpkIcons.h>
+
+#include <KLocale>
+#include <KMessageBox>
+#include <KColorScheme>
+
+#include <KDebug>
+
+KpkSmolt::KpkSmolt(QWidget *parent)
+ : KTitleWidget(parent)
+{
+    setText(i18n("Send your hardware profile"));
+//    setPixmap(KpkIcons::getIcon("distro-upgrade"));
+    setWidget(m_smoltUL = new KUrlLabel(this));
+
+    m_smoltUL->setText(i18n("Collect data"));
+    m_smoltUL->setUrl(i18n("Collect data"));
+    m_smoltUL->setToolTip(i18n("Click to collect data"));
+
+    setComment("Driver development is prioritized based on hardware popularity. Please send your system profile to influence this work.");
+
+    connect(m_smoltUL, SIGNAL(leftClickedUrl()),
+            SLOT(startSmolt()));
+}
+
+void KpkSmolt::startSmolt()
+{
+    m_smoltProcess = new QProcess;
+    connect(m_smoltProcess, SIGNAL(error (QProcess::ProcessError)),
+            this, SLOT(smoltError(QProcess::ProcessError)));
+    connect(m_smoltProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
+            this, SLOT(smoltFinished(int, QProcess::ExitStatus)));
+
+    m_smoltDialog = new KProgressDialog(this);
+    m_smoltDialog->setLabelText("Waiting for smolt to complete");
+    m_smoltDialog->showCancelButton(false);
+    m_smoltDialog->setModal(true);
+    m_smoltDialog->progressBar()->setMaximum(0); //Makes it a busy indicator
+    m_smoltDialog->progressBar()->setMinimum(0);
+    m_smoltDialog->show();
+    QStringList env = QProcess::systemEnvironment();
+    env << "DESKTOP=kde";
+    m_smoltProcess->setEnvironment(env);
+    m_smoltProcess->start("/usr/bin/smoltGui");
+
+    KConfig config("KPackageKit");
+    KConfigGroup viewGroup(&config, "smolt");
+    viewGroup.writeEntry("ShowSmoltNotification", false);
+
+
+}
+
+void KpkSmolt::smoltFinished(int exitCode, QProcess::ExitStatus exitStatus)
+{
+    Q_UNUSED(exitCode);
+    Q_UNUSED(exitStatus);
+    m_smoltProcess->deleteLater();
+    m_smoltProcess = 0;
+    m_smoltDialog->close();
+    m_smoltDialog->deleteLater();
+    m_smoltDialog = 0;
+}
+
+void KpkSmolt::smoltError(QProcess::ProcessError error)
+{
+    QString text;
+    switch(error) {
+        case QProcess::FailedToStart:
+            KMessageBox::sorry(this,
+                    i18n("The smolt process failed to start."));
+            break;
+        case QProcess::Crashed:
+            KMessageBox::sorry(this,
+                    i18n("The smolt process crashed some time after starting successfully."));
+            break;
+        default:
+            KMessageBox::sorry(this,
+                    i18n("The smolt process failed with an unknown error."));
+            break;
+    }
+}
+
+KpkSmolt::~KpkSmolt()
+{
+    kDebug() << "~KpkSmolt()";
+}
+
+#include "KpkSmolt.moc"
diff -rupN kpackagekit-0.6.2/Updater/KpkSmolt.h kpackagekit-0.6.2/Updater/KpkSmolt.h
--- kpackagekit-0.6.2/Updater/KpkSmolt.h	1970-01-01 01:00:00.000000000 +0100
+++ kpackagekit-0.6.2/Updater/KpkSmolt.h	2010-12-07 17:32:58.951283331 +0100
@@ -0,0 +1,30 @@
+#ifndef KPK_SMOLT_H
+#define KPK_SMOLT_H
+
+#include <QPackageKit>
+
+#include <KTitleWidget>
+#include <KUrlLabel>
+#include <KProgressDialog>
+
+using namespace PackageKit;
+
+class KpkSmolt : public KTitleWidget
+{
+Q_OBJECT
+public:
+    KpkSmolt(QWidget *parent = 0);
+    ~KpkSmolt();
+
+private slots:
+    void startSmolt();
+    void smoltError(QProcess::ProcessError);
+    void smoltFinished(int exitCode, QProcess::ExitStatus exitStatus);
+
+private:
+    KUrlLabel *m_smoltUL;
+    QProcess *m_smoltProcess;
+    KProgressDialog *m_smoltDialog;
+};
+
+#endif
diff -rupN kpackagekit-0.6.2/Updater/UpdateKCM.cpp kpackagekit-0.6.2/Updater/UpdateKCM.cpp
--- kpackagekit-0.6.2/Updater/UpdateKCM.cpp	2010-10-06 01:39:37.000000000 +0200
+++ kpackagekit-0.6.2/Updater/UpdateKCM.cpp	2010-12-07 17:28:15.190025226 +0100
@@ -22,6 +22,7 @@
 
 #include "KpkUpdateDetails.h"
 #include "KpkDistroUpgrade.h"
+#include "KpkSmolt.h"
 #include "KpkMacros.h"
 #include "KpkCheckableHeader.h"
 
@@ -130,6 +131,7 @@ UpdateKCM::UpdateKCM(QWidget *&parent, c
     checkUpdatesPB->setIcon(KIcon("view-refresh"));
     connect(checkUpdatesPB, SIGNAL(clicked(bool)),
             this, SLOT(refreshCache()));
+
 }
 
 UpdateKCM::~UpdateKCM()
@@ -169,6 +171,50 @@ void UpdateKCM::distroUpgrade(PackageKit
     line->show();
 }
 
+
+// check if smolt notification should be shown
+void UpdateKCM::checkSmolt()
+{
+
+    KConfig config("KPackageKit");
+    KConfigGroup smoltGroup(&config, "smolt");
+
+    if (! smoltGroup.readEntry("ShowSmoltNotification", true) )
+        return;
+
+    // run on opensuse only (not on sled)
+    QFile file( "/usr/share/applications/YaST2/suse_register.desktop" );
+    if (! file.exists() )
+        return;
+
+    // check if smolt is installed
+    QFile execfile( "/usr/bin/smoltGui" );
+    if (! execfile.exists() )
+        return;
+
+    // run only if needed dummy file exists
+    QFile smoltdummyfile( "/var/run/smolt_do_opensuse_run" );
+    if (! smoltdummyfile.exists() )
+        return;
+
+    smolt();
+
+}
+
+// show smolt notification
+void UpdateKCM::smolt()
+{
+    if (verticalLayout->count()) {
+        QFrame *frame = new QFrame(this);
+        frame->setFrameShape(QFrame::HLine);
+        verticalLayout->insertWidget(0, frame);
+    }
+    KpkSmolt *smolt = new KpkSmolt(this);
+    verticalLayout->insertWidget(0, smolt);
+    distroUpgradesSA->show();
+    line->show();
+}
+
 void UpdateKCM::checkEnableUpdateButton()
 {
     emit changed(m_updatesModel->hasChanges());
@@ -206,6 +252,8 @@ void UpdateKCM::getUpdatesFinished(Enum:
     m_updatesT = 0;
     m_updatesModel->clearSelectedNotPresent();
     checkEnableUpdateButton();
+
+    QTimer::singleShot(1000, this, SLOT(checkSmolt()));
 }
 
 void UpdateKCM::save()
diff -rupN kpackagekit-0.6.2/Updater/UpdateKCM.h kpackagekit-0.6.2/Updater/UpdateKCM.h
--- kpackagekit-0.6.2/Updater/UpdateKCM.h	2010-10-06 01:39:37.000000000 +0200
+++ kpackagekit-0.6.2/Updater/UpdateKCM.h	2010-12-07 16:49:46.854025164 +0100
@@ -52,6 +52,9 @@ private slots:
     void on_packageView_customContextMenuRequested(const QPoint &pos);
 
     void distroUpgrade(PackageKit::Enum::DistroUpgrade type, const QString &name, const QString &description);
+    void checkSmolt();
+    void smolt();
+    
 
     void getUpdates();
     void getUpdatesFinished(PackageKit::Enum::Exit status);

openSUSE Build Service is sponsored by