29 #include <libaccounts-glib/ag-manager.h>
30 #include <libaccounts-glib/ag-account.h>
35 class Manager::Private
41 typedef QHash<const QString,
ServiceType *> ServiceTypeHash;
71 void init(
Manager *q, AgManager *manager);
75 ProviderHash providers;
77 ServiceTypeHash serviceTypes;
79 static void on_account_created(
Manager *
self, AgAccountId
id);
80 static void on_account_deleted(
Manager *
self, AgAccountId
id);
81 static void on_account_updated(
Manager *
self, AgAccountId
id);
82 static void on_enabled_event(
Manager *
self, AgAccountId
id);
87 using namespace Accounts;
89 void Manager::Private::init(
Manager *q, AgManager *manager)
92 Q_ASSERT(m_manager == 0);
98 g_signal_connect_swapped
99 (manager,
"account-created",
100 G_CALLBACK(&Private::on_account_created), q);
101 g_signal_connect_swapped
102 (manager,
"account-deleted",
103 G_CALLBACK(&Private::on_account_deleted), q);
104 g_signal_connect_swapped
105 (manager,
"account-updated",
106 G_CALLBACK(&Private::on_account_updated), q);
107 g_signal_connect_swapped
108 (manager,
"enabled-event",
109 G_CALLBACK(&Private::on_enabled_event), q);
111 qWarning() << Q_FUNC_INFO <<
"Initializing with NULL AgManager!";
115 void Manager::Private::on_account_created(
Manager *
self, AgAccountId
id)
117 TRACE() <<
"id =" << id;
119 emit
self->accountCreated(
id);
122 void Manager::Private::on_account_deleted(
Manager *
self, AgAccountId
id)
124 TRACE() <<
"id =" << id;
126 emit
self->accountRemoved(
id);
129 void Manager::Private::on_account_updated(
Manager *
self, AgAccountId
id)
131 TRACE() <<
"id =" << id;
133 emit
self->accountUpdated(
id);
136 void Manager::Private::on_enabled_event(
Manager *
self, AgAccountId
id)
138 TRACE() <<
"id =" << id;
140 emit
self->enabledEvent(
id);
144 : QObject(parent), d(new Private)
148 AgManager *manager = ag_manager_new();
150 d->init(
this, manager);
154 : QObject(parent), d(new Private)
159 ag_manager_new_for_service_type(serviceType.toUtf8().constData());
161 d->init(
this, manager);
168 g_signal_handlers_disconnect_by_func
169 (d->m_manager, (
void *)&Private::on_enabled_event,
this);
170 g_signal_handlers_disconnect_by_func
171 (d->m_manager, (
void *)&Private::on_account_updated,
this);
172 g_signal_handlers_disconnect_by_func
173 (d->m_manager, (
void *)&Private::on_account_deleted,
this);
174 g_signal_handlers_disconnect_by_func
175 (d->m_manager, (
void *)&Private::on_account_created,
this);
176 g_object_unref(d->m_manager);
184 TRACE() <<
"get account id: " << id;
188 if (account != NULL) {
190 g_object_unref(account);
200 if (serviceType.isEmpty()) {
201 list = ag_manager_list(d->m_manager);
203 list = ag_manager_list_by_service_type(d->m_manager,
204 serviceType.toUtf8().constData());
211 for (iter = list; iter; iter = g_list_next(iter))
216 ag_manager_list_free(list);
223 if (serviceType.isEmpty()) {
224 list = ag_manager_list_enabled(d->m_manager);
226 list = ag_manager_list_enabled_by_service_type(d->m_manager,
227 serviceType.toUtf8().constData());
234 for (iter = list; iter; iter = g_list_next(iter))
239 ag_manager_list_free(list);
246 TRACE() << providerName;
249 ag_manager_create_account(d->m_manager,
250 providerName.toUtf8().constData());
252 if (account != NULL) {
255 g_object_unref(account);
266 ret = d->services.value(service);
270 d->services.insert(service, ret);
277 TRACE() << serviceName;
279 ag_manager_get_service(d->m_manager,
280 serviceName.toUtf8().constData());
284 Service *serv= serviceInstance(service);
285 ag_service_unref(service);
294 if (serviceType.isEmpty()) {
295 list = ag_manager_list_services(d->m_manager);
297 list = ag_manager_list_services_by_type(d->m_manager,
298 serviceType.toUtf8().constData());
300 TRACE() <<
"found:" << g_list_length(list);
306 for (iter = list; iter; iter = g_list_next(iter))
309 servList.append(serv);
312 ag_service_list_free(list);
321 ret = d->providers.value(provider);
325 d->providers.insert(provider, ret);
332 TRACE() << providerName;
335 provider = ag_manager_get_provider(d->m_manager,
336 providerName.toUtf8().constData());
340 Provider *prov = providerInstance(provider);
341 ag_provider_unref(provider);
349 list = ag_manager_list_providers(d->m_manager);
355 for (iter = list; iter; iter = g_list_next(iter))
358 provList.append(prov);
361 ag_provider_list_free(list);
369 if (serviceType == 0) {
371 type = ag_manager_load_service_type(d->m_manager,
372 name.toUtf8().constData());
377 d->serviceTypes.insert(name, serviceType);
378 ag_service_type_unref(type);
385 return UTF8(ag_manager_get_service_type (d->m_manager));
390 ag_manager_set_db_timeout(d->m_manager, timeout);
395 return ag_manager_get_db_timeout(d->m_manager);