diff options
author | James Booth <boothj5@gmail.com> | 2012-12-09 03:07:33 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2012-12-09 03:07:33 +0000 |
commit | 8e90f7a4140f3d5ebb076b23ee10b2d296340ba8 (patch) | |
tree | 903dfcdfc48991e8cefc13519b774f2cad38c8ea /src/contact_list.c | |
parent | 6b9962434849587a54608ea995dcef48cc86ff39 (diff) | |
download | profani-tty-8e90f7a4140f3d5ebb076b23ee10b2d296340ba8.tar.gz |
Handle idle time from contacts
Diffstat (limited to 'src/contact_list.c')
-rw-r--r-- | src/contact_list.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/contact_list.c b/src/contact_list.c index 8caa8784..f277e2f0 100644 --- a/src/contact_list.c +++ b/src/contact_list.c @@ -31,6 +31,7 @@ static PAutocomplete ac; static GHashTable *contacts; static gboolean _key_equals(void *key1, void *key2); +static gboolean _datetimes_equal(GDateTime *dt1, GDateTime *dt2); void contact_list_init(void) @@ -80,7 +81,7 @@ contact_list_remove(const char * const jid) gboolean contact_list_update_contact(const char * const jid, const char * const presence, - const char * const status) + const char * const status, GDateTime *last_activity) { gboolean changed = FALSE; PContact contact = g_hash_table_lookup(contacts, jid); @@ -99,6 +100,11 @@ contact_list_update_contact(const char * const jid, const char * const presence, changed = TRUE; } + if (!_datetimes_equal(p_contact_last_activity(contact), last_activity)) { + p_contact_set_last_activity(contact, last_activity); + changed = TRUE; + } + return changed; } @@ -173,3 +179,18 @@ gboolean _key_equals(void *key1, void *key2) return (g_strcmp0(str1, str2) == 0); } + +static gboolean +_datetimes_equal(GDateTime *dt1, GDateTime *dt2) +{ + if ((dt1 == NULL) && (dt2 == NULL)) { + return TRUE; + } else if ((dt1 == NULL) && (dt2 != NULL)) { + return FALSE; + } else if ((dt1 != NULL) && (dt2 == NULL)) { + return FALSE; + } else { + return g_date_time_equal(dt1, dt2); + } +} + |