File indexing completed on 2024-04-21 15:32:36

0001 /*
0002     This file is part of the Polkit-qt project
0003     SPDX-FileCopyrightText: 2009 Jaroslav Reznik <jreznik@redhat.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "polkitqt1-agent-listener.h"
0009 
0010 #include <QDebug>
0011 
0012 #include "polkitqtlistener_p.h"
0013 
0014 #include "polkitqt1-authority.h"
0015 #include "polkitqt1-subject.h"
0016 #include "polkitqt1-identity.h"
0017 #include "polkitqt1-details.h"
0018 
0019 namespace PolkitQt1
0020 {
0021 
0022 namespace Agent
0023 {
0024 
0025 class ListenerPrivate
0026 {
0027 public:
0028     PolkitAgentListener *listener;
0029 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE
0030     void *registeredHandle;
0031 #endif
0032 };
0033 
0034 Listener::Listener(QObject *parent)
0035         : QObject(parent), d(new ListenerPrivate)
0036 {
0037     d->listener = polkit_qt_listener_new();
0038 
0039     qDebug() << "New PolkitAgentListener " << d->listener;
0040 
0041     ListenerAdapter::instance()->addListener(this);
0042 }
0043 
0044 Listener::Listener(PolkitAgentListener *listener, QObject *parent)
0045         : QObject(parent), d(new ListenerPrivate)
0046 {
0047     d->listener = listener;
0048     
0049     if (d->listener != nullptr) {
0050         g_object_ref(d->listener);
0051     }
0052 }
0053 
0054 Listener::~Listener()
0055 {
0056     qDebug("Destroying listener");
0057 
0058     ListenerAdapter::instance()->removeListener(this);
0059 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE
0060     if (d->registeredHandle) {
0061         polkit_agent_listener_unregister(d->registeredHandle);
0062     }
0063 #endif
0064     if (d->listener != nullptr) {
0065         g_object_unref(d->listener);
0066     }
0067 }
0068 
0069 bool Listener::registerListener(const PolkitQt1::Subject &subject, const QString &objectPath)
0070 {
0071     GError *error = nullptr;
0072 
0073 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE
0074     d->registeredHandle = polkit_agent_listener_register(d->listener,
0075                                             POLKIT_AGENT_REGISTER_FLAGS_NONE,
0076 #else
0077     bool r = polkit_agent_register_listener(d->listener,
0078 #endif
0079                                             subject.subject(),
0080                                             objectPath.toLatin1().data(),
0081 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE
0082                                             nullptr,
0083 #endif
0084                                             &error);
0085 
0086     if (error != nullptr) {
0087         qWarning() << QString("Cannot register authentication agent: %1").arg(error->message);
0088         g_error_free(error);
0089         return false;
0090     }
0091 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE
0092     if (d->registeredHandle == nullptr) {
0093         qWarning() << QString("Cannot register authentication agent!");
0094         return false;
0095     }
0096     return true;
0097 #else
0098     return r;
0099 #endif
0100 }
0101 
0102 const PolkitAgentListener *Listener::listener()
0103 {
0104     return d->listener;
0105 }
0106 
0107 }
0108 
0109 }