annotate mcabber/src/commands.c @ 830:80434fde7cfa

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