--- a/hangouts.proto Thu Oct 20 20:31:33 2016 +1300
+++ b/hangouts.proto Thu Oct 20 22:37:19 2016 +1300
@@ -78,7 +78,8 @@
- required uint64 last_seen_timestamp = 1;
+ required uint64 last_seen_timestamp = 1; //in microseconds + optional uint64 usec_since_last_seen = 2; --- a/hangouts_events.c Thu Oct 20 20:31:33 2016 +1300
+++ b/hangouts_events.c Thu Oct 20 22:37:19 2016 +1300
@@ -397,6 +397,33 @@
+ HangoutsBuddy *hbuddy = purple_buddy_get_protocol_data(buddy); + HangoutsDeviceTypeFlags device_type = HANGOUTS_DEVICE_TYPE_UNKNOWN; + hbuddy = g_new0(HangoutsBuddy, 1); + purple_buddy_set_protocol_data(buddy, hbuddy); + hbuddy->in_call = presence->in_call && presence->in_call->has_call_type && presence->in_call->call_type != CALL_TYPE__CALL_TYPE_NONE; + hbuddy->last_seen = presence->last_seen ? presence->last_seen->last_seen_timestamp / 1000000 : 0; + if (presence->device_status) { + if (presence->device_status->mobile) { + device_type |= HANGOUTS_DEVICE_TYPE_MOBILE; + if (presence->device_status->desktop) { + device_type |= HANGOUTS_DEVICE_TYPE_DESKTOP; + if (presence->device_status->tablet) { + device_type |= HANGOUTS_DEVICE_TYPE_TABLET; + hbuddy->device_type = device_type; --- a/libhangouts.c Thu Oct 20 20:31:33 2016 +1300
+++ b/libhangouts.c Thu Oct 20 22:37:19 2016 +1300
@@ -412,6 +412,7 @@
PurplePresence *presence;
g_return_if_fail(buddy != NULL);
@@ -424,6 +425,25 @@
purple_notify_user_info_add_pair_html(user_info, _("Message"), message);
+ hbuddy = purple_buddy_get_protocol_data(buddy); + if (hbuddy->last_seen != 0) { + const time_t last_seen = hbuddy->last_seen; + purple_notify_user_info_add_pair_html(user_info, _("Last seen"), purple_date_format_full(localtime(&last_seen))); + purple_notify_user_info_add_pair_html(user_info, _("In call"), NULL); + if (hbuddy->device_type) { + purple_notify_user_info_add_pair_html(user_info, _("Device Type"), + hbuddy->device_type & HANGOUTS_DEVICE_TYPE_DESKTOP ? _("Desktop") : + hbuddy->device_type & HANGOUTS_DEVICE_TYPE_TABLET ? _("Tablet") : + hbuddy->device_type & HANGOUTS_DEVICE_TYPE_MOBILE ? _("Mobile") : @@ -468,6 +488,15 @@
return g_markup_printf_escaped("%s", message);
+hangouts_buddy_free(PurpleBuddy *buddy) + HangoutsBuddy *hbuddy = purple_buddy_get_protocol_data(buddy); + g_return_if_fail(hbuddy != NULL); /*****************************************************************************/
@@ -551,6 +580,7 @@
prpl_info->blist_node_menu = hangouts_node_menu;
prpl_info->status_text = hangouts_status_text;
prpl_info->tooltip_text = hangouts_tooltip_text;
+ prpl_info->buddy_free = hangouts_buddy_free; @@ -770,6 +800,7 @@
prpl_info->list_icon = hangouts_list_icon;
prpl_info->status_text = hangouts_status_text;
prpl_info->tooltip_text = hangouts_tooltip_text;
+ prpl_info->buddy_free = hangouts_buddy_free; prpl_info->get_info = hangouts_get_info;
prpl_info->set_status = hangouts_set_status;
--- a/libhangouts.h Thu Oct 20 20:31:33 2016 +1300
+++ b/libhangouts.h Thu Oct 20 22:37:19 2016 +1300
@@ -103,6 +103,21 @@
+ HANGOUTS_DEVICE_TYPE_UNKNOWN = 0x0000, + HANGOUTS_DEVICE_TYPE_MOBILE = 0x0001, + HANGOUTS_DEVICE_TYPE_DESKTOP = 0x0002, + HANGOUTS_DEVICE_TYPE_TABLET = 0x0004 +} HangoutsDeviceTypeFlags; + HangoutsDeviceTypeFlags device_type; gboolean hangouts_is_valid_id(const gchar *id);