| | 336 | typedef struct { |
|---|
| | 337 | TnyFolder *folder; |
|---|
| | 338 | TnyList *list; |
|---|
| | 339 | gboolean refresh; |
|---|
| | 340 | GError **err; |
|---|
| | 341 | |
|---|
| | 342 | GCond* condition; |
|---|
| | 343 | gboolean had_callback; |
|---|
| | 344 | GMutex *mutex; |
|---|
| | 345 | |
|---|
| | 346 | } GetHeadersSync; |
|---|
| | 347 | |
|---|
| | 348 | static void |
|---|
| | 349 | get_headers_async (TnyFolder *self, gboolean cancelled, TnyList *headers, GError *err, gpointer user_data) |
|---|
| | 350 | { |
|---|
| | 351 | GetHeadersSync *info = (GetHeadersSync *) user_data; |
|---|
| | 352 | |
|---|
| | 353 | if (err && info->err) |
|---|
| | 354 | *info->err = g_error_copy (err); |
|---|
| | 355 | |
|---|
| | 356 | g_mutex_lock (info->mutex); |
|---|
| | 357 | g_cond_broadcast (info->condition); |
|---|
| | 358 | info->had_callback = TRUE; |
|---|
| | 359 | g_mutex_unlock (info->mutex); |
|---|
| | 360 | } |
|---|
| | 361 | |
|---|
| | 362 | static void |
|---|
| | 363 | get_headers_sync (TnyFolder *folder, TnyList *list, gboolean refresh, GError **err) |
|---|
| | 364 | { |
|---|
| | 365 | GetHeadersSync *info = g_slice_new0 (GetHeadersSync); |
|---|
| | 366 | |
|---|
| | 367 | info->mutex = g_mutex_new (); |
|---|
| | 368 | info->condition = g_cond_new (); |
|---|
| | 369 | info->had_callback = FALSE; |
|---|
| | 370 | |
|---|
| | 371 | info->folder = g_object_ref (folder); |
|---|
| | 372 | info->list = g_object_ref (list); |
|---|
| | 373 | info->refresh = refresh; |
|---|
| | 374 | info->err = err; |
|---|
| | 375 | |
|---|
| | 376 | tny_folder_get_headers_async (folder, list, refresh, |
|---|
| | 377 | get_headers_async, NULL, info); |
|---|
| | 378 | |
|---|
| | 379 | g_mutex_lock (info->mutex); |
|---|
| | 380 | if (!info->had_callback) |
|---|
| | 381 | g_cond_wait (info->condition, info->mutex); |
|---|
| | 382 | g_mutex_unlock (info->mutex); |
|---|
| | 383 | |
|---|
| | 384 | g_mutex_free (info->mutex); |
|---|
| | 385 | g_cond_free (info->condition); |
|---|
| | 386 | |
|---|
| | 387 | g_object_unref (info->folder); |
|---|
| | 388 | g_object_unref (info->list); |
|---|
| | 389 | g_slice_free (GetHeadersSync, info); |
|---|
| | 390 | } |
|---|
| | 391 | |
|---|