Changeset View
Changeset View
Standalone View
Standalone View
src/server/search/agentsearchinstance.cpp
Show All 24 Lines | |||||
25 | #include <private/dbus_p.h> | 25 | #include <private/dbus_p.h> | ||
26 | 26 | | |||
27 | using namespace Akonadi; | 27 | using namespace Akonadi; | ||
28 | using namespace Akonadi::Server; | 28 | using namespace Akonadi::Server; | ||
29 | 29 | | |||
30 | AgentSearchInstance::AgentSearchInstance(const QString &id) | 30 | AgentSearchInstance::AgentSearchInstance(const QString &id) | ||
31 | : mId(id) | 31 | : mId(id) | ||
32 | , mInterface(nullptr) | 32 | , mInterface(nullptr) | ||
33 | , mServiceWatcher(nullptr) | | |||
34 | { | 33 | { | ||
35 | } | 34 | } | ||
36 | 35 | | |||
37 | AgentSearchInstance::~AgentSearchInstance() | 36 | AgentSearchInstance::~AgentSearchInstance() | ||
38 | { | 37 | { | ||
39 | delete mInterface; | 38 | delete mInterface; | ||
40 | } | 39 | } | ||
41 | 40 | | |||
42 | bool AgentSearchInstance::init() | 41 | bool AgentSearchInstance::init() | ||
43 | { | 42 | { | ||
44 | Q_ASSERT(!mInterface); | 43 | Q_ASSERT(!mInterface); | ||
45 | 44 | | |||
46 | mInterface = new OrgFreedesktopAkonadiAgentSearchInterface( | 45 | mInterface = new OrgFreedesktopAkonadiAgentSearchInterface( | ||
47 | DBus::agentServiceName(mId, DBus::Agent), | 46 | DBus::agentServiceName(mId, DBus::Agent), | ||
48 | QStringLiteral("/Search"), | 47 | QStringLiteral("/Search"), | ||
49 | DBusConnectionPool::threadConnection()); | 48 | DBusConnectionPool::threadConnection()); | ||
50 | 49 | | |||
51 | if (!mInterface || !mInterface->isValid()) { | 50 | if (!mInterface || !mInterface->isValid()) { | ||
52 | delete mInterface; | 51 | delete mInterface; | ||
53 | mInterface = nullptr; | 52 | mInterface = nullptr; | ||
54 | return false; | 53 | return false; | ||
55 | } | 54 | } | ||
56 | 55 | | |||
57 | mServiceWatcher = new QDBusServiceWatcher(DBus::agentServiceName(mId, DBus::Agent), | 56 | mServiceWatcher = std::make_unique<QDBusServiceWatcher>( | ||
58 | DBusConnectionPool::threadConnection(), | 57 | DBus::agentServiceName(mId, DBus::Agent), DBusConnectionPool::threadConnection(), | ||
59 | QDBusServiceWatcher::WatchForOwnerChange, | 58 | QDBusServiceWatcher::WatchForUnregistration); | ||
60 | this); | 59 | connect(mServiceWatcher.get(), &QDBusServiceWatcher::serviceUnregistered, | ||
61 | connect(mServiceWatcher, &QDBusServiceWatcher::serviceOwnerChanged, | 60 | this, [this]() { | ||
62 | this, &AgentSearchInstance::serviceOwnerChanged); | 61 | SearchTaskManager::instance()->unregisterInstance(mId); | ||
62 | }); | ||||
63 | 63 | | |||
64 | return true; | 64 | return true; | ||
65 | } | 65 | } | ||
66 | 66 | | |||
67 | void AgentSearchInstance::serviceOwnerChanged(const QString &service, const QString &oldName, const QString &newName) | | |||
68 | { | | |||
69 | Q_UNUSED(service); | | |||
70 | Q_UNUSED(oldName); | | |||
71 | | ||||
72 | if (newName.isEmpty()) { | | |||
73 | SearchTaskManager::instance()->unregisterInstance(mId); | | |||
74 | } | | |||
75 | } | | |||
76 | | ||||
77 | void AgentSearchInstance::search(const QByteArray &searchId, const QString &query, | 67 | void AgentSearchInstance::search(const QByteArray &searchId, const QString &query, | ||
78 | qlonglong collectionId) | 68 | qlonglong collectionId) | ||
79 | { | 69 | { | ||
80 | mInterface->search(searchId, query, collectionId); | 70 | mInterface->search(searchId, query, collectionId); | ||
81 | } | 71 | } | ||
82 | 72 | | |||
83 | OrgFreedesktopAkonadiAgentSearchInterface *AgentSearchInstance::interface() const | 73 | OrgFreedesktopAkonadiAgentSearchInterface *AgentSearchInstance::interface() const | ||
84 | { | 74 | { | ||
85 | return mInterface; | 75 | return mInterface; | ||
86 | } | 76 | } |