comparison libpurple/status.c @ 16810:49cc59b2490e

Give offline buddies that support offline messaging a higher score than offline buddies that don't.
author Sean Egan <seanegan@gmail.com>
date Thu, 03 May 2007 06:41:59 +0000
parents c4460fa22886
children 844ed0418744
comparison
equal deleted inserted replaced
16809:c4460fa22886 16810:49cc59b2490e
136 136
137 static GHashTable *buddy_presences = NULL; 137 static GHashTable *buddy_presences = NULL;
138 138
139 #define SCORE_IDLE 8 139 #define SCORE_IDLE 8
140 #define SCORE_IDLE_TIME 9 140 #define SCORE_IDLE_TIME 9
141 #define SCORE_OFFLINE_MESSAGE 10
141 142
142 /************************************************************************** 143 /**************************************************************************
143 * PurpleStatusPrimitive API 144 * PurpleStatusPrimitive API
144 **************************************************************************/ 145 **************************************************************************/
145 static struct PurpleStatusPrimitiveMap 146 static struct PurpleStatusPrimitiveMap
1570 for (l = purple_presence_get_statuses(presence1); l != NULL; l = l->next) 1571 for (l = purple_presence_get_statuses(presence1); l != NULL; l = l->next)
1571 { 1572 {
1572 PurpleStatus *status = (PurpleStatus *)l->data; 1573 PurpleStatus *status = (PurpleStatus *)l->data;
1573 PurpleStatusType *type = purple_status_get_type(status); 1574 PurpleStatusType *type = purple_status_get_type(status);
1574 1575
1575 if (purple_status_is_active(status)) 1576 if (purple_status_is_active(status)) {
1576 score1 += primitive_scores[purple_status_type_get_primitive(type)]; 1577 score1 += primitive_scores[purple_status_type_get_primitive(type)];
1578 if (!purple_status_is_online(status)) {
1579 PurpleBuddy *b = purple_presence_get_buddy(presence1);
1580 if (b && purple_account_supports_offline_message(purple_buddy_get_account(b),b))
1581 score1 += primitive_scores[SCORE_OFFLINE_MESSAGE];
1582 }
1583 }
1577 } 1584 }
1578 score1 += purple_account_get_int(purple_presence_get_account(presence1), "score", 0); 1585 score1 += purple_account_get_int(purple_presence_get_account(presence1), "score", 0);
1579 1586
1580 /* Compute the score of the second set of statuses. */ 1587 /* Compute the score of the second set of statuses. */
1581 for (l = purple_presence_get_statuses(presence2); l != NULL; l = l->next) 1588 for (l = purple_presence_get_statuses(presence2); l != NULL; l = l->next)
1582 { 1589 {
1583 PurpleStatus *status = (PurpleStatus *)l->data; 1590 PurpleStatus *status = (PurpleStatus *)l->data;
1584 PurpleStatusType *type = purple_status_get_type(status); 1591 PurpleStatusType *type = purple_status_get_type(status);
1585 1592
1586 if (purple_status_is_active(status)) 1593 if (purple_status_is_active(status)) {
1587 score2 += primitive_scores[purple_status_type_get_primitive(type)]; 1594 score2 += primitive_scores[purple_status_type_get_primitive(type)];
1595 if (!purple_status_is_online(status)) {
1596 PurpleBuddy *b = purple_presence_get_buddy(presence2);
1597 if (b && purple_account_supports_offline_message(purple_buddy_get_account(b),b))
1598 score2 += primitive_scores[SCORE_OFFLINE_MESSAGE];
1599 }
1600
1601 }
1588 } 1602 }
1589 score2 += purple_account_get_int(purple_presence_get_account(presence2), "score", 0); 1603 score2 += purple_account_get_int(purple_presence_get_account(presence2), "score", 0);
1590 1604
1591 idle1 = purple_presence_is_idle(presence1); 1605 idle1 = purple_presence_is_idle(presence1);
1592 idle2 = purple_presence_is_idle(presence2); 1606 idle2 = purple_presence_is_idle(presence2);
1686 primitive_scores[PURPLE_STATUS_AWAY]); 1700 primitive_scores[PURPLE_STATUS_AWAY]);
1687 purple_prefs_add_int("/purple/status/scores/extended_away", 1701 purple_prefs_add_int("/purple/status/scores/extended_away",
1688 primitive_scores[PURPLE_STATUS_EXTENDED_AWAY]); 1702 primitive_scores[PURPLE_STATUS_EXTENDED_AWAY]);
1689 purple_prefs_add_int("/purple/status/scores/idle", 1703 purple_prefs_add_int("/purple/status/scores/idle",
1690 primitive_scores[SCORE_IDLE]); 1704 primitive_scores[SCORE_IDLE]);
1705 purple_prefs_add_int("/purple/status/scores/offline_msg",
1706 primitive_scores[SCORE_OFFLINE_MESSAGE]);
1691 1707
1692 purple_prefs_connect_callback(handle, "/purple/status/scores/offline", 1708 purple_prefs_connect_callback(handle, "/purple/status/scores/offline",
1693 score_pref_changed_cb, 1709 score_pref_changed_cb,
1694 GINT_TO_POINTER(PURPLE_STATUS_OFFLINE)); 1710 GINT_TO_POINTER(PURPLE_STATUS_OFFLINE));
1695 purple_prefs_connect_callback(handle, "/purple/status/scores/available", 1711 purple_prefs_connect_callback(handle, "/purple/status/scores/available",
1705 score_pref_changed_cb, 1721 score_pref_changed_cb,
1706 GINT_TO_POINTER(PURPLE_STATUS_EXTENDED_AWAY)); 1722 GINT_TO_POINTER(PURPLE_STATUS_EXTENDED_AWAY));
1707 purple_prefs_connect_callback(handle, "/purple/status/scores/idle", 1723 purple_prefs_connect_callback(handle, "/purple/status/scores/idle",
1708 score_pref_changed_cb, 1724 score_pref_changed_cb,
1709 GINT_TO_POINTER(SCORE_IDLE)); 1725 GINT_TO_POINTER(SCORE_IDLE));
1726 purple_prefs_connect_callback(handle, "/purple/status/scores/offline_msg",
1727 score_pref_changed_cb,
1728 GINT_TO_POINTER(SCORE_OFFLINE_MESSAGE));
1710 1729
1711 buddy_presences = g_hash_table_new_full(purple_buddy_presences_hash, 1730 buddy_presences = g_hash_table_new_full(purple_buddy_presences_hash,
1712 purple_buddy_presences_equal, 1731 purple_buddy_presences_equal,
1713 purple_buddy_presences_key_free, NULL); 1732 purple_buddy_presences_key_free, NULL);
1714 } 1733 }