Mercurial > pidgin.yaz
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 } |