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"