Buddy Status

Sadrul Habib Chowdhury imadil at gmail.com
Mon Mar 15 10:42:14 EDT 2010


* Giuseppe Santoro had this to say on [15 Mar 2010, 15:08:20 +0100]:
> Hi,
> 
> yes, I'm sure the buddy is online. I tried this code:
> 
> for(buddies = purple_blist_get_buddies(); buddies; buddies = buddies->next)
> {
>         buddy = buddies->data;
>         PurplePresence *presence = purple_buddy_get_presence(buddy);
>         PurpleStatus *status = purple_presence_get_active_status(presence);
> 
>         printf("%s - ", purple_status_get_name(status));
>         *printf("%s - ",
> purple_primitive_get_id_from_type(purple_status_type_get_primitive(purple_status_get_type(status))));
> *        printf("%s (%s)\n", purple_buddy_get_name(buddy),
> purple_buddy_get_alias(buddy));
> }


When is this code executed? i.e. are you sure this code is executed
*after* your account has connected? Try printing the status of
buddy->account in the same loop.

For connected accounts, the following code works for me:

    GList *accounts = purple_accounts_get_all_active();
    for (; accounts; accounts = g_list_delete_link(accounts, accounts)) {
        GSList *buddies = purple_find_buddies(accounts->data, NULL);
        for (; buddies; buddies = g_slist_delete_link(buddies,buddies)) {
            PurpleBuddy *b = buddies->data;
            PurplePresence *p = purple_buddy_get_presence(b);
            PurpleStatus *s = purple_presence_get_active_status(p);
            printf("status = %s  buddy = %s\n",
                    purple_status_get_name(s),
                    purple_buddy_get_name(b));
        }
    }


Cheers,
Sadrul

> OUTPUT is:
> 
> Offline - offline - xxxxxx at xxxx.com (xxxxxx at xxxx.com)
> Offline - offline - xxxxxx at xxxx.com (xxxxxx at xxxx.com)
> ......
> Offline - offline - xxxxxx at xxxx.com (xxxxxx at xxxx.com)
> 
> I can see who are online by the name.
> I use MSN protocol.
> 
> Other suggestions?
> 
> Thanks,
> Giuseppe Santoro
> 
> 
> 2010/3/15 Mark Doliner <mark at kingant.net>
> 
> > On Sun, Mar 14, 2010 at 11:43 AM, Giuseppe Santoro
> > <giuseppesantoro87 at gmail.com> wrote:
> > > Hi Pidgin Developers,
> > >
> > > I'm studying libpurple and pidgin to give my contribution in this
> > project.
> > >
> > > I have a question:
> > >
> > > if I have a PurpleBuddy, how do I get his state?
> > > I tried this code but state is ever "OFFLINE":
> > >
> > >             presence = purple_buddy_get_presence(buddy);
> > >             status = purple_presence_get_active_status(presence);
> > >             printf("%s\n", purple_status_get_name(status));
> > >
> > > where am I wrong?
> >
> > That looks correct to me.  Are you sure you're using the right buddy
> > object?  Are you sure the buddy is online?  Are you sure you're
> > printing the status while the buddy is online?
> >
> > The PurpleStatus name is actually the PurpleStatusType name.  And the
> > PurpleStatusType name comes from the prpl.  It's possible the prpl
> > mistakenly sets the name of the status type to "OFFLINE."  You could
> > try printing
> > purple_primitive_get_id_from_type(purple_status_type_get_primitive(purple_status_get_type(status)))
> > to verify that the status type really is offline.
> >
> > --Mark
> >

> _______________________________________________
> Devel mailing list
> Devel at pidgin.im
> http://pidgin.im/cgi-bin/mailman/listinfo/devel




More information about the Devel mailing list