# HG changeset patch # User Marcus Lundblad # Date 1230159076 0 # Node ID 6185767dc03ce04b5fc2df1bbf9294e0e025eb05 # Parent b1a16f0efec2889822d2b6fa528ef37113d4f09d When getting info from a buddy, update the idle status to the libpurple core if we get last activity (ie. idle) time diff -r b1a16f0efec2 -r 6185767dc03c libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Wed Dec 24 13:36:10 2008 +0000 +++ b/libpurple/protocols/jabber/buddy.c Wed Dec 24 22:51:16 2008 +0000 @@ -1627,12 +1627,39 @@ if(seconds) { char *end = NULL; long sec = strtol(seconds, &end, 10); - if(end != seconds) { + JabberBuddy *jb = NULL; + char *resource = NULL; + char *buddy_name = NULL; + JabberBuddyResource *jbr = NULL; + + if(end != seconds) { JabberBuddyInfoResource *jbir = g_hash_table_lookup(jbi->resources, resource_name); if(jbir) { jbir->idle_seconds = sec; } } + /* if this idle time different from the one stored + in the JabberBuddyResource (as obtained via + ) update it. This is to correct the value + when a server doesn't mark delayed presence */ + jb = jabber_buddy_find(js, from, FALSE); + if (jb) { + resource = jabber_get_resource(from); + buddy_name = jabber_get_bare_jid(from); + if (resource && buddy_name) { + jbr = jabber_buddy_find_resource(jb, resource); + jbr->idle = time(NULL) - sec; + + if (jbr == + jabber_buddy_find_resource(jb, NULL) && + jbr->idle) { + purple_prpl_got_user_idle(js->gc->account, + buddy_name, jbr->idle, jbr->idle); + } + } + g_free(resource); + g_free(buddy_name); + } } } }