comparison pidgin/gtkblist.c @ 29486:4da3415a8df6

Hmm, I misread that check. Now we compile.
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sun, 23 Aug 2009 16:57:51 +0000
parents 48ea900ee72a
children 6e9917e067e6
comparison
equal deleted inserted replaced
29485:48ea900ee72a 29486:4da3415a8df6
7405 gtk_tree_store_insert_after(gtkblist->treemodel, iter, 7405 gtk_tree_store_insert_after(gtkblist->treemodel, iter,
7406 node->parent ? &parent_iter : NULL, 7406 node->parent ? &parent_iter : NULL,
7407 sibling ? &sibling_iter : NULL); 7407 sibling ? &sibling_iter : NULL);
7408 } 7408 }
7409 7409
7410 static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter)
7411 {
7412 GtkTreeIter more_z;
7413
7414 const char *my_name;
7415
7416 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
7417 my_name = purple_contact_get_alias((PurpleContact*)node);
7418 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
7419 my_name = purple_chat_get_name((PurpleChat*)node);
7420 } else {
7421 sort_method_none(node, blist, groupiter, cur, iter);
7422 return;
7423 }
7424
7425
7426 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) {
7427 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
7428 return;
7429 }
7430
7431 do {
7432 GValue val;
7433 PurpleBlistNode *n;
7434 const char *this_name;
7435 int cmp;
7436
7437 val.g_type = 0;
7438 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val);
7439 n = g_value_get_pointer(&val);
7440
7441 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) {
7442 this_name = purple_contact_get_alias((PurpleContact*)n);
7443 } else if(PURPLE_BLIST_NODE_IS_CHAT(n)) {
7444 this_name = purple_chat_get_name((PurpleChat*)n);
7445 } else {
7446 this_name = NULL;
7447 }
7448
7449 cmp = purple_utf8_strcasecmp(my_name, this_name);
7450
7451 if(this_name && (cmp < 0 || (cmp == 0 && node < n))) {
7452 if(cur) {
7453 gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z);
7454 *iter = *cur;
7455 return;
7456 } else {
7457 gtk_tree_store_insert_before(gtkblist->treemodel, iter,
7458 &groupiter, &more_z);
7459 return;
7460 }
7461 }
7462 g_value_unset(&val);
7463 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z));
7464
7465 if(cur) {
7466 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL);
7467 *iter = *cur;
7468 return;
7469 } else {
7470 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter);
7471 return;
7472 }
7473 }
7474
7475 static void sort_method_status(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter)
7476 {
7477 GtkTreeIter more_z;
7478
7479 PurpleBuddy *my_buddy, *this_buddy;
7480
7481 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
7482 my_buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
7483 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
7484 if (cur != NULL) {
7485 *iter = *cur;
7486 return;
7487 }
7488
7489 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter);
7490 return;
7491 } else {
7492 sort_method_none(node, blist, groupiter, cur, iter);
7493 return;
7494 }
7495
7496
7497 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) {
7498 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
7499 return;
7500 }
7501
7502 do {
7503 GValue val;
7504 PurpleBlistNode *n;
7505 gint name_cmp;
7506 gint presence_cmp;
7507
7508 val.g_type = 0;
7509 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val);
7510 n = g_value_get_pointer(&val);
7511
7512 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) {
7513 this_buddy = purple_contact_get_priority_buddy((PurpleContact*)n);
7514 } else {
7515 this_buddy = NULL;
7516 }
7517
7518 name_cmp = purple_utf8_strcasecmp(
7519 purple_contact_get_alias(purple_buddy_get_contact(my_buddy)),
7520 (this_buddy
7521 ? purple_contact_get_alias(purple_buddy_get_contact(this_buddy))
7522 : NULL));
7523
7524 presence_cmp = purple_presence_compare(
7525 purple_buddy_get_presence(my_buddy),
7526 this_buddy ? purple_buddy_get_presence(this_buddy) : NULL);
7527
7528 if (this_buddy == NULL ||
7529 (presence_cmp < 0 ||
7530 (presence_cmp == 0 &&
7531 (name_cmp < 0 || (name_cmp == 0 && node < n)))))
7532 {
7533 if (cur != NULL)
7534 {
7535 gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z);
7536 *iter = *cur;
7537 return;
7538 }
7539 else
7540 {
7541 gtk_tree_store_insert_before(gtkblist->treemodel, iter,
7542 &groupiter, &more_z);
7543 return;
7544 }
7545 }
7546
7547 g_value_unset(&val);
7548 }
7549 while (gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel),
7550 &more_z));
7551
7552 if (cur) {
7553 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL);
7554 *iter = *cur;
7555 return;
7556 } else {
7557 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter);
7558 return;
7559 }
7560 }
7561
7562 static void sort_method_log_activity(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter)
7563 {
7564 GtkTreeIter more_z;
7565
7566 int activity_score = 0, this_log_activity_score = 0;
7567 const char *buddy_name, *this_buddy_name;
7568
7569 if(cur && (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter) == 1)) {
7570 *iter = *cur;
7571 return;
7572 }
7573
7574 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) {
7575 PurpleBlistNode *n;
7576 PurpleBuddy *buddy;
7577 for (n = node->child; n; n = n->next) {
7578 buddy = (PurpleBuddy*)n;
7579 activity_score += purple_log_get_activity_score(PURPLE_LOG_IM, buddy->name, buddy->account);
7580 }
7581 buddy_name = purple_contact_get_alias((PurpleContact*)node);
7582 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) {
7583 /* we don't have a reliable way of getting the log filename
7584 * from the chat info in the blist, yet */
7585 if (cur != NULL) {
7586 *iter = *cur;
7587 return;
7588 }
7589
7590 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter);
7591 return;
7592 } else {
7593 sort_method_none(node, blist, groupiter, cur, iter);
7594 return;
7595 }
7596
7597
7598 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) {
7599 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
7600 return;
7601 }
7602
7603 do {
7604 GValue val;
7605 PurpleBlistNode *n;
7606 PurpleBlistNode *n2;
7607 PurpleBuddy *buddy;
7608 int cmp;
7609
7610 val.g_type = 0;
7611 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val);
7612 n = g_value_get_pointer(&val);
7613 this_log_activity_score = 0;
7614
7615 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) {
7616 for (n2 = n->child; n2; n2 = n2->next) {
7617 buddy = (PurpleBuddy*)n2;
7618 this_log_activity_score += purple_log_get_activity_score(PURPLE_LOG_IM, buddy->name, buddy->account);
7619 }
7620 this_buddy_name = purple_contact_get_alias((PurpleContact*)n);
7621 } else {
7622 this_buddy_name = NULL;
7623 }
7624
7625 cmp = purple_utf8_strcasecmp(buddy_name, this_buddy_name);
7626
7627 if (!PURPLE_BLIST_NODE_IS_CONTACT(n) || activity_score > this_log_activity_score ||
7628 ((activity_score == this_log_activity_score) &&
7629 (cmp < 0 || (cmp == 0 && node < n)))) {
7630 if (cur != NULL) {
7631 gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z);
7632 *iter = *cur;
7633 return;
7634 } else {
7635 gtk_tree_store_insert_before(gtkblist->treemodel, iter,
7636 &groupiter, &more_z);
7637 return;
7638 }
7639 }
7640 g_value_unset(&val);
7641 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z));
7642
7643 if (cur != NULL) {
7644 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL);
7645 *iter = *cur;
7646 return;
7647 } else {
7648 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter);
7649 return;
7650 }
7651 }
7652
7410 static void 7653 static void
7411 plugin_act(GtkObject *obj, PurplePluginAction *pam) 7654 plugin_act(GtkObject *obj, PurplePluginAction *pam)
7412 { 7655 {
7413 if (pam && pam->callback) 7656 if (pam && pam->callback)
7414 pam->callback(pam); 7657 pam->callback(pam);