mcabber/mcabber/commands.c
changeset 2292 f181418db215
parent 2291 0d350e979bde
child 2310 e26c7709e023
equal deleted inserted replaced
2291:0d350e979bde 2292:f181418db215
   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")) {
  1256     scr_roster_prev_group();
  1243     scr_roster_prev_group();
  1257 
  1244 
  1258   buddy_hide_group(group, group_state);
  1245   buddy_hide_group(group, group_state);
  1259 
  1246 
  1260   buddylist_defer_build();
  1247   buddylist_defer_build();
  1261   update_roster = TRUE;
  1248   scr_update_roster();
  1262 
  1249 
  1263 do_group_return:
  1250 do_group_return:
  1264   free_arg_lst(paramlst);
  1251   free_arg_lst(paramlst);
  1265 }
  1252 }
  1266 
  1253 
  2225     }
  2212     }
  2226   }
  2213   }
  2227 
  2214 
  2228   g_free(name_utf8);
  2215   g_free(name_utf8);
  2229   g_free(newname);
  2216   g_free(newname);
  2230   update_roster = TRUE;
  2217   scr_update_roster();
  2231 }
  2218 }
  2232 
  2219 
  2233 static void do_move(char *arg)
  2220 static void do_move(char *arg)
  2234 {
  2221 {
  2235   gpointer bud;
  2222   gpointer bud;
  2294     }
  2281     }
  2295   }
  2282   }
  2296 
  2283 
  2297   g_free(group_utf8);
  2284   g_free(group_utf8);
  2298   g_free(newgroupname);
  2285   g_free(newgroupname);
  2299   update_roster = TRUE;
  2286   scr_update_roster();
  2300 }
  2287 }
  2301 
  2288 
  2302 static void list_option_cb(char *k, char *v, void *f)
  2289 static void list_option_cb(char *k, char *v, void *f)
  2303 {
  2290 {
  2304   if (strncmp(k, "password", 8) && strcmp(k, "pgp_passphrase")) {
  2291   if (strncmp(k, "password", 8) && strcmp(k, "pgp_passphrase")) {
  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...
  2626 
  2613 
  2627   g_free(roomname_tmp);
  2614   g_free(roomname_tmp);
  2628   g_free(nick);
  2615   g_free(nick);
  2629   g_free(pass_utf8);
  2616   g_free(pass_utf8);
  2630   buddylist_defer_build();
  2617   buddylist_defer_build();
  2631   update_roster = TRUE;
  2618   scr_update_roster();
  2632   free_arg_lst(paramlst);
  2619   free_arg_lst(paramlst);
  2633 }
  2620 }
  2634 
  2621 
  2635 static void room_invite(gpointer bud, char *arg)
  2622 static void room_invite(gpointer bud, char *arg)
  2636 {
  2623 {
  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)) {