566 // Helper routine for buffer item_{lock,unlock,toggle_lock} |
566 // Helper routine for buffer item_{lock,unlock,toggle_lock} |
567 // "lock" values: 1=lock 0=unlock -1=invert |
567 // "lock" values: 1=lock 0=unlock -1=invert |
568 static void roster_buddylock(char *bjid, int lock) |
568 static void roster_buddylock(char *bjid, int lock) |
569 { |
569 { |
570 gpointer bud = NULL; |
570 gpointer bud = NULL; |
571 bool may_need_refresh = FALSE; |
|
572 |
571 |
573 // Allow special jid "" or "." (current buddy) |
572 // Allow special jid "" or "." (current buddy) |
574 if (bjid && (!*bjid || !strcmp(bjid, "."))) |
573 if (bjid && (!*bjid || !strcmp(bjid, "."))) |
575 bjid = NULL; |
574 bjid = NULL; |
576 |
575 |
586 ROSTER_TYPE_USER|ROSTER_TYPE_ROOM); |
585 ROSTER_TYPE_USER|ROSTER_TYPE_ROOM); |
587 if (roster_elt) |
586 if (roster_elt) |
588 bud = roster_elt->data; |
587 bud = roster_elt->data; |
589 else |
588 else |
590 scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster."); |
589 scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster."); |
591 may_need_refresh = TRUE; |
|
592 } |
590 } |
593 } else { |
591 } else { |
594 // Use the current buddy |
592 // Use the current buddy |
595 if (current_buddy) |
593 if (current_buddy) |
596 bud = BUDDATA(current_buddy); |
594 bud = BUDDATA(current_buddy); |
599 // Update the ROSTER_FLAG_USRLOCK flag |
597 // Update the ROSTER_FLAG_USRLOCK flag |
600 if (bud) { |
598 if (bud) { |
601 if (lock == -1) |
599 if (lock == -1) |
602 lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK); |
600 lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK); |
603 buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock); |
601 buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock); |
604 if (may_need_refresh) { |
602 buddylist_defer_build(); |
605 buddylist_defer_build(); |
603 scr_update_roster(); |
606 update_roster = TRUE; |
|
607 } |
|
608 } |
604 } |
609 } |
605 } |
610 |
606 |
611 static void roster_resourcelock(char *jidres, gboolean lock) { |
607 static void roster_resourcelock(char *jidres, gboolean lock) { |
612 gpointer bud = NULL; |
608 gpointer bud = NULL; |
818 return; |
814 return; |
819 } |
815 } |
820 |
816 |
821 if (!strcasecmp(subcmd, "top")) { |
817 if (!strcasecmp(subcmd, "top")) { |
822 scr_roster_top(); |
818 scr_roster_top(); |
823 update_roster = TRUE; |
|
824 } else if (!strcasecmp(subcmd, "bottom")) { |
819 } else if (!strcasecmp(subcmd, "bottom")) { |
825 scr_roster_bottom(); |
820 scr_roster_bottom(); |
826 update_roster = TRUE; |
|
827 } else if (!strcasecmp(subcmd, "hide")) { |
821 } else if (!strcasecmp(subcmd, "hide")) { |
828 scr_roster_visibility(0); |
822 scr_roster_visibility(0); |
829 } else if (!strcasecmp(subcmd, "show")) { |
823 } else if (!strcasecmp(subcmd, "show")) { |
830 scr_roster_visibility(1); |
824 scr_roster_visibility(1); |
831 } else if (!strcasecmp(subcmd, "toggle")) { |
825 } else if (!strcasecmp(subcmd, "toggle")) { |
832 scr_roster_visibility(-1); |
826 scr_roster_visibility(-1); |
833 } else if (!strcasecmp(subcmd, "hide_offline")) { |
827 } else if (!strcasecmp(subcmd, "hide_offline")) { |
834 buddylist_set_hide_offline_buddies(TRUE); |
828 buddylist_set_hide_offline_buddies(TRUE); |
835 if (current_buddy) |
829 scr_update_roster(); |
836 buddylist_defer_build(); |
|
837 update_roster = TRUE; |
|
838 } else if (!strcasecmp(subcmd, "show_offline")) { |
830 } else if (!strcasecmp(subcmd, "show_offline")) { |
839 buddylist_set_hide_offline_buddies(FALSE); |
831 buddylist_set_hide_offline_buddies(FALSE); |
840 buddylist_defer_build(); |
832 scr_update_roster(); |
841 update_roster = TRUE; |
|
842 } else if (!strcasecmp(subcmd, "toggle_offline")) { |
833 } else if (!strcasecmp(subcmd, "toggle_offline")) { |
843 buddylist_set_hide_offline_buddies(-1); |
834 buddylist_set_hide_offline_buddies(-1); |
844 buddylist_defer_build(); |
835 scr_update_roster(); |
845 update_roster = TRUE; |
|
846 } else if (!strcasecmp(subcmd, "display")) { |
836 } else if (!strcasecmp(subcmd, "display")) { |
847 scr_roster_display(arg); |
837 scr_roster_display(arg); |
848 } else if (!strcasecmp(subcmd, "item_lock")) { |
838 } else if (!strcasecmp(subcmd, "item_lock")) { |
849 roster_buddylock(arg, 1); |
839 roster_buddylock(arg, 1); |
850 } else if (!strcasecmp(subcmd, "item_unlock")) { |
840 } else if (!strcasecmp(subcmd, "item_unlock")) { |
865 scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?"); |
855 scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?"); |
866 free_arg_lst(paramlst); |
856 free_arg_lst(paramlst); |
867 return; |
857 return; |
868 } |
858 } |
869 scr_roster_search(arg); |
859 scr_roster_search(arg); |
870 update_roster = TRUE; |
|
871 } else if (!strcasecmp(subcmd, "up")) { |
860 } else if (!strcasecmp(subcmd, "up")) { |
872 roster_updown(-1, arg); |
861 roster_updown(-1, arg); |
873 } else if (!strcasecmp(subcmd, "down")) { |
862 } else if (!strcasecmp(subcmd, "down")) { |
874 roster_updown(1, arg); |
863 roster_updown(1, arg); |
875 } else if (!strcasecmp(subcmd, "group_prev")) { |
864 } else if (!strcasecmp(subcmd, "group_prev")) { |
911 wildcard = to_utf8(arglist[1]); |
900 wildcard = to_utf8(arglist[1]); |
912 color = arglist[2]; |
901 color = arglist[2]; |
913 |
902 |
914 if (status && !strcmp(status, "clear")) { // Not a color command, clear all |
903 if (status && !strcmp(status, "clear")) { // Not a color command, clear all |
915 scr_roster_clear_color(); |
904 scr_roster_clear_color(); |
916 update_roster = TRUE; |
|
917 } else { |
905 } else { |
918 if (!status || !*status || !wildcard || !*wildcard || !color || !*color) { |
906 if (!status || !*status || !wildcard || !*wildcard || !color || !*color) { |
919 scr_LogPrint(LPRINT_NORMAL, "Missing argument"); |
907 scr_LogPrint(LPRINT_NORMAL, "Missing argument"); |
920 } else { |
908 } else { |
921 update_roster = scr_roster_color(status, wildcard, color) || |
909 scr_roster_color(status, wildcard, color); |
922 update_roster; |
|
923 } |
910 } |
924 } |
911 } |
925 free_arg_lst(arglist); |
912 free_arg_lst(arglist); |
926 g_free(wildcard); |
913 g_free(wildcard); |
927 } else if (!strcasecmp(subcmd, "muc")) { |
914 } else if (!strcasecmp(subcmd, "muc")) { |
2400 gchar *alias, *value; |
2387 gchar *alias, *value; |
2401 |
2388 |
2402 assign = parse_assigment(arg, &alias, &value); |
2389 assign = parse_assigment(arg, &alias, &value); |
2403 if (!alias) { |
2390 if (!alias) { |
2404 settings_foreach(SETTINGS_TYPE_ALIAS, &dump_alias, NULL); |
2391 settings_foreach(SETTINGS_TYPE_ALIAS, &dump_alias, NULL); |
2405 update_roster = TRUE; |
2392 scr_update_roster(); |
2406 return; |
2393 return; |
2407 } |
2394 } |
2408 if (!assign) { // This is a query |
2395 if (!assign) { // This is a query |
2409 const char *val = settings_get(SETTINGS_TYPE_ALIAS, alias); |
2396 const char *val = settings_get(SETTINGS_TYPE_ALIAS, alias); |
2410 // NOTE: LPRINT_NOTUTF8 here, see below why it isn't encoded... |
2397 // NOTE: LPRINT_NOTUTF8 here, see below why it isn't encoded... |
2925 } |
2912 } |
2926 // Delete the room |
2913 // Delete the room |
2927 roster_del_user(buddy_getjid(bud)); |
2914 roster_del_user(buddy_getjid(bud)); |
2928 scr_update_buddy_window(); |
2915 scr_update_buddy_window(); |
2929 buddylist_defer_build(); |
2916 buddylist_defer_build(); |
2930 update_roster = TRUE; |
2917 scr_update_roster(); |
2931 } |
2918 } |
2932 |
2919 |
2933 static void room_topic(gpointer bud, char *arg) |
2920 static void room_topic(gpointer bud, char *arg) |
2934 { |
2921 { |
2935 if (!buddy_getinsideroom(bud)) { |
2922 if (!buddy_getinsideroom(bud)) { |