Mercurial > pidgin
comparison libpurple/status.c @ 22627:c240e7eb379d
merge of 'b2b2efabbafab6588e02ceb16509419dcb0c79e9'
and 'b426234bbef68ed60bc6f15fc35ea1690d5a8ed1'
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 04 Apr 2008 06:11:09 +0000 |
parents | f9cdfdae0594 |
children | 21f1acb9090f |
comparison
equal
deleted
inserted
replaced
22626:eccdd341dc6e | 22627:c240e7eb379d |
---|---|
1545 g_return_val_if_fail(presence != NULL, 0); | 1545 g_return_val_if_fail(presence != NULL, 0); |
1546 | 1546 |
1547 return purple_presence_is_online(presence) ? presence->login_time : 0; | 1547 return purple_presence_is_online(presence) ? presence->login_time : 0; |
1548 } | 1548 } |
1549 | 1549 |
1550 static int | |
1551 purple_presence_compute_score(const PurplePresence *presence) | |
1552 { | |
1553 GList *l; | |
1554 int score = 0; | |
1555 | |
1556 for (l = purple_presence_get_statuses(presence); l != NULL; l = l->next) { | |
1557 PurpleStatus *status = (PurpleStatus *)l->data; | |
1558 PurpleStatusType *type = purple_status_get_type(status); | |
1559 | |
1560 if (purple_status_is_active(status)) { | |
1561 score += primitive_scores[purple_status_type_get_primitive(type)]; | |
1562 if (!purple_status_is_online(status)) { | |
1563 PurpleBuddy *b = purple_presence_get_buddy(presence); | |
1564 if (b && purple_account_supports_offline_message(purple_buddy_get_account(b), b)) | |
1565 score += primitive_scores[SCORE_OFFLINE_MESSAGE]; | |
1566 } | |
1567 } | |
1568 } | |
1569 score += purple_account_get_int(purple_presence_get_account(presence), "score", 0); | |
1570 if (purple_presence_is_idle(presence)) | |
1571 score += primitive_scores[SCORE_IDLE]; | |
1572 return score; | |
1573 } | |
1574 | |
1550 gint | 1575 gint |
1551 purple_presence_compare(const PurplePresence *presence1, | 1576 purple_presence_compare(const PurplePresence *presence1, |
1552 const PurplePresence *presence2) | 1577 const PurplePresence *presence2) |
1553 { | 1578 { |
1554 gboolean idle1, idle2; | |
1555 time_t idle_time_1, idle_time_2; | 1579 time_t idle_time_1, idle_time_2; |
1556 int score1 = 0, score2 = 0; | 1580 int score1 = 0, score2 = 0; |
1557 GList *l; | |
1558 | 1581 |
1559 if (presence1 == presence2) | 1582 if (presence1 == presence2) |
1560 return 0; | 1583 return 0; |
1561 else if (presence1 == NULL) | 1584 else if (presence1 == NULL) |
1562 return 1; | 1585 return 1; |
1563 else if (presence2 == NULL) | 1586 else if (presence2 == NULL) |
1564 return -1; | 1587 return -1; |
1565 | 1588 |
1589 if (purple_presence_is_online(presence1) && | |
1590 !purple_presence_is_online(presence2)) | |
1591 return -1; | |
1592 else if (purple_presence_is_online(presence2) && | |
1593 !purple_presence_is_online(presence1)) | |
1594 return 1; | |
1595 | |
1566 /* Compute the score of the first set of statuses. */ | 1596 /* Compute the score of the first set of statuses. */ |
1567 for (l = purple_presence_get_statuses(presence1); l != NULL; l = l->next) | 1597 score1 = purple_presence_compute_score(presence1); |
1568 { | |
1569 PurpleStatus *status = (PurpleStatus *)l->data; | |
1570 PurpleStatusType *type = purple_status_get_type(status); | |
1571 | |
1572 if (purple_status_is_active(status)) { | |
1573 score1 += primitive_scores[purple_status_type_get_primitive(type)]; | |
1574 if (!purple_status_is_online(status)) { | |
1575 PurpleBuddy *b = purple_presence_get_buddy(presence1); | |
1576 if (b && purple_account_supports_offline_message(purple_buddy_get_account(b),b)) | |
1577 score1 += primitive_scores[SCORE_OFFLINE_MESSAGE]; | |
1578 } | |
1579 } | |
1580 } | |
1581 score1 += purple_account_get_int(purple_presence_get_account(presence1), "score", 0); | |
1582 | 1598 |
1583 /* Compute the score of the second set of statuses. */ | 1599 /* Compute the score of the second set of statuses. */ |
1584 for (l = purple_presence_get_statuses(presence2); l != NULL; l = l->next) | 1600 score2 = purple_presence_compute_score(presence2); |
1585 { | |
1586 PurpleStatus *status = (PurpleStatus *)l->data; | |
1587 PurpleStatusType *type = purple_status_get_type(status); | |
1588 | |
1589 if (purple_status_is_active(status)) { | |
1590 score2 += primitive_scores[purple_status_type_get_primitive(type)]; | |
1591 if (!purple_status_is_online(status)) { | |
1592 PurpleBuddy *b = purple_presence_get_buddy(presence2); | |
1593 if (b && purple_account_supports_offline_message(purple_buddy_get_account(b),b)) | |
1594 score2 += primitive_scores[SCORE_OFFLINE_MESSAGE]; | |
1595 } | |
1596 | |
1597 } | |
1598 } | |
1599 score2 += purple_account_get_int(purple_presence_get_account(presence2), "score", 0); | |
1600 | |
1601 idle1 = purple_presence_is_idle(presence1); | |
1602 idle2 = purple_presence_is_idle(presence2); | |
1603 | |
1604 if (idle1) | |
1605 score1 += primitive_scores[SCORE_IDLE]; | |
1606 | |
1607 if (idle2) | |
1608 score2 += primitive_scores[SCORE_IDLE]; | |
1609 | 1601 |
1610 idle_time_1 = time(NULL) - purple_presence_get_idle_time(presence1); | 1602 idle_time_1 = time(NULL) - purple_presence_get_idle_time(presence1); |
1611 idle_time_2 = time(NULL) - purple_presence_get_idle_time(presence2); | 1603 idle_time_2 = time(NULL) - purple_presence_get_idle_time(presence2); |
1612 | 1604 |
1613 if (idle_time_1 > idle_time_2) | 1605 if (idle_time_1 > idle_time_2) |