[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#692601: marked as done (unblock: apper/0.7.2-5)



Your message dated Fri, 16 Nov 2012 09:32:49 +0100
with message-id <50A5FA31.6090408@thykier.net>
and subject line Re: Bug#692601: unblock: apper/0.7.2-5
has caused the Debian Bug report #692601,
regarding unblock: apper/0.7.2-5
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
692601: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692601
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package apper

The change includes only one patch, which makes Apper able to replace the
package "update-notifier-kde", which will be retired in favour of Apper in
Debian/KDE default selection then.
The code in the patch is to a very high degree already used in the old update
notifier and has not been changed.
Having an Apper which is able to listen for restart signals from non-PackageKit
tools makes it possible to remove the old update-notifier from default, and by
doing this, this bug will be fixed: http://bugs.debian.org/691757

The concepts have been discussed with Niels Thykier who wanted a patch for
review.

Thank you for looking into this!
Kind regards,
    Matthias Klumpp

Here is the full patch applied to the Apper sources:
Forwarded: yes
Author: Matthias Klumpp <matthias@tenstral.net>
Last-Update: 2012-11-06
diff --git a/Sentinel/ApperSentinel.cpp b/Sentinel/ApperSentinel.cpp
index e0ae70d..384bcc7 100644
--- a/Sentinel/ApperSentinel.cpp
+++ b/Sentinel/ApperSentinel.cpp
@@ -81,6 +81,10 @@ ApperSentinel::ApperSentinel()
     connect(m_interface, SIGNAL(refreshCache()),
             m_refreshCache, SLOT(refreshCache()));

+    // connect the reboot-notify DBus request
+    connect(m_interface, SIGNAL(aptNotifyReboot()),
+            m_trayIcon, SLOT(showRebootNotificationApt()));
+
     // connect the watch transaction coming from the updater icon to our
watcher
 //     connect(m_updateIcon, SIGNAL(watchTransaction(const QString &, bool)),
 //             m_transWatcher, SLOT(watchTransaction(const QString &, bool)));
diff --git a/Sentinel/DBusInterface.cpp b/Sentinel/DBusInterface.cpp
index e71a4f8..8e0af0c 100644
--- a/Sentinel/DBusInterface.cpp
+++ b/Sentinel/DBusInterface.cpp
@@ -64,6 +64,11 @@ void DBusInterface::CheckForUpdates(bool system_ready)
     emit checkForUpdates(system_ready);
 }

+void DBusInterface::AptNotifyReboot()
+{
+    emit aptNotifyReboot();
+}
+
 void DBusInterface::SetupDebconfDialog(const QString &tid, const QString
&socketPath, uint xidParent)
 {
 #ifdef HAVE_DEBCONFKDE
diff --git a/Sentinel/DBusInterface.h b/Sentinel/DBusInterface.h
index 9b79c94..cfc7c6f 100644
--- a/Sentinel/DBusInterface.h
+++ b/Sentinel/DBusInterface.h
@@ -41,10 +41,14 @@ public:
     void CheckForUpdates(bool system_ready);
     void SetupDebconfDialog(const QString &tid, const QString &socketPath,
uint xidParent);

+    void AptNotifyReboot();
+
 signals:
     void checkForUpdates(bool system_ready);
     void refreshCache();

+    void aptNotifyReboot();
+
 private slots:
     void debconfActivate();
     void transactionFinished();
diff --git a/Sentinel/TransactionWatcher.cpp b/Sentinel/TransactionWatcher.cpp
index d0f16b5..3f8ce3f 100644
--- a/Sentinel/TransactionWatcher.cpp
+++ b/Sentinel/TransactionWatcher.cpp
@@ -151,6 +151,29 @@ void TransactionWatcher::setCurrentTransaction(const
QString &tid)
     }
 }

+void TransactionWatcher::showRebootNotificationApt() {
+    // Create the notification about this transaction
+    KNotification *notify = new KNotification("RestartRequired");
+    QString text("<b>" + i18n("The system update has completed") + "</b>");
+    text.append("<br>" +
PkStrings::restartType(PackageKit::Package::RestartSystem));
+
notify->setPixmap(PkIcons::restartIcon(PackageKit::Package::RestartSystem).pixmap(KPK_ICON_SIZE,
KPK_ICON_SIZE));
+    notify->setText(text);
+    notify->sendEvent();
+
+    m_restartType = Package::RestartSystem;
+
+    if (m_restartSNI == 0) {
+        m_restartSNI = new StatusNotifierItem(this);
+        connect(m_restartSNI, SIGNAL(activateRequested(bool,QPoint)),
+                this, SLOT(logout()));
+        // Right click shows HIDE action
+        QAction *action;
+        action = m_restartSNI->contextMenu()->addAction(i18n("Hide"));
+        connect(action, SIGNAL(triggered(bool)),
+                 this, SLOT(hideRestartIcon()));
+    }
+}
+
 void TransactionWatcher::finished(PackageKit::Transaction::Exit exit)
 {
     // check if the transaction emitted any require restart
diff --git a/Sentinel/TransactionWatcher.h b/Sentinel/TransactionWatcher.h
index bf98201..5e1f833 100644
--- a/Sentinel/TransactionWatcher.h
+++ b/Sentinel/TransactionWatcher.h
@@ -55,6 +55,9 @@ private slots:
     void hideMessageIcon();
     void hideRestartIcon();

+public slots:
+    void showRebootNotificationApt();
+
 private:
     void suppressSleep(bool enable, const QString &reason = QString());
     void setCurrentTransaction(const QString &tid);
diff --git a/Sentinel/org.kde.ApperSentinel.xml
b/Sentinel/org.kde.ApperSentinel.xml
index 673a497..1d2a813 100644
--- a/Sentinel/org.kde.ApperSentinel.xml
+++ b/Sentinel/org.kde.ApperSentinel.xml
@@ -11,5 +11,7 @@
            <arg type="s" name="socket_path" direction="in" />
            <arg type="u" name="xid_parent" direction="in" />
        </method>
+       <method name="AptNotifyReboot" >
+       </method>
    </interface>
 </node>
diff --git a/apperd/ApperdThread.cpp b/apperd/ApperdThread.cpp
index d10a3f4..e1f3122 100644
--- a/apperd/ApperdThread.cpp
+++ b/apperd/ApperdThread.cpp
@@ -37,6 +37,8 @@

 #include <KDebug>

+#include "reboot_listener.h"
+
 #define FIVE_MIN 360000
 #define ONE_MIN   72000

@@ -51,7 +53,8 @@
 ApperdThread::ApperdThread(QObject *parent) :
     QObject(parent),
     m_actRefreshCacheChecked(false),
-    m_refreshCacheInterval(Enum::TimeIntervalDefault)
+    m_refreshCacheInterval(Enum::TimeIntervalDefault),
+    m_AptRebootListener(new reboot_listener_t(this))
 {
     // Make all our init code run on the thread since
     // the DBus calls were made blocking
@@ -133,6 +136,10 @@ void ApperdThread::init()
         transactionListChanged(reply.value()); // In case of a running
transaction fire up sentinel
     }

+    // listen to Debian/Apt reboot signals from other sources (apt)
+    connect(m_AptRebootListener, SIGNAL(request_reboot()),
this,SLOT(aptNotifyReboot()));
+    QTimer::singleShot(2 /*minutes*/ * 60 /*seconds*/ * 1000 /*msec*/,
m_AptRebootListener, SLOT(check_for_reboot()));
+
     // read the current settings
     configFileChanged();
 }
@@ -170,6 +177,12 @@ void ApperdThread::poll()
     }
 }

+void ApperdThread::aptNotifyReboot()
+{
+    // Notify user about restart by calling ApperSentinel
+    callApperSentinel(QLatin1String("AptNotifyReboot"));
+}
+
 void ApperdThread::configFileChanged()
 {
     KConfig config("apper");
diff --git a/apperd/ApperdThread.h b/apperd/ApperdThread.h
index 12c279a..86b2ae6 100644
--- a/apperd/ApperdThread.h
+++ b/apperd/ApperdThread.h
@@ -26,6 +26,8 @@
 #include <QDBusConnection>
 #include <QDateTime>

+class reboot_listener_t;
+
 class ApperdThread : public QObject
 {
     Q_OBJECT
@@ -42,6 +44,8 @@ private slots:
     void updatesChanged();
     void serviceOwnerChanged(const QString &serviceName, const QString
&oldOwner, const QString &newOwner);

+    void aptNotifyReboot();
+
 private:
     void callApperSentinel(const QString &method,
                            const QList<QVariant> &arguments =
QList<QVariant>());
@@ -57,6 +61,9 @@ private:
     uint m_refreshCacheInterval;
     QTimer *m_qtimer;
     QThread *m_thread;
+
+    // Apt reboot listener
+    reboot_listener_t *m_AptRebootListener;
 };

 #endif // APPERDTHREAD_H
diff --git a/apperd/CMakeLists.txt b/apperd/CMakeLists.txt
index ebc84fc..66f6c80 100644
--- a/apperd/CMakeLists.txt
+++ b/apperd/CMakeLists.txt
@@ -1,5 +1,6 @@
 kde4_add_plugin(kded_apperd
     ApperdThread.cpp
+    reboot_listener.cpp
     apperd.cpp
 )

diff --git a/apperd/reboot_listener.cpp b/apperd/reboot_listener.cpp
new file mode 100644
index 0000000..c252248
--- /dev/null
+++ b/apperd/reboot_listener.cpp
@@ -0,0 +1,60 @@
+/*
+    Copyright (c) 2010 Sune Vuorela <sune@vuorela.dk>
+
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use,
+    copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following
+    conditions:
+
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+#include "reboot_listener.h"
+#include <QFileSystemWatcher>
+#include <QDebug>
+#include <KDirWatch>
+#include <QTimer>
+#include <QFile>
+
+static const char reboot_required_path[] = "/var/run/reboot-required";
+
+reboot_listener_t::reboot_listener_t(QObject* parent): QObject(parent) {
+  m_watcher = new KDirWatch(this);
+  m_watcher->addFile(QString::fromLatin1(reboot_required_path));
+
connect(m_watcher,SIGNAL(created(QString)),this,SLOT(directory_changed_slot(QString)));
+  m_timer = new QTimer(this);
+  m_timer->setSingleShot(true);
+  m_timer->setInterval(500);
+  connect(m_timer,SIGNAL(timeout()),SIGNAL(request_reboot()));
+}
+void reboot_listener_t::check_for_reboot() {
+  if(QFile::exists(QString::fromLatin1(reboot_required_path))) {
+    m_timer->start();
+  }
+}
+
+
+void reboot_listener_t::directory_changed_slot(const QString& path) {
+  if(path==QLatin1String(reboot_required_path)) {
+     m_timer->start();
+  }
+}
+
+
+
+#include <reboot_listener.moc>
diff --git a/apperd/reboot_listener.h b/apperd/reboot_listener.h
new file mode 100644
index 0000000..57c48a8
--- /dev/null
+++ b/apperd/reboot_listener.h
@@ -0,0 +1,50 @@
+/*
+    Copyright (c) 2010 Sune Vuorela <sune@vuorela.dk>
+
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use,
+    copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following
+    conditions:
+
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+#ifndef REBOOT_LISTENER_H
+#define REBOOT_LISTENER_H
+
+#include <QObject>
+
+class KDirWatch;
+class QTimer;
+
+class reboot_listener_t : public QObject {
+  Q_OBJECT
+  public:
+    reboot_listener_t(QObject* parent=0);
+  Q_SIGNALS:
+    void request_reboot();
+  public Q_SLOTS:
+    void check_for_reboot();
+  private Q_SLOTS:
+    void directory_changed_slot(const QString& path);
+  private:
+    KDirWatch* m_watcher;
+    QTimer* m_timer;
+};
+
+#endif // REBOOT_LISTENER_H


unblock apper/0.7.2-5

-- System Information:
Debian Release: wheezy/sid
Architecture: amd64 (x86_64)
Foreign Architectures: i386

--- End Message ---
--- Begin Message ---
On 2012-11-07 20:34, Matthias Klumpp wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
> 
> Please unblock package apper
> 
> The change includes only one patch, which makes Apper able to replace the
> package "update-notifier-kde", which will be retired in favour of Apper in
> Debian/KDE default selection then.
> The code in the patch is to a very high degree already used in the old update
> notifier and has not been changed.
> Having an Apper which is able to listen for restart signals from non-PackageKit
> tools makes it possible to remove the old update-notifier from default, and by
> doing this, this bug will be fixed: http://bugs.debian.org/691757
> 
> The concepts have been discussed with Niels Thykier who wanted a patch for
> review.
> 
> Thank you for looking into this!
> Kind regards,
>     Matthias Klumpp
> 
> [...]
> 
> unblock apper/0.7.2-5
> 
> [...]

Unblocked, thanks.

~Niels

--- End Message ---

Reply to: