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)