comparison mcabber/mcabber/roster.c @ 1802:b135572fcd26

Add urgent flag per screen buffer
author Mikael Berthe <mikael@lilotux.net>
date Sun, 21 Mar 2010 15:13:33 +0100
parents e6e89b1d7831
children 7d3060070d10
comparison
equal deleted inserted replaced
1801:07e73049f7c5 1802:b135572fcd26
101 /* To keep track of last status message */ 101 /* To keep track of last status message */
102 gchar *offline_status_message; 102 gchar *offline_status_message;
103 103
104 /* Flag used for the UI */ 104 /* Flag used for the UI */
105 guint flags; 105 guint flags;
106 guint ui_prio; // Boolean, positive if "attention" is requested
106 107
107 // list: user -> points to his group; group -> points to its users list 108 // list: user -> points to his group; group -> points to its users list
108 GSList *list; 109 GSList *list;
109 } roster; 110 } roster;
110 111
608 unread_list = g_slist_append(unread_list, roster_usr); 609 unread_list = g_slist_append(unread_list, roster_usr);
609 } else { 610 } else {
610 if (roster_usr->flags & ROSTER_FLAG_MSG) 611 if (roster_usr->flags & ROSTER_FLAG_MSG)
611 unread_list_modified = TRUE; 612 unread_list_modified = TRUE;
612 roster_usr->flags &= ~ROSTER_FLAG_MSG; 613 roster_usr->flags &= ~ROSTER_FLAG_MSG;
614 roster_usr->ui_prio = 0;
613 if (unread_list) { 615 if (unread_list) {
614 GSList *node = g_slist_find(unread_list, roster_usr); 616 GSList *node = g_slist_find(unread_list, roster_usr);
615 if (node) 617 if (node)
616 unread_list = g_slist_delete_link(unread_list, node); 618 unread_list = g_slist_delete_link(unread_list, node);
617 } 619 }
643 // Message flag is FALSE. 645 // Message flag is FALSE.
644 guint msg = FALSE; 646 guint msg = FALSE;
645 if (roster_usr->flags & ROSTER_FLAG_MSG) 647 if (roster_usr->flags & ROSTER_FLAG_MSG)
646 unread_list_modified = TRUE; 648 unread_list_modified = TRUE;
647 roster_usr->flags &= ~ROSTER_FLAG_MSG; 649 roster_usr->flags &= ~ROSTER_FLAG_MSG;
650 roster_usr->ui_prio = 0;
648 if (unread_list) { 651 if (unread_list) {
649 GSList *node = g_slist_find(unread_list, roster_usr); 652 GSList *node = g_slist_find(unread_list, roster_usr);
650 if (node) 653 if (node)
651 unread_list = g_slist_delete_link(unread_list, node); 654 unread_list = g_slist_delete_link(unread_list, node);
652 } 655 }
681 /* Call external command */ 684 /* Call external command */
682 hk_ext_cmd("", 'U', (guchar)MIN(255, unread_count), NULL); 685 hk_ext_cmd("", 'U', (guchar)MIN(255, unread_count), NULL);
683 } 686 }
684 } 687 }
685 688
689 // roster_setuiprio(jid, special, prio_value, action)
690 // Set the "attention" priority value for the given roster item.
691 // Note that this function doesn't create the roster item if it doesn't exist.
692 void roster_setuiprio(const char *jid, guint special, guint value,
693 enum setuiprio_ops action)
694 {
695 guint oldval, newval;
696 roster *roster_usr;
697
698 if (special) {
699 roster_usr = &roster_special;
700 } else {
701 GSList *sl_user = roster_find(jid, jidsearch,
702 ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT);
703 if (!sl_user)
704 return;
705
706 roster_usr = (roster*)sl_user->data;
707 }
708 oldval = roster_usr->ui_prio;
709
710 if (action == prio_max)
711 newval = MAX(oldval, value);
712 else if (action == prio_inc)
713 newval = oldval + value;
714 else // prio_set
715 newval = value;
716
717 roster_usr->ui_prio = newval;
718 }
719
720 guint roster_getuiprio(const char *jid, guint special)
721 {
722 roster *roster_usr;
723 GSList *sl_user;
724
725 if (special) {
726 roster_usr = &roster_special;
727 return roster_usr->ui_prio;
728 }
729
730 sl_user = roster_find(jid, jidsearch,
731 ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT);
732 if (!sl_user)
733 return 0;
734 roster_usr = (roster*)sl_user->data;
735 return roster_usr->ui_prio;
736 }
737
686 const char *roster_getname(const char *jid) 738 const char *roster_getname(const char *jid)
687 { 739 {
688 GSList *sl_user; 740 GSList *sl_user;
689 roster *roster_usr; 741 roster *roster_usr;
690 742
1392 { 1444 {
1393 roster *roster_usr = rosterdata; 1445 roster *roster_usr = rosterdata;
1394 return roster_usr->flags; 1446 return roster_usr->flags;
1395 } 1447 }
1396 1448
1449 guint buddy_getuiprio(gpointer rosterdata)
1450 {
1451 roster *roster_usr = rosterdata;
1452 return roster_usr->ui_prio;
1453 }
1454
1397 // buddy_setonserverflag() 1455 // buddy_setonserverflag()
1398 // Set the on_server flag 1456 // Set the on_server flag
1399 void buddy_setonserverflag(gpointer rosterdata, guint onserver) 1457 void buddy_setonserverflag(gpointer rosterdata, guint onserver)
1400 { 1458 {
1401 roster *roster_usr = rosterdata; 1459 roster *roster_usr = rosterdata;