File indexing completed on 2025-01-05 04:46:27

0001 /*
0002     SPDX-FileCopyrightText: 2010 Bertjan Broeksema <broeksema@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "agentthreadinstance.h"
0007 
0008 #include "agentserverinterface.h"
0009 #include "akonadicontrol_debug.h"
0010 
0011 #include "private/dbus_p.h"
0012 
0013 using namespace Akonadi;
0014 
0015 AgentThreadInstance::AgentThreadInstance(AgentManager &manager)
0016     : AgentInstance(manager)
0017     , mServiceWatcher(Akonadi::DBus::serviceName(Akonadi::DBus::AgentServer), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration)
0018 {
0019     connect(&mServiceWatcher, &QDBusServiceWatcher::serviceRegistered, this, &AgentThreadInstance::agentServerRegistered);
0020 }
0021 
0022 bool AgentThreadInstance::start(const AgentType &agentInfo)
0023 {
0024     Q_ASSERT(!identifier().isEmpty());
0025     if (identifier().isEmpty()) {
0026         return false;
0027     }
0028 
0029     setAgentType(agentInfo.identifier);
0030     mAgentType = agentInfo;
0031 
0032     org::freedesktop::Akonadi::AgentServer agentServer(Akonadi::DBus::serviceName(Akonadi::DBus::AgentServer),
0033                                                        QStringLiteral("/AgentServer"),
0034                                                        QDBusConnection::sessionBus());
0035     if (!agentServer.isValid()) {
0036         qCDebug(AKONADICONTROL_LOG) << "AgentServer not up (yet?)";
0037         return false;
0038     }
0039 
0040     // TODO: let startAgent return a bool.
0041     agentServer.startAgent(identifier(), agentInfo.identifier, agentInfo.exec);
0042     return true;
0043 }
0044 
0045 void AgentThreadInstance::quit()
0046 {
0047     AgentInstance::quit();
0048 
0049     org::freedesktop::Akonadi::AgentServer agentServer(Akonadi::DBus::serviceName(Akonadi::DBus::AgentServer),
0050                                                        QStringLiteral("/AgentServer"),
0051                                                        QDBusConnection::sessionBus());
0052     agentServer.stopAgent(identifier());
0053 }
0054 
0055 void AgentThreadInstance::restartWhenIdle()
0056 {
0057     if (status() != 1 && !identifier().isEmpty()) {
0058         org::freedesktop::Akonadi::AgentServer agentServer(Akonadi::DBus::serviceName(Akonadi::DBus::AgentServer),
0059                                                            QStringLiteral("/AgentServer"),
0060                                                            QDBusConnection::sessionBus());
0061         agentServer.stopAgent(identifier());
0062         agentServer.startAgent(identifier(), agentType(), mAgentType.exec);
0063     }
0064 }
0065 
0066 void AgentThreadInstance::agentServerRegistered()
0067 {
0068     start(mAgentType);
0069 }
0070 
0071 void Akonadi::AgentThreadInstance::configure(qlonglong windowId)
0072 {
0073     org::freedesktop::Akonadi::AgentServer agentServer(Akonadi::DBus::serviceName(Akonadi::DBus::AgentServer),
0074                                                        QStringLiteral("/AgentServer"),
0075                                                        QDBusConnection::sessionBus());
0076     agentServer.agentInstanceConfigure(identifier(), windowId);
0077 }
0078 
0079 #include "moc_agentthreadinstance.cpp"