Thank you very much, now works correctly<br><br><div class="gmail_quote">2010/3/15 Mark Doliner <span dir="ltr"><<a href="mailto:mark@kingant.net">mark@kingant.net</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I think just because the account is online doesn't mean the list of<br>
buddies has been received, or that we have the current status for each<br>
buddy.  We've been trending in that directory, but not all of our<br>
protocol plugins behave that way.<br>
<br>
Maybe try waiting 10 or 20 seconds using purple_timeout_add()?  Or<br>
attach to the buddy-signed-on signal, instead?<br>
<br>
--Mark<br>
<br>
On Mon, Mar 15, 2010 at 1:46 PM, Giuseppe Santoro<br>
<div><div></div><div class="h5"><<a href="mailto:giuseppesantoro87@gmail.com">giuseppesantoro87@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> I tried with the example "nullclient".<br>
> I created the function:<br>
><br>
> static void<br>
> show_buddy_list_from_active_accounts()<br>
> {<br>
>     GList *accounts = purple_accounts_get_all_active();<br>
>     for (; accounts; accounts = g_list_delete_link(accounts, accounts)) {<br>
>         GSList *buddies = purple_find_buddies(accounts->data, NULL);<br>
>         for (; buddies; buddies = g_slist_delete_link(buddies,buddies)) {<br>
>             PurpleBuddy *b = buddies->data;<br>
>             PurplePresence *p = purple_buddy_get_presence(b);<br>
>             PurpleStatus *s = purple_presence_get_active_status(p);<br>
>             printf("status = %s  buddy = %s\n",<br>
>                     purple_status_get_name(s),<br>
>                     purple_buddy_get_name(b));<br>
>         }<br>
>     }<br>
> }<br>
><br>
> and I modified the function "signed_on":<br>
><br>
> static void<br>
> signed_on(PurpleConnection *gc, gpointer null)<br>
> {<br>
>     PurpleAccount *account = purple_connection_get_account(gc);<br>
>     printf("Account connected: %s %s\n", account->username,<br>
> account->protocol_id);<br>
>     purple_accounts_add(account);<br>
>     show_buddy_list_from_active_accounts();<br>
> }<br>
><br>
> Output is:<br>
> status = Offline  buddy = xxxxxxxxxx@hotmail.xxx<br>
> ......<br>
> status = Offline  buddy = xxxxxxxxxx@hotmail.xxx<br>
><br>
> for all buddies.<br>
> I do not understand where is the problem.<br>
><br>
> Thanks,<br>
> Santoro Giuseppe<br>
><br>
><br>
> 2010/3/15 Sadrul Habib Chowdhury <<a href="mailto:imadil@gmail.com">imadil@gmail.com</a>><br>
>><br>
>> * Giuseppe Santoro had this to say on [15 Mar 2010, 15:08:20 +0100]:<br>
>> > Hi,<br>
>> ><br>
>> > yes, I'm sure the buddy is online. I tried this code:<br>
>> ><br>
>> > for(buddies = purple_blist_get_buddies(); buddies; buddies =<br>
>> > buddies->next)<br>
>> > {<br>
>> >         buddy = buddies->data;<br>
>> >         PurplePresence *presence = purple_buddy_get_presence(buddy);<br>
>> >         PurpleStatus *status =<br>
>> > purple_presence_get_active_status(presence);<br>
>> ><br>
>> >         printf("%s - ", purple_status_get_name(status));<br>
>> >         *printf("%s - ",<br>
>> ><br>
>> > purple_primitive_get_id_from_type(purple_status_type_get_primitive(purple_status_get_type(status))));<br>
>> > *        printf("%s (%s)\n", purple_buddy_get_name(buddy),<br>
>> > purple_buddy_get_alias(buddy));<br>
>> > }<br>
>><br>
>><br>
>> When is this code executed? i.e. are you sure this code is executed<br>
>> *after* your account has connected? Try printing the status of<br>
>> buddy->account in the same loop.<br>
>><br>
>> For connected accounts, the following code works for me:<br>
>><br>
>>    GList *accounts = purple_accounts_get_all_active();<br>
>>    for (; accounts; accounts = g_list_delete_link(accounts, accounts)) {<br>
>>        GSList *buddies = purple_find_buddies(accounts->data, NULL);<br>
>>        for (; buddies; buddies = g_slist_delete_link(buddies,buddies)) {<br>
>>            PurpleBuddy *b = buddies->data;<br>
>>            PurplePresence *p = purple_buddy_get_presence(b);<br>
>>            PurpleStatus *s = purple_presence_get_active_status(p);<br>
>>            printf("status = %s  buddy = %s\n",<br>
>>                    purple_status_get_name(s),<br>
>>                    purple_buddy_get_name(b));<br>
>>        }<br>
>>    }<br>
>><br>
>><br>
>> Cheers,<br>
>> Sadrul<br>
>><br>
>> > OUTPUT is:<br>
>> ><br>
>> > Offline - offline - <a href="mailto:xxxxxx@xxxx.com">xxxxxx@xxxx.com</a> (<a href="mailto:xxxxxx@xxxx.com">xxxxxx@xxxx.com</a>)<br>
>> > Offline - offline - <a href="mailto:xxxxxx@xxxx.com">xxxxxx@xxxx.com</a> (<a href="mailto:xxxxxx@xxxx.com">xxxxxx@xxxx.com</a>)<br>
>> > ......<br>
>> > Offline - offline - <a href="mailto:xxxxxx@xxxx.com">xxxxxx@xxxx.com</a> (<a href="mailto:xxxxxx@xxxx.com">xxxxxx@xxxx.com</a>)<br>
>> ><br>
>> > I can see who are online by the name.<br>
>> > I use MSN protocol.<br>
>> ><br>
>> > Other suggestions?<br>
>> ><br>
>> > Thanks,<br>
>> > Giuseppe Santoro<br>
>> ><br>
>> ><br>
>> > 2010/3/15 Mark Doliner <<a href="mailto:mark@kingant.net">mark@kingant.net</a>><br>
>> ><br>
>> > > On Sun, Mar 14, 2010 at 11:43 AM, Giuseppe Santoro<br>
>> > > <<a href="mailto:giuseppesantoro87@gmail.com">giuseppesantoro87@gmail.com</a>> wrote:<br>
>> > > > Hi Pidgin Developers,<br>
>> > > ><br>
>> > > > I'm studying libpurple and pidgin to give my contribution in this<br>
>> > > project.<br>
>> > > ><br>
>> > > > I have a question:<br>
>> > > ><br>
>> > > > if I have a PurpleBuddy, how do I get his state?<br>
>> > > > I tried this code but state is ever "OFFLINE":<br>
>> > > ><br>
>> > > >             presence = purple_buddy_get_presence(buddy);<br>
>> > > >             status = purple_presence_get_active_status(presence);<br>
>> > > >             printf("%s\n", purple_status_get_name(status));<br>
>> > > ><br>
>> > > > where am I wrong?<br>
>> > ><br>
>> > > That looks correct to me.  Are you sure you're using the right buddy<br>
>> > > object?  Are you sure the buddy is online?  Are you sure you're<br>
>> > > printing the status while the buddy is online?<br>
>> > ><br>
>> > > The PurpleStatus name is actually the PurpleStatusType name.  And the<br>
>> > > PurpleStatusType name comes from the prpl.  It's possible the prpl<br>
>> > > mistakenly sets the name of the status type to "OFFLINE."  You could<br>
>> > > try printing<br>
>> > ><br>
>> > > purple_primitive_get_id_from_type(purple_status_type_get_primitive(purple_status_get_type(status)))<br>
>> > > to verify that the status type really is offline.<br>
>> > ><br>
>> > > --Mark<br>
</div></div></blockquote></div><br>