annotate mcabber/src/commands.c @ 880:ea983a945eba

/buffer scroll_unlock: Don't always jump to the end of the buffer If there is no pending message, do not jump to the bottom of the buffer. For special buffers (e.g. for the status buffer) pending flag is currently disabled so we jump unconditionally.
author Mikael Berthe <mikael@lilotux.net>
date Sat, 27 May 2006 15:59:05 +0200
parents ee39f6d94d43
children afdd81c2c44d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
1 /*
699
ee03b56b93ee Update Copyright (2006)
Mikael Berthe <mikael@lilotux.net>
parents: 696
diff changeset
2 * commands.c -- user commands handling
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 384
diff changeset
3 *
699
ee03b56b93ee Update Copyright (2006)
Mikael Berthe <mikael@lilotux.net>
parents: 696
diff changeset
4 * Copyright (C) 2005, 2006 Mikael Berthe <bmikael@lists.lilotux.net>
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
5 *
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or (at
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
9 * your option) any later version.
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
10 *
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
14 * General Public License for more details.
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
15 *
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
19 * USA
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
20 */
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
21
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
22 #include <string.h>
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
23
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
24 #include "commands.h"
868
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
25 #include "help.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
26 #include "jabglue.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
27 #include "roster.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
28 #include "screen.h"
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
29 #include "compl.h"
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents: 108
diff changeset
30 #include "hooks.h"
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
31 #include "hbuf.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
32 #include "utils.h"
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
33 #include "settings.h"
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
34 #include "events.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
35
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
36 // Commands callbacks
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
37 static void do_roster(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
38 static void do_status(char *arg);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
39 static void do_status_to(char *arg);
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
40 static void do_add(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
41 static void do_del(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
42 static void do_group(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
43 static void do_say(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
44 static void do_msay(char *arg);
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
45 static void do_say_to(char *arg);
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
46 static void do_buffer(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
47 static void do_clear(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
48 static void do_info(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
49 static void do_rename(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
50 static void do_move(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
51 static void do_set(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
52 static void do_alias(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
53 static void do_bind(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
54 static void do_connect(char *arg);
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
55 static void do_disconnect(char *arg);
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
56 static void do_rawxml(char *arg);
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
57 static void do_room(char *arg);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
58 static void do_authorization(char *arg);
622
2b7ef605ddc6 Add /version command
Mikael Berthe <mikael@lilotux.net>
parents: 620
diff changeset
59 static void do_version(char *arg);
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
60 static void do_request(char *arg);
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
61 static void do_event(char *arg);
868
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
62 static void do_help(char *arg);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
63
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
64 // Global variable for the commands list
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
65 static GSList *Commands;
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
66
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
67
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
68 // cmd_add()
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
69 // Adds a command to the commands list and to the CMD completion list
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
70 static void cmd_add(const char *name, const char *help,
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
71 guint flags_row1, guint flags_row2, void (*f)())
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
72 {
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
73 cmd *n_cmd = g_new0(cmd, 1);
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
74 strncpy(n_cmd->name, name, 32-1);
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
75 n_cmd->help = help;
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
76 n_cmd->completion_flags[0] = flags_row1;
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
77 n_cmd->completion_flags[1] = flags_row2;
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
78 n_cmd->func = f;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
79 Commands = g_slist_append(Commands, n_cmd);
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
80 // Add to completion CMD category
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
81 compl_add_category_word(COMPL_CMD, name);
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
82 }
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
83
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
84 // cmd_init()
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
85 // Commands table initialization
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
86 void cmd_init(void)
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
87 {
124
6d2122c003c4 [/trunk] Changeset 137 by mikael
mikael
parents: 120
diff changeset
88 cmd_add("add", "Add a jabber user", COMPL_JID, 0, &do_add);
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
89 cmd_add("alias", "Add an alias", 0, 0, &do_alias);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
90 cmd_add("authorization", "Manage subscription authorizations",
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
91 COMPL_AUTH, COMPL_JID, &do_authorization);
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
92 cmd_add("bind", "Add an key binding", 0, 0, &do_bind);
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
93 cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
94 COMPL_BUFFER, 0, &do_buffer);
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 104
diff changeset
95 cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
96 cmd_add("connect", "Connect to the server", 0, 0, &do_connect);
205
e01bf6d9b4b8 [/trunk] Changeset 217 by mikael
mikael
parents: 191
diff changeset
97 cmd_add("del", "Delete the current buddy", 0, 0, &do_del);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
98 cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect);
757
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 755
diff changeset
99 cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event);
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
100 cmd_add("group", "Change group display settings", COMPL_GROUP, 0, &do_group);
868
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
101 cmd_add("help", "Display some help", COMPL_CMD, 0, &do_help);
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
102 cmd_add("info", "Show basic info on current buddy", 0, 0, &do_info);
225
d5ae42cbe1fa [/trunk] Changeset 237 by mikael
mikael
parents: 221
diff changeset
103 cmd_add("move", "Move the current buddy to another group", COMPL_GROUPNAME,
d5ae42cbe1fa [/trunk] Changeset 237 by mikael
mikael
parents: 221
diff changeset
104 0, &do_move);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
105 cmd_add("msay", "Send a multi-lines message to the selected buddy",
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
106 COMPL_MULTILINE, 0, &do_msay);
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
107 cmd_add("room", "MUC actions command", COMPL_ROOM, 0, &do_room);
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
108 cmd_add("request", "Send a Jabber IQ request", COMPL_REQUEST, COMPL_JID,
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
109 &do_request);
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
110 cmd_add("quit", "Exit the software", 0, 0, NULL);
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
111 cmd_add("rawxml", "Send a raw XML string", 0, 0, &do_rawxml);
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
112 cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename);
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
113 cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
114 &do_roster);
132
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
115 cmd_add("say", "Say something to the selected buddy", 0, 0, &do_say);
488
9e8519078e00 Enable jid completion for /say_to
Mikael Berthe <mikael@lilotux.net>
parents: 486
diff changeset
116 cmd_add("say_to", "Say something to a specific buddy", COMPL_JID, 0,
9e8519078e00 Enable jid completion for /say_to
Mikael Berthe <mikael@lilotux.net>
parents: 486
diff changeset
117 &do_say_to);
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
118 //cmd_add("search");
310
29b27c8692ea Post-0.6.3 changes
Mikael Berthe <mikael@lilotux.net>
parents: 308
diff changeset
119 cmd_add("set", "Set/query an option value", 0, 0, &do_set);
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
120 cmd_add("status", "Show or set your status", COMPL_STATUS, 0, &do_status);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
121 cmd_add("status_to", "Show or set your status for one recipient",
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
122 COMPL_JID, COMPL_STATUS, &do_status_to);
622
2b7ef605ddc6 Add /version command
Mikael Berthe <mikael@lilotux.net>
parents: 620
diff changeset
123 cmd_add("version", "Show mcabber version", 0, 0, &do_version);
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
124
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
125 // Status category
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
126 compl_add_category_word(COMPL_STATUS, "online");
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
127 compl_add_category_word(COMPL_STATUS, "avail");
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
128 compl_add_category_word(COMPL_STATUS, "invisible");
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
129 compl_add_category_word(COMPL_STATUS, "free");
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
130 compl_add_category_word(COMPL_STATUS, "dnd");
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
131 compl_add_category_word(COMPL_STATUS, "notavail");
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
132 compl_add_category_word(COMPL_STATUS, "away");
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
133
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
134 // Roster category
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
135 compl_add_category_word(COMPL_ROSTER, "bottom");
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
136 compl_add_category_word(COMPL_ROSTER, "top");
377
00809e3e327e Add "/roster up" and "/roster down"
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
137 compl_add_category_word(COMPL_ROSTER, "up");
00809e3e327e Add "/roster up" and "/roster down"
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
138 compl_add_category_word(COMPL_ROSTER, "down");
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
139 compl_add_category_word(COMPL_ROSTER, "hide");
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
140 compl_add_category_word(COMPL_ROSTER, "show");
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
141 compl_add_category_word(COMPL_ROSTER, "toggle");
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
142 compl_add_category_word(COMPL_ROSTER, "hide_offline");
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
143 compl_add_category_word(COMPL_ROSTER, "show_offline");
290
f63839a4cb35 Add /roster toggle_offline
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
144 compl_add_category_word(COMPL_ROSTER, "toggle_offline");
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 318
diff changeset
145 compl_add_category_word(COMPL_ROSTER, "alternate");
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
146 compl_add_category_word(COMPL_ROSTER, "search");
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
147 compl_add_category_word(COMPL_ROSTER, "unread_first");
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
148 compl_add_category_word(COMPL_ROSTER, "unread_next");
127
0f7ec11efd06 [/trunk] Changeset 140 by mikael
mikael
parents: 124
diff changeset
149
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
150 // Roster category
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 506
diff changeset
151 compl_add_category_word(COMPL_BUFFER, "clear");
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
152 compl_add_category_word(COMPL_BUFFER, "bottom");
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
153 compl_add_category_word(COMPL_BUFFER, "top");
508
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 506
diff changeset
154 compl_add_category_word(COMPL_BUFFER, "up");
5a2132ba2220 Add "/buffer up" and "/buffer down"
Mikael Berthe <mikael@lilotux.net>
parents: 506
diff changeset
155 compl_add_category_word(COMPL_BUFFER, "down");
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
156 compl_add_category_word(COMPL_BUFFER, "search_backward");
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
157 compl_add_category_word(COMPL_BUFFER, "search_forward");
464
e4840b288be0 Add "/buffer date"
Mikael Berthe <mikael@lilotux.net>
parents: 462
diff changeset
158 compl_add_category_word(COMPL_BUFFER, "date");
462
d580e87c11ed Add "/buffer %n"
Mikael Berthe <mikael@lilotux.net>
parents: 461
diff changeset
159 compl_add_category_word(COMPL_BUFFER, "%");
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
160 compl_add_category_word(COMPL_BUFFER, "purge");
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
161 compl_add_category_word(COMPL_BUFFER, "scroll_lock");
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
162 compl_add_category_word(COMPL_BUFFER, "scroll_unlock");
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
163 compl_add_category_word(COMPL_BUFFER, "scroll_toggle");
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
164
127
0f7ec11efd06 [/trunk] Changeset 140 by mikael
mikael
parents: 124
diff changeset
165 // Group category
240
723433a677f0 [/trunk] Changeset 253 by mikael
mikael
parents: 238
diff changeset
166 compl_add_category_word(COMPL_GROUP, "fold");
723433a677f0 [/trunk] Changeset 253 by mikael
mikael
parents: 238
diff changeset
167 compl_add_category_word(COMPL_GROUP, "unfold");
130
60694c9ddde3 [/trunk] Changeset 143 by mikael
mikael
parents: 129
diff changeset
168 compl_add_category_word(COMPL_GROUP, "toggle");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
169
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
170 // Multi-line (msay) category
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
171 compl_add_category_word(COMPL_MULTILINE, "abort");
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
172 compl_add_category_word(COMPL_MULTILINE, "begin");
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
173 compl_add_category_word(COMPL_MULTILINE, "send");
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
174 compl_add_category_word(COMPL_MULTILINE, "send_to");
796
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
175 compl_add_category_word(COMPL_MULTILINE, "toggle");
838
ea1204c8a30b Add "/msay toggle_verbatim"
Mikael Berthe <mikael@lilotux.net>
parents: 837
diff changeset
176 compl_add_category_word(COMPL_MULTILINE, "toggle_verbatim");
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
177 compl_add_category_word(COMPL_MULTILINE, "verbatim");
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
178
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
179 // Room category
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
180 compl_add_category_word(COMPL_ROOM, "affil");
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
181 compl_add_category_word(COMPL_ROOM, "ban");
599
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
182 compl_add_category_word(COMPL_ROOM, "destroy");
486
2a6a8ebb813b Add "/room invite"
Mikael Berthe <mikael@lilotux.net>
parents: 484
diff changeset
183 compl_add_category_word(COMPL_ROOM, "invite");
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
184 compl_add_category_word(COMPL_ROOM, "join");
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
185 compl_add_category_word(COMPL_ROOM, "kick");
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
186 compl_add_category_word(COMPL_ROOM, "leave");
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
187 compl_add_category_word(COMPL_ROOM, "names");
470
eaa2ad773192 Add "/room nick"
Mikael Berthe <mikael@lilotux.net>
parents: 469
diff changeset
188 compl_add_category_word(COMPL_ROOM, "nick");
490
af6e31e32d9e Add "/room privmsg"
Mikael Berthe <mikael@lilotux.net>
parents: 488
diff changeset
189 compl_add_category_word(COMPL_ROOM, "privmsg");
448
39a28cb59af3 Add "/room remove", to remove an old chatroom from the roster
Mikael Berthe <mikael@lilotux.net>
parents: 447
diff changeset
190 compl_add_category_word(COMPL_ROOM, "remove");
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
191 compl_add_category_word(COMPL_ROOM, "role");
475
fa49ac0bb8f3 Add "/room topic", and display topic changes
Mikael Berthe <mikael@lilotux.net>
parents: 472
diff changeset
192 compl_add_category_word(COMPL_ROOM, "topic");
449
e08b0c2d0e54 Add "/room unlock"
Mikael Berthe <mikael@lilotux.net>
parents: 448
diff changeset
193 compl_add_category_word(COMPL_ROOM, "unlock");
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
194 compl_add_category_word(COMPL_ROOM, "whois");
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
195
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
196 // Authorization category
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
197 compl_add_category_word(COMPL_AUTH, "allow");
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
198 compl_add_category_word(COMPL_AUTH, "cancel");
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
199 compl_add_category_word(COMPL_AUTH, "request");
835
6a732d2ad4b4 Add "/authorization request_unsubscribe"
Mikael Berthe <mikael@lilotux.net>
parents: 831
diff changeset
200 compl_add_category_word(COMPL_AUTH, "request_unsubscribe");
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
201
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
202 // Request (query) category
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
203 compl_add_category_word(COMPL_REQUEST, "time");
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
204 compl_add_category_word(COMPL_REQUEST, "version");
750
938a8791658c Add partial completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 748
diff changeset
205
938a8791658c Add partial completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 748
diff changeset
206 // Events category
938a8791658c Add partial completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 748
diff changeset
207 compl_add_category_word(COMPL_EVENTS, "accept");
755
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
208 compl_add_category_word(COMPL_EVENTS, "ignore");
750
938a8791658c Add partial completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 748
diff changeset
209 compl_add_category_word(COMPL_EVENTS, "reject");
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 94
diff changeset
210 }
94
9a4aa2797f02 [/trunk] Changeset 108 by mikael
mikael
parents: 81
diff changeset
211
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
212 // expandalias(line)
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
213 // If there is one, expand the alias in line and returns a new allocated line
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
214 // If no alias is found, returns line
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
215 // Note : if the returned pointer is different from line, the caller should
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
216 // g_free() the pointer after use
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
217 char *expandalias(char *line)
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
218 {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
219 const char *p1, *p2;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
220 char *word;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
221 const gchar *value;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
222 char *newline = line;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
223
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
224 // Ignore leading '/'
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
225 for (p1 = line ; *p1 == '/' ; p1++)
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
226 ;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
227 // Locate the end of the word
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
228 for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
229 ;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
230 // Extract the word
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
231 word = g_strndup(p1, p2-p1);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
232
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
233 // Look for an alias in the list
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
234 value = settings_get(SETTINGS_TYPE_ALIAS, (const char*)word);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
235 if (value) {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
236 // There is an alias to expand
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
237 newline = g_new(char, strlen(value)+strlen(p2)+2);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
238 *newline = '/';
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
239 strcpy(newline+1, value);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
240 strcat(newline, p2);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
241 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
242 g_free(word);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
243
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
244 return newline;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
245 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
246
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
247 // cmd_get
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
248 // Finds command in the command list structure.
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
249 // Returns a pointer to the cmd entry, or NULL if command not found.
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
250 cmd *cmd_get(const char *command)
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
251 {
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
252 const char *p1, *p2;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
253 char *com;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
254 GSList *sl_com;
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
255
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
256 // Ignore leading '/'
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
257 for (p1 = command ; *p1 == '/' ; p1++)
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
258 ;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
259 // Locate the end of the command
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
260 for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
261 ;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
262 // Copy the clean command
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
263 com = g_strndup(p1, p2-p1);
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
264
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
265 // Look for command in the list
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
266 for (sl_com=Commands; sl_com; sl_com = g_slist_next(sl_com)) {
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
267 if (!strcasecmp(com, ((cmd*)sl_com->data)->name))
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
268 break;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
269 }
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
270 g_free(com);
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
271
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
272 if (sl_com) // Command has been found.
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
273 return (cmd*)sl_com->data;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
274 return NULL;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
275 }
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
276
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
277 // send_message(msg)
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
278 // Write the message in the buddy's window and send the message on
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
279 // the network.
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
280 static void send_message(const char *msg, const char *subj)
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
281 {
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
282 const char *jid;
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 384
diff changeset
283
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
284 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
285 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
286 return;
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
287 }
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
288
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
289 if (!current_buddy) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
290 scr_LogPrint(LPRINT_NORMAL, "No buddy is currently selected.");
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
291 return;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
292 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
293
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
294 jid = CURRENT_JID;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
295 if (!jid) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
296 scr_LogPrint(LPRINT_NORMAL, "No buddy is currently selected.");
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
297 return;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 47
diff changeset
298 }
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
299
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
300 if (buddy_gettype(BUDDATA(current_buddy)) != ROSTER_TYPE_ROOM) {
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
301 // local part (UI, logging, etc.)
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
302 gchar *hmsg;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
303 if (subj)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
304 hmsg = g_strdup_printf("[%s]\n%s", subj, msg);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
305 else
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
306 hmsg = (char*)msg;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
307 hk_message_out(jid, NULL, 0, hmsg);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
308 if (hmsg != msg) g_free(hmsg);
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
309 }
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
310
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
311 // Network part
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
312 jb_send_msg(jid, msg, buddy_gettype(BUDDATA(current_buddy)), subj);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
313 }
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
314
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
315 // process_command(line)
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
316 // Process a command line.
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
317 // Return 255 if this is the /quit command, and 0 for the other commands.
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
318 int process_command(char *line)
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
319 {
101
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
320 char *p;
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
321 char *xpline;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
322 cmd *curcmd;
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
323
101
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
324 // Remove trailing spaces:
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
325 for (p=line ; *p ; p++)
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
326 ;
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
327 for (p-- ; p>line && (*p == ' ') ; p--)
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
328 *p = 0;
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
329
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
330 // We do alias expansion here
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
331 if (scr_get_multimode() != 2)
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
332 xpline = expandalias(line);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
333 else
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
334 xpline = line; // No expansion in verbatim multi-line mode
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
335
101
4f3ad00b5187 [/trunk] Changeset 115 by mikael
mikael
parents: 98
diff changeset
336 // Command "quit"?
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
337 if ((!strncasecmp(xpline, "/quit", 5)) && (scr_get_multimode() != 2) )
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
338 if (!xpline[5] || xpline[5] == ' ')
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
339 return 255;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
340
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
341 // If verbatim multi-line mode, we check if another /msay command is typed
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
342 if ((scr_get_multimode() == 2) && (strncasecmp(xpline, "/msay ", 6))) {
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
343 // It isn't an /msay command
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
344 scr_append_multiline(xpline);
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
345 return 0;
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
346 }
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
347
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
348 // Commands handling
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
349 curcmd = cmd_get(xpline);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
350
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
351 if (!curcmd) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
352 scr_LogPrint(LPRINT_NORMAL, "Unrecognized command. "
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
353 "Please see the manual for a list of known commands.");
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
354 if (xpline != line) g_free(xpline);
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
355 return 0;
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
356 }
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
357 if (!curcmd->func) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
358 scr_LogPrint(LPRINT_NORMAL,
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
359 "This functionality is not yet implemented, sorry.");
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
360 if (xpline != line) g_free(xpline);
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
361 return 0;
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
362 }
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
363 // Lets go to the command parameters
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
364 for (p = xpline+1; *p && (*p != ' ') ; p++)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
365 ;
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
366 // Skip spaces
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
367 while (*p && (*p == ' '))
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
368 p++;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
369 // Call command-specific function
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
370 (*curcmd->func)(p);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
371 if (xpline != line) g_free(xpline);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
372 return 0;
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
373 }
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents:
diff changeset
374
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
375 // process_line(line)
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
376 // Process a command/message line.
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
377 // If this isn't a command, this is a message and it is sent to the
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
378 // currently selected buddy.
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
379 // Return 255 if the line is the /quit command, or 0.
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
380 int process_line(char *line)
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
381 {
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
382 if (!*line) { // User only pressed enter
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
383 if (scr_get_multimode()) {
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
384 scr_append_multiline("");
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
385 return 0;
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
386 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
387 if (current_buddy) {
647
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
388 // Enter chat mode
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
389 scr_set_chatmode(TRUE);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
390 scr_ShowBuddyWindow();
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
391 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
392 return 0;
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
393 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
394
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
395 if (*line != '/') {
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
396 // This isn't a command
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
397 if (scr_get_multimode())
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
398 scr_append_multiline(line);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
399 else
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
400 do_say(line);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
401 return 0;
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
402 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
403
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
404 /* It is (probably) a command -- except for verbatim multi-line mode */
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
405 return process_command(line);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
406 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
407
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
408 /* Commands callback functions */
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
409 /* All these do_*() functions will be called with a "arg" parameter */
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
410 /* (with arg not null) */
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
411
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
412 static void do_roster(char *arg)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
413 {
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
414 if (!strcasecmp(arg, "top")) {
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
415 scr_RosterTop();
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
416 update_roster = TRUE;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
417 } else if (!strcasecmp(arg, "bottom")) {
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
418 scr_RosterBottom();
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
419 update_roster = TRUE;
707
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
420 } else if (!strcasecmp(arg, "hide")) {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
421 scr_RosterVisibility(0);
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
422 } else if (!strcasecmp(arg, "show")) {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
423 scr_RosterVisibility(1);
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
424 } else if (!strcasecmp(arg, "toggle")) {
b26a0bde4cdb Add /roster hide|show|toggle
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
425 scr_RosterVisibility(-1);
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
426 } else if (!strcasecmp(arg, "hide_offline")) {
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 118
diff changeset
427 buddylist_set_hide_offline_buddies(TRUE);
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
428 if (current_buddy)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
429 buddylist_build();
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
430 update_roster = TRUE;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
431 } else if (!strcasecmp(arg, "show_offline")) {
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 118
diff changeset
432 buddylist_set_hide_offline_buddies(FALSE);
124
6d2122c003c4 [/trunk] Changeset 137 by mikael
mikael
parents: 120
diff changeset
433 buddylist_build();
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
434 update_roster = TRUE;
290
f63839a4cb35 Add /roster toggle_offline
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
435 } else if (!strcasecmp(arg, "toggle_offline")) {
f63839a4cb35 Add /roster toggle_offline
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
436 buddylist_set_hide_offline_buddies(-1);
f63839a4cb35 Add /roster toggle_offline
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
437 buddylist_build();
f63839a4cb35 Add /roster toggle_offline
Mikael Berthe <mikael@lilotux.net>
parents: 288
diff changeset
438 update_roster = TRUE;
236
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
439 } else if (!strcasecmp(arg, "unread_first")) {
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
440 scr_RosterUnreadMessage(0);
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
441 } else if (!strcasecmp(arg, "unread_next")) {
72fd1273f2b7 [/trunk] Changeset 249 by mikael
mikael
parents: 232
diff changeset
442 scr_RosterUnreadMessage(1);
330
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 318
diff changeset
443 } else if (!strcasecmp(arg, "alternate")) {
a9013124ede6 Add "/roster alternate"
Mikael Berthe <mikael@lilotux.net>
parents: 318
diff changeset
444 scr_RosterJumpAlternate();
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
445 } else if (!strncasecmp(arg, "search", 6)) {
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
446 char *string = arg+6;
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
447 if (*string && (*string != ' ')) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
448 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
449 return;
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
450 }
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
451 while (*string == ' ')
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
452 string++;
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
453 if (!*string) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
454 scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
265
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
455 return;
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
456 }
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
457 scr_RosterSearch(string);
49e9e02dd6d0 Add "/roster search" command
mikael@frmp8452
parents: 262
diff changeset
458 update_roster = TRUE;
377
00809e3e327e Add "/roster up" and "/roster down"
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
459 } else if (!strcasecmp(arg, "up")) {
00809e3e327e Add "/roster up" and "/roster down"
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
460 scr_RosterUp();
00809e3e327e Add "/roster up" and "/roster down"
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
461 } else if (!strcasecmp(arg, "down")) {
00809e3e327e Add "/roster up" and "/roster down"
Mikael Berthe <mikael@lilotux.net>
parents: 374
diff changeset
462 scr_RosterDown();
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
463 } else
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
464 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
465 }
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 104
diff changeset
466
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
467 // setstatus(recipient, arg)
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
468 // Set your Jabber status.
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
469 // - if recipient is not NULL, the status is sent to this contact only
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
470 // - arg must be "status message" (message is optional)
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
471 static void setstatus(const char *recipient, const char *arg)
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
472 {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
473 char **paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
474 char *status;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
475 char *msg;
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
476 enum imstatus st;
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
477
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
478 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
479 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
480 return;
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
481 }
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
482
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
483 paramlst = split_arg(arg, 2, 0); // status, message
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
484 status = *paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
485 msg = *(paramlst+1);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
486
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
487 if (!status) {
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
488 free_arg_lst(paramlst);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
489 return;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
490 }
318
45076d02eeef The /status command can specify a status message
Mikael Berthe <mikael@lilotux.net>
parents: 310
diff changeset
491
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
492 if (!strcasecmp(status, "offline")) st = offline;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
493 else if (!strcasecmp(status, "online")) st = available;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
494 else if (!strcasecmp(status, "avail")) st = available;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
495 else if (!strcasecmp(status, "away")) st = away;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
496 else if (!strcasecmp(status, "invisible")) st = invisible;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
497 else if (!strcasecmp(status, "dnd")) st = dontdisturb;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
498 else if (!strcasecmp(status, "notavail")) st = notavail;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
499 else if (!strcasecmp(status, "free")) st = freeforchat;
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
500 else {
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
501 scr_LogPrint(LPRINT_NORMAL, "Unrecognized status!");
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
502 free_arg_lst(paramlst);
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
503 return;
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
504 }
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
505
677
633a0522bd37 Using "/status invisible -" did not clear the status message
Mikael Berthe <mikael@lilotux.net>
parents: 659
diff changeset
506 // Use provided message
633a0522bd37 Using "/status invisible -" did not clear the status message
Mikael Berthe <mikael@lilotux.net>
parents: 659
diff changeset
507 if (msg && !*msg) {
318
45076d02eeef The /status command can specify a status message
Mikael Berthe <mikael@lilotux.net>
parents: 310
diff changeset
508 msg = NULL;
677
633a0522bd37 Using "/status invisible -" did not clear the status message
Mikael Berthe <mikael@lilotux.net>
parents: 659
diff changeset
509 }
318
45076d02eeef The /status command can specify a status message
Mikael Berthe <mikael@lilotux.net>
parents: 310
diff changeset
510
528
2f714bd701a1 Do not use default status messages with /status_to
Mikael Berthe <mikael@lilotux.net>
parents: 519
diff changeset
511 // If a recipient is specified, let's don't use default status messages
2f714bd701a1 Do not use default status messages with /status_to
Mikael Berthe <mikael@lilotux.net>
parents: 519
diff changeset
512 if (recipient && !msg)
2f714bd701a1 Do not use default status messages with /status_to
Mikael Berthe <mikael@lilotux.net>
parents: 519
diff changeset
513 msg = "";
2f714bd701a1 Do not use default status messages with /status_to
Mikael Berthe <mikael@lilotux.net>
parents: 519
diff changeset
514
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
515 jb_setstatus(st, recipient, msg);
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
516
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
517 free_arg_lst(paramlst);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
518 }
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
519
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
520 static void do_status(char *arg)
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
521 {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
522 if (!*arg) {
519
5c338d31de56 Show current global status message in "/status"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
523 const char *sm = jb_getstatusmsg();
5c338d31de56 Show current global status message in "/status"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
524 scr_LogPrint(LPRINT_NORMAL, "Your status is: [%c] %s",
5c338d31de56 Show current global status message in "/status"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
525 imstatus2char[jb_getstatus()],
5c338d31de56 Show current global status message in "/status"
Mikael Berthe <mikael@lilotux.net>
parents: 508
diff changeset
526 (sm ? sm : ""));
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
527 return;
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
528 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
529 arg = to_utf8(arg);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
530 setstatus(NULL, arg);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
531 g_free(arg);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
532 }
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
533
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
534 static void do_status_to(char *arg)
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
535 {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
536 char **paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
537 char *jid, *st, *msg;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
538 char *jid_utf8 = NULL;
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
539
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
540 paramlst = split_arg(arg, 3, 1); // jid, status, [message]
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
541 jid = *paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
542 st = *(paramlst+1);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
543 msg = *(paramlst+2);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
544
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
545 if (!jid || !st) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
546 scr_LogPrint(LPRINT_NORMAL,
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
547 "Please specify both a Jabber ID and a status.");
640
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
548 free_arg_lst(paramlst);
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
549 return;
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
550 }
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
551
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
552 // Allow things like /status_to "" away
641
62679532ea55 Allow special jid "." in commands /add and /status_to
Mikael Berthe <mikael@lilotux.net>
parents: 640
diff changeset
553 if (!*jid || !strcmp(jid, "."))
640
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
554 jid = NULL;
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
555
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
556 if (jid) {
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
557 // The JID has been specified. Quick check...
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
558 if (check_jid_syntax(jid)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
559 scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", jid);
640
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
560 jid = NULL;
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
561 } else {
696
ee06382dfb22 /status_to: Do not convert resource name to lower case
Mikael Berthe <mikael@lilotux.net>
parents: 694
diff changeset
562 // Convert jid to lowercase
ee06382dfb22 /status_to: Do not convert resource name to lower case
Mikael Berthe <mikael@lilotux.net>
parents: 694
diff changeset
563 char *p = jid;
ee06382dfb22 /status_to: Do not convert resource name to lower case
Mikael Berthe <mikael@lilotux.net>
parents: 694
diff changeset
564 for ( ; *p && *p != '/'; p++)
ee06382dfb22 /status_to: Do not convert resource name to lower case
Mikael Berthe <mikael@lilotux.net>
parents: 694
diff changeset
565 *p = tolower(*p);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
566 jid = jid_utf8 = to_utf8(jid);
640
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
567 }
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
568 } else {
640
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
569 // Add the current buddy
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
570 if (current_buddy)
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
571 jid = (char*)buddy_getjid(BUDDATA(current_buddy));
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
572 if (!jid)
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
573 scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
640
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
574 }
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
575
1cd7f8e3895b "/status_to" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 638
diff changeset
576 if (jid) {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
577 char *cmd;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
578 if (!msg)
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
579 msg = "";
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
580 msg = to_utf8(msg);
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
581 cmd = g_strdup_printf("%s %s", st, msg);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
582 scr_LogPrint(LPRINT_LOGNORM, "Sending to <%s> /status %s", jid, cmd);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
583 setstatus(jid, cmd);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
584 g_free(msg);
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
585 g_free(cmd);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
586 g_free(jid_utf8);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 439
diff changeset
587 }
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
588 free_arg_lst(paramlst);
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
589 }
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 113
diff changeset
590
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
591 static void do_add(char *arg)
124
6d2122c003c4 [/trunk] Changeset 137 by mikael
mikael
parents: 120
diff changeset
592 {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
593 char **paramlst;
244
5f8b529412bd [/trunk] Changeset 257 by mikael
mikael
parents: 240
diff changeset
594 char *id, *nick;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
595 char *jid_utf8 = NULL;
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
596
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
597 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
598 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
599 return;
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
600 }
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
601
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
602 paramlst = split_arg(arg, 2, 0); // jid, [nickname]
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
603 id = *paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
604 nick = *(paramlst+1);
244
5f8b529412bd [/trunk] Changeset 257 by mikael
mikael
parents: 240
diff changeset
605
638
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
606 if (!id)
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
607 nick = NULL; // Allow things like: /add "" nick
641
62679532ea55 Allow special jid "." in commands /add and /status_to
Mikael Berthe <mikael@lilotux.net>
parents: 640
diff changeset
608 else if (!*id || !strcmp(id, "."))
638
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
609 id = NULL;
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
610
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
611 if (id) {
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
612 // The JID has been specified. Quick check...
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
613 if (check_jid_syntax(id)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
614 scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", id);
638
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
615 id = NULL;
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
616 } else {
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
617 mc_strtolower(id);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
618 // Actually an UTF-8 id isn't needed because only the bare jid will
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
619 // be used.
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
620 id = jid_utf8 = to_utf8(id);
638
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
621 }
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
622 } else {
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
623 // Add the current buddy
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
624 if (current_buddy)
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
625 id = (char*)buddy_getjid(BUDDATA(current_buddy));
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
626 if (!id)
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
627 scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
638
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
628 }
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
629
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
630 if (nick)
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
631 nick = to_utf8(nick);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
632
638
f6946251acdf "/add" can be used with no jid (it will use the current buddy's jid)
Mikael Berthe <mikael@lilotux.net>
parents: 636
diff changeset
633 if (id) {
452
dfd9c62b3a39 Jabber Id syntax checks
Mikael Berthe <mikael@lilotux.net>
parents: 449
diff changeset
634 // 2nd parameter = optional nickname
dfd9c62b3a39 Jabber Id syntax checks
Mikael Berthe <mikael@lilotux.net>
parents: 449
diff changeset
635 jb_addbuddy(id, nick, NULL);
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
636 scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
452
dfd9c62b3a39 Jabber Id syntax checks
Mikael Berthe <mikael@lilotux.net>
parents: 449
diff changeset
637 id);
dfd9c62b3a39 Jabber Id syntax checks
Mikael Berthe <mikael@lilotux.net>
parents: 449
diff changeset
638 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
639
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
640 g_free(jid_utf8);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
641 g_free(nick);
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
642 free_arg_lst(paramlst);
124
6d2122c003c4 [/trunk] Changeset 137 by mikael
mikael
parents: 120
diff changeset
643 }
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
644
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
645 static void do_del(char *arg)
206
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
646 {
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
647 const char *jid;
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
648
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
649 if (*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
650 scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter; "
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
651 "the currently-selected buddy will be deleted.");
206
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
652 return;
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
653 }
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
654
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
655 if (!current_buddy) return;
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
656 jid = buddy_getjid(BUDDATA(current_buddy));
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
657 if (!jid) return;
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
658
540
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
659 if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_ROOM) {
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
660 // This is a chatroom
652
b243d3b3ff1b We do not need buddy_isresource() anymore
Mikael Berthe <mikael@lilotux.net>
parents: 650
diff changeset
661 if (buddy_getinsideroom(BUDDATA(current_buddy))) {
540
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
662 scr_LogPrint(LPRINT_NORMAL, "You haven't left this room!");
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
663 return;
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
664 }
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
665 }
887c1bd37617 Prevent deletion from rooms we haven't left
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
666
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
667 scr_LogPrint(LPRINT_LOGNORM, "Removing <%s>...", jid);
206
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
668 jb_delbuddy(jid);
865
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 861
diff changeset
669 scr_UpdateBuddyWindow();
206
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
670 }
766167c0c57f [/trunk] Changeset 218 by mikael
mikael
parents: 205
diff changeset
671
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
672 static void do_group(char *arg)
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
673 {
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
674 gpointer group;
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
675 guint leave_windowbuddy;
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
676
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
677 if (!*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
678 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
679 return;
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
680 }
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
681
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
682 if (!current_buddy) return;
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
683
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
684 group = buddy_getgroup(BUDDATA(current_buddy));
853
bdd526ec62bc Fix segfault when using /group with the [status] entry
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
685 if (!group) return;
bdd526ec62bc Fix segfault when using /group with the [status] entry
Mikael Berthe <mikael@lilotux.net>
parents: 848
diff changeset
686
212
465d98d2f8e3 [/trunk] Changeset 224 by mikael
mikael
parents: 210
diff changeset
687 // We'll have to redraw the chat window if we're not currently on the group
465d98d2f8e3 [/trunk] Changeset 224 by mikael
mikael
parents: 210
diff changeset
688 // entry itself, because it means we'll have to leave the current buddy
465d98d2f8e3 [/trunk] Changeset 224 by mikael
mikael
parents: 210
diff changeset
689 // chat window.
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
690 leave_windowbuddy = (group != BUDDATA(current_buddy));
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
691
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
692 if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
693 scr_LogPrint(LPRINT_NORMAL, "You need to select a group.");
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
694 return;
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
695 }
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
696
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
697 if (!strcasecmp(arg, "expand") || !strcasecmp(arg, "unfold")) {
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
698 buddy_setflags(group, ROSTER_FLAG_HIDE, FALSE);
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
699 } else if (!strcasecmp(arg, "shrink") || !strcasecmp(arg, "fold")) {
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
700 buddy_setflags(group, ROSTER_FLAG_HIDE, TRUE);
130
60694c9ddde3 [/trunk] Changeset 143 by mikael
mikael
parents: 129
diff changeset
701 } else if (!strcasecmp(arg, "toggle")) {
60694c9ddde3 [/trunk] Changeset 143 by mikael
mikael
parents: 129
diff changeset
702 buddy_setflags(group, ROSTER_FLAG_HIDE,
60694c9ddde3 [/trunk] Changeset 143 by mikael
mikael
parents: 129
diff changeset
703 !(buddy_getflags(group) & ROSTER_FLAG_HIDE));
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
704 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
705 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
706 return;
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
707 }
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
708
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
709 buddylist_build();
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
710 update_roster = TRUE;
166
aa5b635520ef [/trunk] Changeset 178 by mikael
mikael
parents: 164
diff changeset
711 if (leave_windowbuddy) scr_ShowBuddyWindow();
128
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
712 }
81ccb1091dd8 [/trunk] Changeset 141 by mikael
mikael
parents: 127
diff changeset
713
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
714 static int send_message_to(const char *jid, const char *msg, const char *subj)
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
715 {
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
716 char *bare_jid, *rp;
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
717 char *hmsg;
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
718
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
719 if (!jid || !*jid) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
720 scr_LogPrint(LPRINT_NORMAL, "You must specify a Jabber ID.");
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
721 return 1;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
722 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
723 if (!msg || !*msg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
724 scr_LogPrint(LPRINT_NORMAL, "You must specify a message.");
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
725 return 1;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
726 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
727 if (check_jid_syntax((char*)jid)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
728 scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", jid);
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
729 return 1;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
730 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
731
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
732 // We must use the bare jid in hk_message_out()
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
733 rp = strchr(jid, '/');
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
734 if (rp) bare_jid = g_strndup(jid, rp - jid);
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
735 else bare_jid = (char*)jid;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
736
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
737 // Jump to window, create one if needed
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
738 scr_RosterJumpJid(bare_jid);
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
739
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
740 // Check if we're sending a message to a conference room
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
741 // If not, we must make sure rp is NULL, for hk_message_out()
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
742 if (rp) {
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
743 if (roster_find(bare_jid, jidsearch, ROSTER_TYPE_ROOM)) rp++;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
744 else rp = NULL;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
745 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
746
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
747 // local part (UI, logging, etc.)
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
748 if (subj)
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
749 hmsg = g_strdup_printf("[%s]\n%s", subj, msg);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
750 else
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
751 hmsg = (char*)msg;
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
752
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
753 hk_message_out(bare_jid, rp, 0, hmsg);
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
754 if (hmsg != msg) g_free(hmsg);
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
755
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
756 // Network part
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
757 jb_send_msg(jid, msg, ROSTER_TYPE_USER, subj);
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
758
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
759 if (rp) g_free(bare_jid);
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
760 return 0;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
761 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
762
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
763 static void do_say(char *arg)
132
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
764 {
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
765 gpointer bud;
132
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
766
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
767 scr_set_chatmode(TRUE);
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
768
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
769 if (!current_buddy) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
770 scr_LogPrint(LPRINT_NORMAL,
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
771 "Whom are you talking to? Please select a buddy.");
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
772 return;
132
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
773 }
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
774
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
775 bud = BUDDATA(current_buddy);
631
423c24e5875a Allow sending a message to an agent
Mikael Berthe <mikael@lilotux.net>
parents: 626
diff changeset
776 if (!(buddy_gettype(bud) &
423c24e5875a Allow sending a message to an agent
Mikael Berthe <mikael@lilotux.net>
parents: 626
diff changeset
777 (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
778 scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
779 return;
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
780 }
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
781
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 132
diff changeset
782 buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
783 arg = to_utf8(arg);
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
784 send_message(arg, NULL);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
785 g_free(arg);
132
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
786 }
6531bcf030ae [/trunk] Changeset 145 by mikael
mikael
parents: 130
diff changeset
787
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
788 static void do_msay(char *arg)
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
789 {
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
790 /* Parameters: begin verbatim abort send send_to */
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
791 char **paramlst;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
792 char *subcmd;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
793
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
794 paramlst = split_arg(arg, 2, 1); // subcmd, arg
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
795 subcmd = *paramlst;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
796 arg = *(paramlst+1);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
797
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
798 if (!subcmd || !*subcmd) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
799 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
800 scr_LogPrint(LPRINT_NORMAL, "Please read the manual before using "
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
801 "the /msay command.");
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
802 scr_LogPrint(LPRINT_NORMAL, "(Use \"/msay begin\" to enter "
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
803 "multi-line mode...)");
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
804 free_arg_lst(paramlst);
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
805 return;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
806 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
807
796
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
808 if (!strcasecmp(subcmd, "toggle")) {
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
809 if (scr_get_multimode())
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
810 subcmd = "send";
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
811 else
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
812 subcmd = "begin";
838
ea1204c8a30b Add "/msay toggle_verbatim"
Mikael Berthe <mikael@lilotux.net>
parents: 837
diff changeset
813 } else if (!strcasecmp(subcmd, "toggle_verbatim")) {
ea1204c8a30b Add "/msay toggle_verbatim"
Mikael Berthe <mikael@lilotux.net>
parents: 837
diff changeset
814 if (scr_get_multimode())
ea1204c8a30b Add "/msay toggle_verbatim"
Mikael Berthe <mikael@lilotux.net>
parents: 837
diff changeset
815 subcmd = "send";
ea1204c8a30b Add "/msay toggle_verbatim"
Mikael Berthe <mikael@lilotux.net>
parents: 837
diff changeset
816 else
ea1204c8a30b Add "/msay toggle_verbatim"
Mikael Berthe <mikael@lilotux.net>
parents: 837
diff changeset
817 subcmd = "verbatim";
796
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
818 }
79c8823da808 Add "/msay toggle" command
Mikael Berthe <mikael@lilotux.net>
parents: 791
diff changeset
819
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
820 if (!strcasecmp(subcmd, "abort")) {
315
65aa05520556 First Ctrl-C now also leaves multi-line message mode
Mikael Berthe <mikael@lilotux.net>
parents: 310
diff changeset
821 if (scr_get_multimode())
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
822 scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
823 scr_set_multimode(FALSE, NULL);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
824 return;
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
825 } else if ((!strcasecmp(subcmd, "begin")) ||
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
826 (!strcasecmp(subcmd, "verbatim"))) {
840
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
827 bool verbat;
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
828 gchar *subj_utf8 = to_utf8(arg);
840
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
829 if (!strcasecmp(subcmd, "verbatim")) {
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
830 scr_set_multimode(2, subj_utf8);
840
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
831 verbat = TRUE;
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
832 } else {
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
833 scr_set_multimode(1, subj_utf8);
840
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
834 verbat = FALSE;
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
835 }
260
33e1a05864a6 Add "verbatim multi-line" mode, with commands disabled
mikael@frmp8452
parents: 244
diff changeset
836
840
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
837 scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
838 verbat ? "VERBATIM " : "");
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
839 scr_LogPrint(LPRINT_NORMAL, "Select a buddy and use \"/msay send\" "
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
840 "when your message is ready.");
840
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
841 if (verbat)
2903fd66c3ad Be more verbose about verbatim mode
Mikael Berthe <mikael@lilotux.net>
parents: 838
diff changeset
842 scr_LogPrint(LPRINT_NORMAL, "Use \"/msay abort\" to abort this mode.");
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
843 g_free(subj_utf8);
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
844 return;
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
845 } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
846 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
847 return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
848 }
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
849
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
850 /* send/send_to command */
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
851
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
852 if (!scr_get_multimode()) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
853 scr_LogPrint(LPRINT_NORMAL, "No message to send. "
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
854 "Use \"/msay begin\" first.");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
855 return;
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
856 }
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
857
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
858 scr_set_chatmode(TRUE);
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
859
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
860 if (!strcasecmp(subcmd, "send_to")) {
797
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
861 int err = FALSE;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
862 gchar *msg_utf8;
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
863 // Let's send to the specified JID. We leave now if there
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
864 // has been an error (so we don't leave multi-line mode).
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
865 arg = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
866 msg_utf8 = to_utf8(scr_get_multiline());
797
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
867 if (msg_utf8) {
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
868 err = send_message_to(arg, msg_utf8, scr_get_multimode_subj());
797
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
869 g_free(msg_utf8);
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
870 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
871 g_free(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
872 if (err)
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
873 return;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
874 } else { // Send to currently selected buddy
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
875 gpointer bud;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
876 gchar *msg_utf8;
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
877
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
878 if (!current_buddy) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
879 scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
880 return;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
881 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
882
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
883 bud = BUDDATA(current_buddy);
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
884 if (!(buddy_gettype(bud) & (ROSTER_TYPE_USER|ROSTER_TYPE_ROOM))) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
885 scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
636
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
886 return;
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
887 }
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
888
f84cce8382e8 Add "/msay send_to"
Mikael Berthe <mikael@lilotux.net>
parents: 631
diff changeset
889 buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
890 msg_utf8 = to_utf8(scr_get_multiline());
797
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
891 if (msg_utf8) {
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
892 send_message(msg_utf8, scr_get_multimode_subj());
797
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
893 g_free(msg_utf8);
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
894 }
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
895 }
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
896 scr_set_multimode(FALSE, NULL);
797
5eb701c1bc1f Multi-line mode: Do not send empty messages
Mikael Berthe <mikael@lilotux.net>
parents: 796
diff changeset
897 scr_LogPrint(LPRINT_NORMAL, "You have left multi-line message mode.");
238
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
898 }
8e30b2bb380e [/trunk] Changeset 251 by mikael
mikael
parents: 236
diff changeset
899
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
900 static void do_say_to(char *arg)
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
901 {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
902 char **paramlst;
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
903 char *jid, *msg;
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
904
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
905 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
906 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
907 return;
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
908 }
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
909
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
910 paramlst = split_arg(arg, 2, 1); // jid, message
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
911 jid = *paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
912 msg = *(paramlst+1);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
913
844
5002948c7360 "/say_to ." is not valid
Mikael Berthe <mikael@lilotux.net>
parents: 843
diff changeset
914 if (!jid || !strcmp(jid, ".")) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
915 scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
916 free_arg_lst(paramlst);
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
917 return;
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
918 }
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
919
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
920 jid = to_utf8(jid);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
921 msg = to_utf8(msg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
922
807
f6cda389db48 Allow messages with a subject (/msay)
Mikael Berthe <mikael@lilotux.net>
parents: 797
diff changeset
923 send_message_to(jid, msg, NULL);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
924
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
925 g_free(jid);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
926 g_free(msg);
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
927 free_arg_lst(paramlst);
480
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
928 }
882e1acae422 Add /say_to command
Mikael Berthe <mikael@lilotux.net>
parents: 475
diff changeset
929
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
930 // buffer_updown(updown, nblines)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
931 // updown: -1=up, +1=down
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
932 inline static void buffer_updown(int updown, char *nlines)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
933 {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
934 int nblines;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
935
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
936 if (!nlines || !*nlines)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
937 nblines = 0;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
938 else
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
939 nblines = atoi(nlines);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
940
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
941 if (nblines >= 0)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
942 scr_BufferScrollUpDown(updown, nblines);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
943 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
944
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
945 static void buffer_search(int direction, char *arg)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
946 {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
947 if (!arg || !*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
948 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
949 return;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
950 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
951
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
952 scr_BufferSearch(direction, arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
953 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
954
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
955 static void buffer_date(char *date)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
956 {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
957 time_t t;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
958
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
959 if (!date || !*date) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
960 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
961 return;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
962 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
963
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
964 strip_arg_special_chars(date);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
965
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
966 t = from_iso8601(date, 0);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
967 if (t)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
968 scr_BufferDate(t);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
969 else
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
970 scr_LogPrint(LPRINT_NORMAL, "The date you specified is "
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
971 "not correctly formatted or invalid.");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
972 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
973
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
974 static void buffer_percent(char *arg1, char *arg2)
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
975 {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
976 // Basically, user has typed "%arg1 arg2"
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
977 // "%50" -> arg1 = 50, arg2 null pointer
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
978 // "% 50" -> arg1 = \0, arg2 = 50
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
979
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
980 if (!*arg1 && (!arg2 || !*arg2)) { // No value
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
981 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
982 return;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
983 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
984
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
985 if (*arg1 && arg2 && *arg2) { // Two values
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
986 scr_LogPrint(LPRINT_NORMAL, "Wrong parameters.");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
987 return;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
988 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
989
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
990 scr_BufferPercent(atoi((*arg1 ? arg1 : arg2)));
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
991 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
992
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
993 static void do_buffer(char *arg)
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
994 {
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
995 char **paramlst;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
996 char *subcmd;
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
997
471
82a27508fb85 Fix segfaults when using /buffer and /room while not connected
Mikael Berthe <mikael@lilotux.net>
parents: 470
diff changeset
998 if (!current_buddy) return;
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
999
446
9f4e9e9aaf08 Minor changes & cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
1000 if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1001 scr_LogPrint(LPRINT_NORMAL, "Groups have no buffer.");
446
9f4e9e9aaf08 Minor changes & cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
1002 return;
9f4e9e9aaf08 Minor changes & cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
1003 }
9f4e9e9aaf08 Minor changes & cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
1004
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1005 paramlst = split_arg(arg, 2, 1); // subcmd, arg
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1006 subcmd = *paramlst;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1007 arg = *(paramlst+1);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1008
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1009 if (!subcmd || !*subcmd) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1010 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1011 free_arg_lst(paramlst);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1012 return;
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1013 }
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1014
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1015 if (!strcasecmp(subcmd, "top")) {
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
1016 scr_BufferTopBottom(-1);
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1017 } else if (!strcasecmp(subcmd, "bottom")) {
361
51ff319947c3 Code cleanup/optimization
Mikael Berthe <mikael@lilotux.net>
parents: 336
diff changeset
1018 scr_BufferTopBottom(1);
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1019 } else if (!strcasecmp(subcmd, "clear")) {
369
499170ed71c9 Rename some buffer commands, for homogeneity
Mikael Berthe <mikael@lilotux.net>
parents: 364
diff changeset
1020 scr_BufferClear();
866
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
1021 } else if (!strcasecmp(subcmd, "purge")) {
b30df2ab457f Add "/buffer purge"
Mikael Berthe <mikael@lilotux.net>
parents: 865
diff changeset
1022 scr_BufferPurge();
873
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
1023 } else if (!strcasecmp(subcmd, "scroll_lock")) {
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
1024 scr_BufferScrollLock(1);
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
1025 } else if (!strcasecmp(subcmd, "scroll_unlock")) {
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
1026 scr_BufferScrollLock(0);
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
1027 } else if (!strcasecmp(subcmd, "scroll_toggle")) {
ee39f6d94d43 Add /buffer {scroll_lock|scroll_unlock|toggle_scroll}
Mikael Berthe <mikael@lilotux.net>
parents: 868
diff changeset
1028 scr_BufferScrollLock(-1);
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1029 } else if (!strcasecmp(subcmd, "up")) {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1030 buffer_updown(-1, arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1031 } else if (!strcasecmp(subcmd, "down")) {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1032 buffer_updown(1, arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1033 } else if (!strcasecmp(subcmd, "search_backward")) {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1034 buffer_search(-1, arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1035 } else if (!strcasecmp(subcmd, "search_forward")) {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1036 buffer_search(1, arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1037 } else if (!strcasecmp(subcmd, "date")) {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1038 buffer_date(arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1039 } else if (*subcmd == '%') {
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1040 buffer_percent(subcmd+1, arg);
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1041 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
1042 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1043 }
370
dd9e2eb52916 Add /buffer search_{backward,forward}
Mikael Berthe <mikael@lilotux.net>
parents: 369
diff changeset
1044
558
db019a5f874f Split do_buffer() and use split_arg()
Mikael Berthe <mikael@lilotux.net>
parents: 557
diff changeset
1045 free_arg_lst(paramlst);
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
1046 }
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
1047
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1048 static void do_clear(char *arg) // Alias for "/buffer clear"
187
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
1049 {
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
1050 do_buffer("clear");
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
1051 }
4ce9ff808baa [/trunk] Changeset 199 by mikael
mikael
parents: 166
diff changeset
1052
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1053 static void do_info(char *arg)
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1054 {
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1055 gpointer bud;
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1056 const char *jid, *name;
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1057 guint type;
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1058 char *buffer;
604
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1059 enum subscr esub;
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1060
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1061 if (!current_buddy) return;
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1062 bud = BUDDATA(current_buddy);
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1063
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1064 jid = buddy_getjid(bud);
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1065 name = buddy_getname(bud);
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1066 type = buddy_gettype(bud);
604
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1067 esub = buddy_getsubscription(bud);
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1068
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1069 buffer = g_new(char, 4096);
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1070
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1071 if (jid) {
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1072 GSList *resources;
604
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1073 char *bstr = "unknown";
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1074
647
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1075 // Enter chat mode
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1076 scr_set_chatmode(TRUE);
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1077 scr_ShowBuddyWindow();
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1078
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1079 snprintf(buffer, 4095, "jid: <%s>", jid);
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1080 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1081 if (name) {
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1082 snprintf(buffer, 4095, "Name: %s", name);
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1083 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1084 }
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1085
604
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1086 if (type == ROSTER_TYPE_USER) bstr = "user";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1087 else if (type == ROSTER_TYPE_ROOM) bstr = "chatroom";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1088 else if (type == ROSTER_TYPE_AGENT) bstr = "agent";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1089 snprintf(buffer, 127, "Type: %s", bstr);
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1090 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1091
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1092 if (esub == sub_both) bstr = "both";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1093 else if (esub & sub_from) bstr = "from";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1094 else if (esub & sub_to) bstr = "to";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1095 else bstr = "none";
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1096 snprintf(buffer, 64, "Subscription: %s", bstr);
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1097 if (esub & sub_pending)
2e8342168ebc "/info" shows buddy subscription
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1098 strcat(buffer, " (pending)");
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1099 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1100
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1101 resources = buddy_getresources(bud);
843
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1102 if (!resources && type == ROSTER_TYPE_USER) {
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1103 // No resource; display last status message, if any.
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1104 const char *rst_msg = buddy_getstatusmsg(bud, "");
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1105 if (rst_msg) {
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1106 snprintf(buffer, 4095, "Last status message: %s", rst_msg);
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1107 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1108 }
915a7f17474a Remember the status message when a buddy goes offline
Mikael Berthe <mikael@lilotux.net>
parents: 841
diff changeset
1109 }
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1110 for ( ; resources ; resources = g_slist_next(resources) ) {
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1111 gchar rprio;
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1112 enum imstatus rstatus;
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1113 const char *rst_msg;
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1114 time_t rst_time;
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1115
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1116 rprio = buddy_getresourceprio(bud, resources->data);
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1117 rstatus = buddy_getstatus(bud, resources->data);
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1118 rst_msg = buddy_getstatusmsg(bud, resources->data);
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1119 rst_time = buddy_getstatustime(bud, resources->data);
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1120
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1121 snprintf(buffer, 4095, "Resource: [%c] (%d) %s", imstatus2char[rstatus],
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1122 rprio, (char*)resources->data);
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1123 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1124 if (rst_msg) {
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1125 snprintf(buffer, 4095, "Status message: %s", rst_msg);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1126 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1127 }
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1128 if (rst_time) {
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1129 char tbuf[128];
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1130
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1131 strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S", localtime(&rst_time));
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1132 snprintf(buffer, 127, "Status timestamp: %s", tbuf);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1133 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1134 }
439
63562fd409a1 /info can show multiple resources
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
1135 }
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1136 } else {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
1137 if (name) scr_LogPrint(LPRINT_NORMAL, "Name: %s", name);
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
1138 scr_LogPrint(LPRINT_NORMAL, "Type: %s",
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1139 type == ROSTER_TYPE_GROUP ? "group" :
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1140 (type == ROSTER_TYPE_SPECIAL ? "special" : "unknown"));
191
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1141 }
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1142
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1143 g_free(buffer);
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1144 }
24e6bcb589b0 [/trunk] Changeset 203 by mikael
mikael
parents: 187
diff changeset
1145
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1146 // room_names() is a variation of do_info(), for chatrooms only
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1147 static void room_names(gpointer bud, char *arg)
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1148 {
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1149 const char *jid;
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1150 char *buffer;
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1151 GSList *resources;
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1152
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1153 if (*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1154 scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter.");
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1155 return;
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1156 }
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1157
647
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1158 // Enter chat mode
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1159 scr_set_chatmode(TRUE);
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1160 scr_ShowBuddyWindow();
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1161
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1162 jid = buddy_getjid(bud);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1163
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1164 buffer = g_new(char, 4096);
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1165 strncpy(buffer, "Room members:", 127);
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1166 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1167
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1168 resources = buddy_getresources(bud);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1169 for ( ; resources ; resources = g_slist_next(resources) ) {
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1170 enum imstatus rstatus;
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1171 const char *rst_msg;
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1172
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1173 rstatus = buddy_getstatus(bud, resources->data);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1174 rst_msg = buddy_getstatusmsg(bud, resources->data);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1175
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1176 snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1177 (char*)resources->data);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1178 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1179 if (rst_msg) {
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1180 snprintf(buffer, 4095, "Status message: %s", rst_msg);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1181 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
504
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1182 }
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1183 }
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1184
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1185 g_free(buffer);
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1186 }
321ae11e7ddb Prettier display for "/room names"
Mikael Berthe <mikael@lilotux.net>
parents: 490
diff changeset
1187
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1188 static void do_rename(char *arg)
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1189 {
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1190 gpointer bud;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1191 const char *jid, *group;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1192 guint type;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1193 char *newname, *p;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1194 char *name_utf8;
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1195
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1196 if (!*arg) {
846
683516b450be Rectify a wrong help message
Mikael Berthe <mikael@lilotux.net>
parents: 844
diff changeset
1197 scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1198 return;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1199 }
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1200
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1201 if (!current_buddy) return;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1202 bud = BUDDATA(current_buddy);
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1203
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1204 jid = buddy_getjid(bud);
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1205 group = buddy_getgroupname(bud);
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1206 type = buddy_gettype(bud);
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1207
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1208 if (type & ROSTER_TYPE_GROUP) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1209 scr_LogPrint(LPRINT_NORMAL, "You can't rename groups.");
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1210 return;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1211 }
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1212 if (type & ROSTER_TYPE_SPECIAL) {
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1213 scr_LogPrint(LPRINT_NORMAL, "You can't rename this item.");
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1214 return;
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1215 }
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1216
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1217 newname = g_strdup(arg);
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1218 // Remove trailing space
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1219 for (p = newname; *p; p++) ;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1220 while (p > newname && *p == ' ') *p = 0;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1221
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1222 strip_arg_special_chars(newname);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1223
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1224 name_utf8 = to_utf8(newname);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1225 buddy_setname(bud, name_utf8);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1226 jb_updatebuddy(jid, name_utf8, group);
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1227
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1228 g_free(name_utf8);
208
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1229 g_free(newname);
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1230 update_roster = TRUE;
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1231 }
8b08f34922c5 [/trunk] Changeset 220 by mikael
mikael
parents: 206
diff changeset
1232
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1233 static void do_move(char *arg)
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1234 {
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1235 gpointer bud;
620
97dd14e22b2a Rewrite buddy_setgroup()
Mikael Berthe <mikael@lilotux.net>
parents: 617
diff changeset
1236 const char *jid, *name, *oldgroupname;
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1237 guint type;
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1238 char *newgroupname, *p;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1239 char *group_utf8;
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1240
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1241 if (!current_buddy) return;
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1242 bud = BUDDATA(current_buddy);
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1243
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1244 jid = buddy_getjid(bud);
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1245 name = buddy_getname(bud);
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1246 type = buddy_gettype(bud);
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1247
620
97dd14e22b2a Rewrite buddy_setgroup()
Mikael Berthe <mikael@lilotux.net>
parents: 617
diff changeset
1248 oldgroupname = buddy_getgroupname(bud);
97dd14e22b2a Rewrite buddy_setgroup()
Mikael Berthe <mikael@lilotux.net>
parents: 617
diff changeset
1249
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1250 if (type & ROSTER_TYPE_GROUP) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
1251 scr_LogPrint(LPRINT_NORMAL, "You can't move groups!");
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1252 return;
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1253 }
848
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1254 if (type & ROSTER_TYPE_SPECIAL) {
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1255 scr_LogPrint(LPRINT_NORMAL, "You can't move this item.");
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1256 return;
a9161d2dc414 Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents: 847
diff changeset
1257 }
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1258
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1259 newgroupname = g_strdup(arg);
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1260 // Remove trailing space
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1261 for (p = newgroupname; *p; p++) ;
608
89f5672eb523 /move: really strip trailing space, and assign to no group if no group is specified
Mikael Berthe <mikael@lilotux.net>
parents: 604
diff changeset
1262 while (p > newgroupname && *p == ' ') *p-- = 0;
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1263
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1264 strip_arg_special_chars(newgroupname);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1265
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1266 group_utf8 = to_utf8(newgroupname);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1267 if (strcmp(oldgroupname, group_utf8)) {
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1268 jb_updatebuddy(jid, name, *group_utf8 ? group_utf8 : NULL);
620
97dd14e22b2a Rewrite buddy_setgroup()
Mikael Berthe <mikael@lilotux.net>
parents: 617
diff changeset
1269 scr_RosterUp();
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1270 buddy_setgroup(bud, group_utf8);
620
97dd14e22b2a Rewrite buddy_setgroup()
Mikael Berthe <mikael@lilotux.net>
parents: 617
diff changeset
1271 }
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1272
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1273 g_free(group_utf8);
210
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1274 g_free(newgroupname);
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1275 update_roster = TRUE;
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1276 }
f64818ba3503 [/trunk] Changeset 222 by mikael
mikael
parents: 208
diff changeset
1277
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1278 static void do_set(char *arg)
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1279 {
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1280 guint assign;
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1281 const gchar *option, *value;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1282 gchar *option_utf8;
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 384
diff changeset
1283
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1284 assign = parse_assigment(arg, &option, &value);
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1285 if (!option) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1286 scr_LogPrint(LPRINT_NORMAL, "Set what option?");
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1287 return;
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1288 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1289 option_utf8 = to_utf8(option);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1290 if (!assign) {
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1291 // This is a query
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1292 value = settings_opt_get(option_utf8);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1293 if (value) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1294 scr_LogPrint(LPRINT_NORMAL, "%s = [%s]", option_utf8, value);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1295 } else
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1296 scr_LogPrint(LPRINT_NORMAL, "Option %s is not set", option_utf8);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1297 g_free(option_utf8);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1298 return;
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1299 }
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1300 // Update the option
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1301 // XXX Maybe some options should be protected when user is connected
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1302 // (server, username, etc.). And we should catch some options here, too
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1303 // (hide_offline_buddies for ex.)
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1304 if (!value) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1305 settings_del(SETTINGS_TYPE_OPTION, option_utf8);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1306 } else {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1307 gchar *value_utf8 = to_utf8(value);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1308 settings_set(SETTINGS_TYPE_OPTION, option_utf8, value_utf8);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1309 g_free(value_utf8);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1310 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1311 g_free(option_utf8);
283
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1312 }
00b2377539ac Add /set command (to get/set/unset options values)
Mikael Berthe <mikael@lilotux.net>
parents: 277
diff changeset
1313
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1314 static void dump_alias(void *param, char *k, char *v)
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1315 {
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1316 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8, "Alias %s = %s", k, v);
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1317 }
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1318
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1319 static void do_alias(char *arg)
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1320 {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1321 guint assign;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1322 const gchar *alias, *value;
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 384
diff changeset
1323
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1324 assign = parse_assigment(arg, &alias, &value);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1325 if (!alias) {
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1326 settings_foreach(SETTINGS_TYPE_ALIAS, &dump_alias, NULL);
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1327 return;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1328 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1329 if (!assign) {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1330 // This is a query
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1331 value = settings_get(SETTINGS_TYPE_ALIAS, alias);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1332 if (value) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1333 // XXX LPRINT_NOTUTF8 here, see below why it isn't encoded...
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1334 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8, "%s = %s", alias, value);
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1335 } else
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1336 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1337 "Alias '%s' does not exist", alias);
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1338 return;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1339 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1340 // Check the alias does not conflict with a registered command
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1341 if (cmd_get(alias)) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1342 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1343 "'%s' is a reserved word!", alias);
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1344 return;
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1345 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1346 // Update the alias
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1347 if (!value) {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1348 if (settings_get(SETTINGS_TYPE_ALIAS, alias)) {
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1349 settings_del(SETTINGS_TYPE_ALIAS, alias);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1350 // Remove alias from the completion list
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1351 compl_del_category_word(COMPL_CMD, alias);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1352 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1353 } else {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1354 /* Add alias to the completion list, if not already in.
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1355 XXX We're not UTF8-encoding "alias" and "value" here because UTF-8 is
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1356 not yet supported in the UI... (and we use the values in the completion
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1357 system)
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1358 */
285
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1359 if (!settings_get(SETTINGS_TYPE_ALIAS, alias))
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1360 compl_add_category_word(COMPL_CMD, alias);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1361 settings_set(SETTINGS_TYPE_ALIAS, alias, value);
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1362 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1363 }
edc263a5d350 Add /alias command
Mikael Berthe <mikael@lilotux.net>
parents: 283
diff changeset
1364
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1365 static void dump_bind(void *param, char *k, char *v)
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1366 {
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1367 scr_LogPrint(LPRINT_NORMAL, "Key %4s is bound to: %s", k, v);
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1368 }
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1369
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
1370 static void do_bind(char *arg)
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1371 {
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1372 guint assign;
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1373 const gchar *keycode, *value;
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 384
diff changeset
1374
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1375 assign = parse_assigment(arg, &keycode, &value);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1376 if (!keycode) {
867
7f056c566569 Commands /alias & /bind list the key bindings and aliases
Mikael Berthe <mikael@lilotux.net>
parents: 866
diff changeset
1377 settings_foreach(SETTINGS_TYPE_BINDING, &dump_bind, NULL);
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1378 return;
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1379 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1380 if (!assign) {
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1381 // This is a query
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1382 value = settings_get(SETTINGS_TYPE_BINDING, keycode);
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1383 if (value) {
374
bd5638c21834 Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents: 371
diff changeset
1384 scr_LogPrint(LPRINT_NORMAL, "Key %s is bound to: %s", keycode, value);
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1385 } else
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1386 scr_LogPrint(LPRINT_NORMAL, "Key %s is not bound.", keycode);
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1387 return;
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1388 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1389 // Update the key binding
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1390 if (!value) {
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1391 settings_del(SETTINGS_TYPE_BINDING, keycode);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1392 } else {
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1393 gchar *value_utf8 = to_utf8(value);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1394 settings_set(SETTINGS_TYPE_BINDING, keycode, value_utf8);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1395 g_free(value_utf8);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1396 }
288
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1397 }
1eea0fa0955e Add /bind command
Mikael Berthe <mikael@lilotux.net>
parents: 285
diff changeset
1398
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
1399 static void do_rawxml(char *arg)
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
1400 {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1401 char **paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1402 char *subcmd;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1403
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1404 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1405 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1406 return;
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1407 }
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1408
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1409 paramlst = split_arg(arg, 2, 1); // subcmd, arg
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1410 subcmd = *paramlst;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1411 arg = *(paramlst+1);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1412
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1413 if (!subcmd || !*subcmd) {
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1414 scr_LogPrint(LPRINT_NORMAL, "Please read the manual page"
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1415 " before using /rawxml :-)");
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1416 free_arg_lst(paramlst);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1417 return;
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1418 }
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1419
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1420 if (!strcasecmp(subcmd, "send")) {
461
1d8f5b3a5f2b Convert /rawxml argument to UTF8
Mikael Berthe <mikael@lilotux.net>
parents: 454
diff changeset
1421 gchar *buffer;
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1422
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1423 if (!subcmd || !*subcmd) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1424 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1425 free_arg_lst(paramlst);
461
1d8f5b3a5f2b Convert /rawxml argument to UTF8
Mikael Berthe <mikael@lilotux.net>
parents: 454
diff changeset
1426 return;
1d8f5b3a5f2b Convert /rawxml argument to UTF8
Mikael Berthe <mikael@lilotux.net>
parents: 454
diff changeset
1427 }
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1428
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1429 // We don't strip_arg_special_chars() here, because it would be a pain for
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1430 // the user to escape quotes in a XML stream...
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1431
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1432 buffer = to_utf8(arg);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1433 if (buffer) {
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1434 scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1435 jb_send_raw(buffer);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1436 g_free(buffer);
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1437 } else {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1438 scr_LogPrint(LPRINT_NORMAL, "Conversion error in XML string.");
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1439 }
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
1440 } else {
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1441 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
1442 }
557
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1443
c72a66dfd2d4 Use split_arg() in most commands
Mikael Berthe <mikael@lilotux.net>
parents: 555
diff changeset
1444 free_arg_lst(paramlst);
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
1445 }
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 416
diff changeset
1446
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1447 // check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1448 // - Check if this is a room, if buddy_must_be_a_room is not null
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1449 // - Check there is at least 1 parameter, if param_needed is true
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1450 // - Return null if one of the checks fails, or a pointer to the first
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1451 // non-space character.
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1452 static char *check_room_subcommand(char *arg, bool param_needed,
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1453 gpointer buddy_must_be_a_room)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1454 {
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1455 if (buddy_must_be_a_room &&
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1456 !(buddy_gettype(buddy_must_be_a_room) & ROSTER_TYPE_ROOM)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1457 scr_LogPrint(LPRINT_NORMAL, "This isn't a conference room.");
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1458 return NULL;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1459 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1460
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1461 if (param_needed) {
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1462 if (!arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1463 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1464 return NULL;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1465 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1466 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1467
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1468 if (arg)
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1469 return arg;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1470 else
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1471 return "";
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1472 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1473
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1474 static void room_join(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1475 {
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1476 char **paramlst;
841
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1477 char *roomname, *nick, *roomname_tmp;
659
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1478 char *tmpnick = NULL;
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1479
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1480 paramlst = split_arg(arg, 2, 0); // roomid, nickname
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1481 roomname = *paramlst;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1482 nick = *(paramlst+1);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1483
841
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1484 if (!roomname || !strcmp(roomname, ".")) {
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1485 // If the current_buddy is recognized as a room, the room name
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1486 // can be omitted (or "." can be used).
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1487 if (!bud || !(buddy_gettype(bud) & ROSTER_TYPE_ROOM)) {
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1488 scr_LogPrint(LPRINT_NORMAL, "Please specify a room name.");
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1489 free_arg_lst(paramlst);
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1490 return;
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1491 }
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1492 if (!roomname)
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1493 nick = NULL;
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1494 roomname = (char*)buddy_getjid(bud);
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1495 } else if (strchr(roomname, '/')) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1496 scr_LogPrint(LPRINT_NORMAL, "Invalid room name.");
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1497 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1498 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1499 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1500
659
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1501 // If no nickname is provided with the /join command,
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1502 // we try the "nickname" option, then the username part of the jid.
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1503 if (!nick || !*nick) {
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1504 nick = (char*)settings_opt_get("nickname");
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1505 if (!nick) {
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1506 nick = (char*)settings_opt_get("username");
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1507 if (nick && (strchr(nick, '@') > nick)) {
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1508 char *p;
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1509 nick = tmpnick = g_strdup(nick);
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1510 p = strchr(nick, '@');
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1511 *p = 0;
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1512 }
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1513 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1514 } else {
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1515 nick = tmpnick = to_utf8(nick);
659
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1516 }
e61aa455c61b MUC: Add "nickname" option variable
Mikael Berthe <mikael@lilotux.net>
parents: 653
diff changeset
1517 // If we still have no nickname, give up
565
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1518 if (!nick || !*nick) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1519 scr_LogPrint(LPRINT_NORMAL, "Please specify a nickname.");
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1520 g_free(tmpnick);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1521 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1522 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1523 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1524
841
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1525 roomname_tmp = g_strdup(roomname);
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1526 mc_strtolower(roomname_tmp);
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1527 roomname = to_utf8(roomname_tmp);
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1528 g_free(roomname_tmp);
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1529
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1530 jb_room_join(roomname, nick);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1531
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1532 scr_LogPrint(LPRINT_LOGNORM, "Sent a join request to <%s>...", roomname);
653
d5db5be78eb0 MUC: Be more verbose when joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 652
diff changeset
1533
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1534 g_free(roomname);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1535 g_free(tmpnick);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1536 buddylist_build();
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1537 update_roster = TRUE;
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1538 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1539 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1540
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1541 static void room_invite(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1542 {
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1543 char **paramlst;
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1544 const gchar *roomname;
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1545 char* jid;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1546 gchar *reason_utf8;
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1547
570
29806b0fe830 Some parsing improvements
Mikael Berthe <mikael@lilotux.net>
parents: 568
diff changeset
1548 paramlst = split_arg(arg, 2, 1); // jid, [reason]
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1549 jid = *paramlst;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1550 arg = *(paramlst+1);
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1551 // An empty reason is no reason...
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1552 if (arg && !*arg)
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1553 arg = NULL;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1555 if (!jid || !*jid) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1556 scr_LogPrint(LPRINT_NORMAL, "Missing or incorrect Jabber ID.");
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1557 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1558 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1559 }
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1560
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1561 roomname = buddy_getjid(bud);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1562 reason_utf8 = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1563 jb_room_invite(roomname, jid, reason_utf8);
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1564 scr_LogPrint(LPRINT_LOGNORM, "Invitation sent to <%s>...", jid);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1565 g_free(reason_utf8);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1566 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1567 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1568
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1569 static void room_affil(gpointer bud, char *arg)
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1570 {
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1571 char **paramlst;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1572 gchar *jid, *rolename;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1573 struct role_affil ra;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1574 const char *roomid = buddy_getjid(bud);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1575
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1576 paramlst = split_arg(arg, 3, 1); // jid, new_affil, [reason]
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1577 jid = *paramlst;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1578 rolename = *(paramlst+1);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1579 arg = *(paramlst+2);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1580
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1581 if (!jid || !*jid || !rolename || !*rolename) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1582 scr_LogPrint(LPRINT_NORMAL, "Please specify both a Jabber ID and a role.");
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1583 free_arg_lst(paramlst);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1584 return;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1585 }
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1586
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1587 ra.type = type_affil;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1588 ra.val.affil = affil_none;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1589 for (; ra.val.affil < imaffiliation_size; ra.val.affil++)
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1590 if (!strcasecmp(rolename, straffil[ra.val.affil]))
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1591 break;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1592
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1593 if (ra.val.affil < imaffiliation_size) {
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1594 gchar *jid_utf8, *reason_utf8;
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1595 jid_utf8 = to_utf8(jid);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1596 reason_utf8 = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1597 jb_room_setattrib(roomid, jid_utf8, NULL, ra, reason_utf8);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1598 g_free(jid_utf8);
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1599 g_free(reason_utf8);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1600 } else
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1601 scr_LogPrint(LPRINT_NORMAL, "Wrong affiliation parameter.");
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1602
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1603 free_arg_lst(paramlst);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1604 }
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1605
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1606 static void room_role(gpointer bud, char *arg)
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1607 {
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1608 char **paramlst;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1609 gchar *jid, *rolename;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1610 struct role_affil ra;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1611 const char *roomid = buddy_getjid(bud);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1612
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1613 paramlst = split_arg(arg, 3, 1); // jid, new_role, [reason]
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1614 jid = *paramlst;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1615 rolename = *(paramlst+1);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1616 arg = *(paramlst+2);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1617
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1618 if (!jid || !*jid || !rolename || !*rolename) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1619 scr_LogPrint(LPRINT_NORMAL, "Please specify both a Jabber ID and a role.");
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1620 free_arg_lst(paramlst);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1621 return;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1622 }
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1623
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1624 ra.type = type_role;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1625 ra.val.role = role_none;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1626 for (; ra.val.role < imrole_size; ra.val.role++)
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1627 if (!strcasecmp(rolename, strrole[ra.val.role]))
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1628 break;
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1629
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1630 if (ra.val.role < imrole_size) {
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1631 gchar *jid_utf8, *reason_utf8;
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1632 jid_utf8 = to_utf8(jid);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1633 reason_utf8 = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1634 jb_room_setattrib(roomid, jid_utf8, NULL, ra, reason_utf8);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1635 g_free(jid_utf8);
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1636 g_free(reason_utf8);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1637 } else
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1638 scr_LogPrint(LPRINT_NORMAL, "Wrong role parameter.");
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1639
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1640 free_arg_lst(paramlst);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1641 }
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1642
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1643
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1644 // The expected argument is a Jabber id
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1645 static void room_ban(gpointer bud, char *arg)
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1646 {
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1647 char **paramlst;
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1648 gchar *jid;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1649 gchar *jid_utf8, *reason_utf8;
584
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1650 struct role_affil ra;
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1651 const char *roomid = buddy_getjid(bud);
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1652
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1653 paramlst = split_arg(arg, 2, 1); // jid, [reason]
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1654 jid = *paramlst;
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1655 arg = *(paramlst+1);
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1656
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1657 if (!jid || !*jid) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1658 scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1659 free_arg_lst(paramlst);
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1660 return;
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1661 }
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1662
584
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1663 ra.type = type_affil;
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1664 ra.val.affil = affil_outcast;
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1665
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1666 jid_utf8 = to_utf8(jid);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1667 reason_utf8 = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1668 jb_room_setattrib(roomid, jid_utf8, NULL, ra, reason_utf8);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1669 g_free(jid_utf8);
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1670 g_free(reason_utf8);
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1671
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1672 free_arg_lst(paramlst);
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1673 }
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1674
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1675 // The expected argument is a nickname
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1676 static void room_kick(gpointer bud, char *arg)
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1677 {
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1678 char **paramlst;
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1679 gchar *nick;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1680 gchar *nick_utf8, *reason_utf8;
584
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1681 struct role_affil ra;
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1682 const char *roomid = buddy_getjid(bud);
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1683
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1684 paramlst = split_arg(arg, 2, 1); // nickname, [reason]
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1685 nick = *paramlst;
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1686 arg = *(paramlst+1);
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1687
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1688 if (!nick || !*nick) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1689 scr_LogPrint(LPRINT_NORMAL, "Please specify a nickname.");
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1690 free_arg_lst(paramlst);
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1691 return;
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1692 }
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1693
584
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1694 ra.type = type_role;
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1695 ra.val.affil = role_none;
414fbf558f1e jb_room_setattrib()
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
1696
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1697 nick_utf8 = to_utf8(nick);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1698 reason_utf8 = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1699 jb_room_setattrib(roomid, NULL, nick_utf8, ra, reason_utf8);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1700 g_free(nick_utf8);
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1701 g_free(reason_utf8);
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1702
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1703 free_arg_lst(paramlst);
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1704 }
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1705
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1706 static void room_leave(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1707 {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1708 gchar *roomid, *desc;
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1709 const char *nickname;
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1710
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1711 nickname = buddy_getnickname(bud);
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1712 if (!nickname) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1713 scr_LogPrint(LPRINT_NORMAL, "You are not in this room.");
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1714 return;
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1715 }
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1716
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1717 roomid = g_strdup_printf("%s/%s", buddy_getjid(bud), nickname);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1718 desc = to_utf8(arg);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1719 jb_setstatus(offline, roomid, desc);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1720 g_free(desc);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1721 g_free(roomid);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1722 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1723
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1724 static void room_nick(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1725 {
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1726 if (!buddy_getinsideroom(bud)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1727 scr_LogPrint(LPRINT_NORMAL, "You are not in this room.");
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1728 return;
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1729 }
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1730
565
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1731 if (!arg || !*arg) {
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1732 const char *nick = buddy_getnickname(bud);
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1733 if (nick)
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1734 scr_LogPrint(LPRINT_NORMAL, "Your nickname is: %s", nick);
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1735 else
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1736 scr_LogPrint(LPRINT_NORMAL, "You have no nickname in this room.");
565
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1737 } else {
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1738 gchar *cmd;
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1739 cmd = g_strdup_printf("%s %s", buddy_getjid(bud), arg);
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1740 room_join(bud, cmd);
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1741 g_free(cmd);
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1742 }
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1743 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1744
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1745 static void room_privmsg(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1746 {
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1747 char **paramlst;
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1748 gchar *nick, *cmd;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1749
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1750 paramlst = split_arg(arg, 2, 0); // nickname, message
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1751 nick = *paramlst;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1752 arg = *(paramlst+1);
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1753
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1754 if (!nick || !*nick || !arg || !*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1755 scr_LogPrint(LPRINT_NORMAL,
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1756 "Please specify both a Jabber ID and a message.");
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1757 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1758 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1759 }
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1760
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1761 cmd = g_strdup_printf("%s/%s %s", buddy_getjid(bud), nick, arg);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1762 do_say_to(cmd);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1763 g_free(cmd);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1764 free_arg_lst(paramlst);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1765 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1766
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1767 static void room_remove(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1768 {
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1769 if (*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1770 scr_LogPrint(LPRINT_NORMAL, "This action does not require a parameter; "
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1771 "the currently-selected room will be removed.");
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1772 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1773 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1774
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1775 // Quick check: if there are resources, we haven't left
652
b243d3b3ff1b We do not need buddy_isresource() anymore
Mikael Berthe <mikael@lilotux.net>
parents: 650
diff changeset
1776 if (buddy_getinsideroom(bud)) {
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1777 scr_LogPrint(LPRINT_NORMAL, "You haven't left this room!");
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1778 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1779 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1780 // Delete the room
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1781 roster_del_user(buddy_getjid(bud));
865
cee8d6be04e1 Improve changeset a3db3ee8b99e, do not enable chatmode when refreshing
Mikael Berthe <mikael@lilotux.net>
parents: 861
diff changeset
1782 scr_UpdateBuddyWindow();
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1783 buddylist_build();
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1784 update_roster = TRUE;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1785 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1786
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1787 static void room_topic(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1788 {
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1789 gchar *msg;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1790
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1791 if (!buddy_getinsideroom(bud)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1792 scr_LogPrint(LPRINT_NORMAL, "You are not in this room.");
650
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1793 return;
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1794 }
c2d50b97ced4 MUC: /room {leave,nick,topic} can only be used when inside a room
Mikael Berthe <mikael@lilotux.net>
parents: 647
diff changeset
1795
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1796 // If no parameter is given, display the current topic
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1797 if (!*arg) {
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1798 const char *topic = buddy_gettopic(bud);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1799 if (topic)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1800 scr_LogPrint(LPRINT_NORMAL, "Topic: %s", topic);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1801 else
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1802 scr_LogPrint(LPRINT_NORMAL, "No topic has been set.");
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1803 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1804 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1805
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1806 arg = to_utf8(arg);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1807 // Set the topic
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1808 msg = g_strdup_printf("/me has set the topic to: %s", arg);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1809 jb_send_msg(buddy_getjid(bud), msg, ROSTER_TYPE_ROOM, arg);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1810 g_free(arg);
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1811 g_free(msg);
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1812 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1813
599
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1814 static void room_destroy(gpointer bud, char *arg)
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1815 {
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1816 gchar *msg;
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1817
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1818 if (arg && *arg)
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
1819 msg = to_utf8(arg);
599
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1820 else
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1821 msg = NULL;
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1822
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1823 jb_room_destroy(buddy_getjid(bud), NULL, msg);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
1824 g_free(msg);
599
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1825 }
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1826
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1827 static void room_unlock(gpointer bud, char *arg)
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1828 {
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1829 if (*arg) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1830 scr_LogPrint(LPRINT_NORMAL, "Unknown parameter.");
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1831 return;
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1832 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1833
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1834 jb_room_unlock(buddy_getjid(bud));
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1835 }
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1836
837
7c74eef1d0e0 New option "muc_auto_whois"
Mikael Berthe <mikael@lilotux.net>
parents: 835
diff changeset
1837 void room_whois(gpointer bud, char *arg)
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1838 {
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1839 char **paramlst;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1840 gchar *nick, *buffer;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1841 const char *jid, *realjid;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1842 const char *rst_msg;
575
1b8e024c3a10 Improve /room whois
Mikael Berthe <mikael@lilotux.net>
parents: 572
diff changeset
1843 gchar rprio;
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1844 enum imstatus rstatus;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1845 enum imrole role;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1846 enum imaffiliation affil;
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1847 time_t rst_time;
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1848
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1849 char *strroles[] = { "none", "moderator", "participant", "visitor" };
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1850 char *straffil[] = { "none", "owner", "admin", "member", "outcast" };
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1851
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1852 paramlst = split_arg(arg, 1, 0); // nickname
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1853 nick = *paramlst;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1854
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1855 if (!nick || !*nick) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1856 scr_LogPrint(LPRINT_NORMAL, "Please specify a nickname.");
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1857 free_arg_lst(paramlst);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1858 return;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1859 }
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1860
791
6c9e8fb69965 Fix "/room whois" with UTF-8 nickname
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
1861 nick = to_utf8(nick);
6c9e8fb69965 Fix "/room whois" with UTF-8 nickname
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
1862
647
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1863 // Enter chat mode
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1864 scr_set_chatmode(TRUE);
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1865 scr_ShowBuddyWindow();
c6c41dd2464a Enter chat mode automatically when using some commands
Mikael Berthe <mikael@lilotux.net>
parents: 644
diff changeset
1866
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1867 jid = buddy_getjid(bud);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1868 rstatus = buddy_getstatus(bud, nick);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1869
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1870 if (rstatus == offline) {
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1871 scr_LogPrint(LPRINT_NORMAL, "No such member: %s", nick);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1872 free_arg_lst(paramlst);
791
6c9e8fb69965 Fix "/room whois" with UTF-8 nickname
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
1873 g_free(nick);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1874 return;
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1875 }
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1876
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1877 rst_time = buddy_getstatustime(bud, nick);
575
1b8e024c3a10 Improve /room whois
Mikael Berthe <mikael@lilotux.net>
parents: 572
diff changeset
1878 rprio = buddy_getresourceprio(bud, nick);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1879 rst_msg = buddy_getstatusmsg(bud, nick);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1880 if (!rst_msg) rst_msg = "";
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1881
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1882 role = buddy_getrole(bud, nick);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1883 affil = buddy_getaffil(bud, nick);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1884 realjid = buddy_getrjid(bud, nick);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1885
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1886 buffer = g_new(char, 4096);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1887
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1888 snprintf(buffer, 4095, "Whois [%s]", nick);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1889 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1890 snprintf(buffer, 4095, "Status : [%c] %s", imstatus2char[rstatus],
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1891 rst_msg);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1892 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1893
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1894 if (rst_time) {
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1895 char tbuf[128];
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1896
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1897 strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S", localtime(&rst_time));
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1898 snprintf(buffer, 127, "Timestamp: %s", tbuf);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1899 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1900 }
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1901
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1902 if (realjid) {
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1903 snprintf(buffer, 4095, "JID : <%s>", realjid);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1904 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1905 }
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1906
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1907 snprintf(buffer, 4095, "Role : %s", strroles[role]);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1908 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1909 snprintf(buffer, 4095, "Affiliat.: %s", straffil[affil]);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1910 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
626
b75f4105ce32 Use a larger buffer for commands like /info
Mikael Berthe <mikael@lilotux.net>
parents: 625
diff changeset
1911 snprintf(buffer, 4095, "Priority : %d", rprio);
847
e1b7f71b0b1c Improve readability for some commands
Mikael Berthe <mikael@lilotux.net>
parents: 846
diff changeset
1912 scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_NONE);
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 622
diff changeset
1913
575
1b8e024c3a10 Improve /room whois
Mikael Berthe <mikael@lilotux.net>
parents: 572
diff changeset
1914 scr_WriteIncomingMessage(jid, "End of WHOIS", 0, HBB_PREFIX_INFO);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1915
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1916 g_free(buffer);
791
6c9e8fb69965 Fix "/room whois" with UTF-8 nickname
Mikael Berthe <mikael@lilotux.net>
parents: 777
diff changeset
1917 g_free(nick);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1918 free_arg_lst(paramlst);
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1919 }
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1920
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1921 static void do_room(char *arg)
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1922 {
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1923 char **paramlst;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1924 char *subcmd;
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1925 gpointer bud;
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1926
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1927 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1928 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1929 return;
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1930 }
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 471
diff changeset
1931
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1932 paramlst = split_arg(arg, 2, 1); // subcmd, arg
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1933 subcmd = *paramlst;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1934 arg = *(paramlst+1);
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1935
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1936 if (!subcmd || !*subcmd) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
1937 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1938 free_arg_lst(paramlst);
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1939 return;
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1940 }
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1941
831
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1942 if (current_buddy) {
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1943 bud = BUDDATA(current_buddy);
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1944 } else {
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1945 if (strcasecmp(subcmd, "join"))
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1946 return;
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1947 // "room join" is a special case, we don't need to have a valid
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1948 // current_buddy.
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1949 bud = NULL;
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1950 }
dd865cc57aa2 Fix joining a room when the buddylist is empty
Mikael Berthe <mikael@lilotux.net>
parents: 820
diff changeset
1951
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1952 if (!strcasecmp(subcmd, "join")) {
841
f8c0447beec2 Allow "/room join . [nick]" if the current item is a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 840
diff changeset
1953 if ((arg = check_room_subcommand(arg, FALSE, NULL)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1954 room_join(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1955 } else if (!strcasecmp(subcmd, "invite")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1956 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1957 room_invite(bud, arg);
585
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1958 } else if (!strcasecmp(subcmd, "affil")) {
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1959 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1960 room_affil(bud, arg);
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1961 } else if (!strcasecmp(subcmd, "role")) {
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1962 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
7eff2c1481fa Add "/room affil" and "/room role"
Mikael Berthe <mikael@lilotux.net>
parents: 584
diff changeset
1963 room_role(bud, arg);
571
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1964 } else if (!strcasecmp(subcmd, "ban")) {
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1965 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
d63e6cbdc297 Add "/room ban"
Mikael Berthe <mikael@lilotux.net>
parents: 570
diff changeset
1966 room_ban(bud, arg);
568
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1967 } else if (!strcasecmp(subcmd, "kick")) {
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1968 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
eb1df2371581 Add "/room kick"
Mikael Berthe <mikael@lilotux.net>
parents: 566
diff changeset
1969 room_kick(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1970 } else if (!strcasecmp(subcmd, "leave")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1971 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1972 room_leave(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1973 } else if (!strcasecmp(subcmd, "names")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1974 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1975 room_names(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1976 } else if (!strcasecmp(subcmd, "nick")) {
565
89c347b3e4c1 MUC: Make "/room nick" display the current nickname
Mikael Berthe <mikael@lilotux.net>
parents: 558
diff changeset
1977 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1978 room_nick(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1979 } else if (!strcasecmp(subcmd, "privmsg")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1980 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1981 room_privmsg(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1982 } else if (!strcasecmp(subcmd, "remove")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1983 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1984 room_remove(bud, arg);
599
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1985 } else if (!strcasecmp(subcmd, "destroy")) {
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1986 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
fb67bf62f4eb Add "/room destroy"
Mikael Berthe <mikael@lilotux.net>
parents: 598
diff changeset
1987 room_destroy(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1988 } else if (!strcasecmp(subcmd, "unlock")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1989 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1990 room_unlock(bud, arg);
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1991 } else if (!strcasecmp(subcmd, "topic")) {
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
1992 if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
552
ba5271b49f21 Split do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1993 room_topic(bud, arg);
572
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1994 } else if (!strcasecmp(subcmd, "whois")) {
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1995 if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
afc2bd38b15c Implement affiliations handling, add "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 571
diff changeset
1996 room_whois(bud, arg);
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1997 } else {
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1998 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
1999 }
554
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
2000
2424bbf0a6db Some more work on do_room()
Mikael Berthe <mikael@lilotux.net>
parents: 552
diff changeset
2001 free_arg_lst(paramlst);
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
2002 }
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 446
diff changeset
2003
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2004 static void do_authorization(char *arg)
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2005 {
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2006 char **paramlst;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2007 char *subcmd;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2008 char *jid_utf8;
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2009
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2010 if (!jb_getonline()) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
2011 scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2012 return;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2013 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2014
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2015 paramlst = split_arg(arg, 2, 0); // subcmd, [jid]
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2016 subcmd = *paramlst;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2017 arg = *(paramlst+1);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2018
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2019 if (!subcmd || !*subcmd) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
2020 scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2021 free_arg_lst(paramlst);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2022 return;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2023 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2024
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2025 // Use the provided jid, if it looks valid
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2026 if (arg) {
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2027 if (!*arg) {
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2028 // If no jid is provided, we use the current selected buddy
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2029 arg = NULL;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2030 } else {
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2031 if (check_jid_syntax(arg)) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
2032 scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", arg);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2033 free_arg_lst(paramlst);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2034 return;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2035 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2036 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2037 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2038
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2039 if (!arg) { // Use the current selected buddy's jid
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2040 gpointer bud;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2041 guint type;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2042
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2043 if (!current_buddy) return;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2044 bud = BUDDATA(current_buddy);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2045
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2046 jid_utf8 = arg = (char*)buddy_getjid(bud);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2047 type = buddy_gettype(bud);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2048
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2049 if (!(type & (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT))) {
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
2050 scr_LogPrint(LPRINT_NORMAL, "Invalid buddy.");
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2051 return;
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2052 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2053 } else {
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2054 jid_utf8 = to_utf8(arg);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2055 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2056
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2057 if (!strcasecmp(subcmd, "allow")) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2058 jb_subscr_send_auth(jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2059 scr_LogPrint(LPRINT_LOGNORM,
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2060 "<%s> is now allowed to receive your presence updates.",
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2061 jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2062 } else if (!strcasecmp(subcmd, "cancel")) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2063 jb_subscr_cancel_auth(jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2064 scr_LogPrint(LPRINT_LOGNORM,
681
8dc602a246a4 Improve messages in commands.c
Philip M. White <pmw@qnan.org>
parents: 677
diff changeset
2065 "<%s> will no longer receive your presence updates.",
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2066 jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2067 } else if (!strcasecmp(subcmd, "request")) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2068 jb_subscr_request_auth(jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2069 scr_LogPrint(LPRINT_LOGNORM,
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2070 "Sent presence notification request to <%s>...", jid_utf8);
835
6a732d2ad4b4 Add "/authorization request_unsubscribe"
Mikael Berthe <mikael@lilotux.net>
parents: 831
diff changeset
2071 } else if (!strcasecmp(subcmd, "request_unsubscribe")) {
6a732d2ad4b4 Add "/authorization request_unsubscribe"
Mikael Berthe <mikael@lilotux.net>
parents: 831
diff changeset
2072 jb_subscr_request_cancel(jid_utf8);
6a732d2ad4b4 Add "/authorization request_unsubscribe"
Mikael Berthe <mikael@lilotux.net>
parents: 831
diff changeset
2073 scr_LogPrint(LPRINT_LOGNORM,
6a732d2ad4b4 Add "/authorization request_unsubscribe"
Mikael Berthe <mikael@lilotux.net>
parents: 831
diff changeset
2074 "Sent presence notification ubsubscription request to <%s>...",
6a732d2ad4b4 Add "/authorization request_unsubscribe"
Mikael Berthe <mikael@lilotux.net>
parents: 831
diff changeset
2075 jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2076 } else {
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2077 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2078 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2079
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2080 // Only free jid_utf8 if it has been allocated, i.e. if != arg.
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2081 if (jid_utf8 && jid_utf8 != arg)
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2082 g_free(jid_utf8);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2083 free_arg_lst(paramlst);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2084 }
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 608
diff changeset
2085
622
2b7ef605ddc6 Add /version command
Mikael Berthe <mikael@lilotux.net>
parents: 620
diff changeset
2086 static void do_version(char *arg)
2b7ef605ddc6 Add /version command
Mikael Berthe <mikael@lilotux.net>
parents: 620
diff changeset
2087 {
777
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
2088 gchar *ver = mcabber_version();
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
2089 scr_LogPrint(LPRINT_NORMAL, "This is mcabber version %s.", ver);
e6d42f239541 "/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
2090 g_free(ver);
622
2b7ef605ddc6 Add /version command
Mikael Berthe <mikael@lilotux.net>
parents: 620
diff changeset
2091 }
2b7ef605ddc6 Add /version command
Mikael Berthe <mikael@lilotux.net>
parents: 620
diff changeset
2092
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2093 static void do_request(char *arg)
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2094 {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2095 char **paramlst;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2096 char *jid, *type;
740
1877838d3c27 Kill two gcc warnings
Mikael Berthe <mikael@lilotux.net>
parents: 707
diff changeset
2097 enum iqreq_type numtype = iqreq_none;
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2098 char *jid_utf8 = NULL;
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2099
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2100 paramlst = split_arg(arg, 2, 0); // type, jid
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2101 type = *paramlst;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2102 jid = *(paramlst+1);
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2103
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2104 if (type) {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2105 // Quick check...
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2106 if (!strcasecmp(type, "version"))
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2107 numtype = iqreq_version;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2108 else if (!strcasecmp(type, "time"))
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2109 numtype = iqreq_time;
694
6d6fdaf846ed Add "/request show_list"
Mikael Berthe <mikael@lilotux.net>
parents: 693
diff changeset
2110 else if (!strcasecmp(type, "show_list")) {
6d6fdaf846ed Add "/request show_list"
Mikael Berthe <mikael@lilotux.net>
parents: 693
diff changeset
2111 // Undocumented command, for debugging purposes only
6d6fdaf846ed Add "/request show_list"
Mikael Berthe <mikael@lilotux.net>
parents: 693
diff changeset
2112 jb_iqs_display_list();
6d6fdaf846ed Add "/request show_list"
Mikael Berthe <mikael@lilotux.net>
parents: 693
diff changeset
2113 free_arg_lst(paramlst);
6d6fdaf846ed Add "/request show_list"
Mikael Berthe <mikael@lilotux.net>
parents: 693
diff changeset
2114 return;
6d6fdaf846ed Add "/request show_list"
Mikael Berthe <mikael@lilotux.net>
parents: 693
diff changeset
2115 }
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2116 }
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2117
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2118 if (!type || !numtype) {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2119 scr_LogPrint(LPRINT_NORMAL,
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2120 "Please specify a query type (version, time).");
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2121 free_arg_lst(paramlst);
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2122 return;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2123 }
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2124
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2125 // Allow special jid "" or "." (current buddy)
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2126 if (jid && (!*jid || !strcmp(jid, ".")))
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2127 jid = NULL;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2128
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2129 if (jid) {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2130 // The JID has been specified. Quick check...
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2131 if (check_jid_syntax(jid)) {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2132 scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber ID.", jid);
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2133 jid = NULL;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2134 } else {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2135 // Convert jid to lowercase
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2136 char *p;
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2137 for (p = jid; *p && *p != '/'; p++)
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2138 *p = tolower(*p);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2139 jid = jid_utf8 = to_utf8(jid);
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2140 }
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2141 } else {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2142 // Add the current buddy
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2143 if (current_buddy)
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2144 jid = (char*)buddy_getjid(BUDDATA(current_buddy));
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2145 if (!jid)
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2146 scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2147 }
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2148
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2149 if (jid) {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2150 switch (numtype) {
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2151 case iqreq_version:
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2152 case iqreq_time:
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2153 jb_request(jid, numtype);
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2154 break;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2155 default:
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2156 break;
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2157 }
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2158 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
2159 g_free(jid_utf8);
693
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2160 free_arg_lst(paramlst);
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2161 }
e98abd3ce28c Add /request command
Mikael Berthe <mikael@lilotux.net>
parents: 681
diff changeset
2162
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2163 static void do_event(char *arg)
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2164 {
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2165 char **paramlst;
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2166 char *evid, *subcmd;
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2167 int action = -1;
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2168 GSList *evidlst;
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2169
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2170 paramlst = split_arg(arg, 2, 0); // id, subcmd
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2171 evid = *paramlst;
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2172 subcmd = *(paramlst+1);
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2173
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2174 if (!evid || !subcmd) {
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2175 // Special case: /event list
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2176 if (evid && !strcasecmp(evid, "list"))
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2177 evs_display_list();
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2178 else
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2179 scr_LogPrint(LPRINT_NORMAL,
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2180 "Missing parameter. Usage: /event num action");
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2181 free_arg_lst(paramlst);
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2182 return;
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2183 }
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2184
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2185 if (!strcasecmp(subcmd, "reject"))
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2186 action = 0;
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2187 else if (!strcasecmp(subcmd, "accept"))
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2188 action = 1;
755
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2189 else if (!strcasecmp(subcmd, "ignore"))
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2190 action = 2;
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2191
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2192 if (action == -1) {
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2193 scr_LogPrint(LPRINT_NORMAL, "Wrong action parameter.");
755
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2194 } else if (action >= 0 && action <= 2) {
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2195 GSList *p;
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2196
755
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2197 if (action == 2) {
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2198 action = EVS_CONTEXT_CANCEL;
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2199 } else {
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2200 action += EVS_CONTEXT_USER;
b747f76e57ae Add "/event n ignore"
Mikael Berthe <mikael@lilotux.net>
parents: 750
diff changeset
2201 }
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2202
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2203 if (!strcmp(evid, "*")) {
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2204 // Use completion list
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2205 evidlst = evs_geteventslist(FALSE);
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2206 } else {
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2207 // Let's create a slist with the provided event id
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2208 evidlst = g_slist_append(NULL, g_strdup(evid));
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2209 }
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2210 for (p = evidlst; p; p = g_slist_next(p)) {
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2211 if (evs_callback(p->data, action) == -1) {
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2212 scr_LogPrint(LPRINT_NORMAL, "Event %s not found.", p->data);
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2213 }
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2214 g_free(p->data);
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2215 }
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 807
diff changeset
2216 g_slist_free(evidlst);
748
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2217 }
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2218
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2219 free_arg_lst(paramlst);
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2220 }
53a000411587 Add /event command
Mikael Berthe <mikael@lilotux.net>
parents: 740
diff changeset
2221
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
2222 static void do_connect(char *arg)
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2223 {
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2224 mcabber_connect();
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2225 }
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2226
336
eb994ee40029 Make some functions static
Mikael Berthe <mikael@lilotux.net>
parents: 330
diff changeset
2227 static void do_disconnect(char *arg)
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2228 {
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2229 jb_disconnect();
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 290
diff changeset
2230 }
576
8b3db0b555a1 Add Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 575
diff changeset
2231
868
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
2232 static void do_help(char *arg)
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
2233 {
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
2234 help_process(arg);
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
2235 }
cefdaeb42e67 Add online /help command
Mikael Berthe <mikael@lilotux.net>
parents: 867
diff changeset
2236
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
2237 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */