libpurple/purpleprotocol.c

changeset 42646
b82b5609c044
parent 42615
2f3308794a8f
child 42683
a3d036e859b1
equal deleted inserted replaced
42645:3844b333df53 42646:b82b5609c044
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

mercurial