| 559 |
559 |
| 560 klass = PURPLE_PROTOCOL_GET_CLASS(protocol); |
560 klass = PURPLE_PROTOCOL_GET_CLASS(protocol); |
| 561 if(klass != NULL && klass->can_connect_async != NULL) { |
561 if(klass != NULL && klass->can_connect_async != NULL) { |
| 562 klass->can_connect_async(protocol, account, cancellable, callback, |
562 klass->can_connect_async(protocol, account, cancellable, callback, |
| 563 data); |
563 data); |
| |
564 } else { |
| |
565 GTask *task = g_task_new(protocol, cancellable, callback, data); |
| |
566 |
| |
567 g_task_return_boolean(task, TRUE); |
| |
568 g_task_set_source_tag(task, purple_protocol_can_connect_async); |
| |
569 |
| |
570 g_clear_object(&task); |
| 564 } |
571 } |
| 565 } |
572 } |
| 566 |
573 |
| 567 gboolean |
574 gboolean |
| 568 purple_protocol_can_connect_finish(PurpleProtocol *protocol, |
575 purple_protocol_can_connect_finish(PurpleProtocol *protocol, |
| 569 GAsyncResult *result, |
576 GAsyncResult *result, |
| 570 GError **error) |
577 GError **error) |
| 571 { |
578 { |
| 572 PurpleProtocolClass *klass = NULL; |
579 gpointer tag = NULL; |
| 573 |
580 |
| 574 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), FALSE); |
581 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), FALSE); |
| 575 |
582 |
| 576 klass = PURPLE_PROTOCOL_GET_CLASS(protocol); |
583 tag = g_task_get_source_tag(G_TASK(result)); |
| 577 if(klass != NULL && klass->can_connect_finish != NULL) { |
584 if(tag == purple_protocol_can_connect_async) { |
| 578 return klass->can_connect_finish(protocol, result, error); |
585 return g_task_propagate_boolean(G_TASK(result), error); |
| |
586 } else { |
| |
587 PurpleProtocolClass *klass = PURPLE_PROTOCOL_GET_CLASS(protocol); |
| |
588 |
| |
589 if(klass != NULL && klass->can_connect_finish != NULL) { |
| |
590 return klass->can_connect_finish(protocol, result, error); |
| |
591 } |
| 579 } |
592 } |
| 580 |
593 |
| 581 return FALSE; |
594 return FALSE; |
| 582 } |
595 } |
| 583 |
596 |