Buddy Status

Giuseppe Santoro giuseppesantoro87 at gmail.com
Mon Mar 15 17:39:34 EDT 2010


Thank you very much, now works correctly

2010/3/15 Mark Doliner <mark at kingant.net>

> I think just because the account is online doesn't mean the list of
> buddies has been received, or that we have the current status for each
> buddy.  We've been trending in that directory, but not all of our
> protocol plugins behave that way.
>
> Maybe try waiting 10 or 20 seconds using purple_timeout_add()?  Or
> attach to the buddy-signed-on signal, instead?
>
> --Mark
>
> On Mon, Mar 15, 2010 at 1:46 PM, Giuseppe Santoro
> <giuseppesantoro87 at gmail.com> wrote:
> > Hi,
> >
> > I tried with the example "nullclient".
> > I created the function:
> >
> > static void
> > show_buddy_list_from_active_accounts()
> > {
> >     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));
> >         }
> >     }
> > }
> >
> > and I modified the function "signed_on":
> >
> > static void
> > signed_on(PurpleConnection *gc, gpointer null)
> > {
> >     PurpleAccount *account = purple_connection_get_account(gc);
> >     printf("Account connected: %s %s\n", account->username,
> > account->protocol_id);
> >     purple_accounts_add(account);
> >     show_buddy_list_from_active_accounts();
> > }
> >
> > Output is:
> > status = Offline  buddy = xxxxxxxxxx at hotmail.xxx
> > ......
> > status = Offline  buddy = xxxxxxxxxx at hotmail.xxx
> >
> > for all buddies.
> > I do not understand where is the problem.
> >
> > Thanks,
> > Santoro Giuseppe
> >
> >
> > 2010/3/15 Sadrul Habib Chowdhury <imadil at gmail.com>
> >>
> >> * 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://pidgin.im/pipermail/devel/attachments/20100315/c8d9d0a2/attachment.html>


More information about the Devel mailing list