Changeset 345577b
- Timestamp:
- 2015-10-30T10:27:20Z (9 years ago)
- Branches:
- master
- Children:
- fb2338d
- Parents:
- 0db6618
- git-author:
- dequis <dx@…> (13-09-15 04:17:14)
- git-committer:
- dequis <dx@…> (30-10-15 10:27:20)
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/user-guide/commands.xml
r0db6618 r345577b 1404 1404 </bitlbee-setting> 1405 1405 1406 <bitlbee-setting name="self_messages" type="string" scope="global"> 1407 <default>true</default> 1408 <possible-values>true, false, prefix, prefix_notice</possible-values> 1409 1410 <description> 1411 <para> 1412 Change this setting to customize how (or whether) to show self-messages, which are messages sent by yourself from other locations (for example, mobile clients), for IM protocols that support it. 1413 </para> 1414 1415 <para> 1416 When this is set to "true", it will send those messages in the "standard" way, which is a PRIVMSG with source and target fields swapped. 1417 </para> 1418 1419 <para> 1420 Since this isn't very well supported by some clients (the messages might appear in the wrong window), you can set it to "prefix" to show them as a normal message prefixed with "-> ", or use "prefix_notice" which is the same thing but with a NOTICE instead. 1421 </para> 1422 1423 <para> 1424 You can also set it to "false" to disable these messages completely. 1425 </para> 1426 1427 <para> 1428 This setting only applies to private messages. Self messages in groupchats are always shown, since they haven't caused issues in any clients so far. 1429 </para> 1430 </description> 1431 </bitlbee-setting> 1432 1406 1433 <bitlbee-setting name="server" type="string" scope="account"> 1407 1434 <description> -
irc.c
r0db6618 r345577b 129 129 s = set_add(&b->set, "show_offline", "false", set_eval_bw_compat, irc); 130 130 s->flags |= SET_HIDDEN; 131 s = set_add(&b->set, "self_messages", "true", set_eval_self_messages, irc); 131 132 s = set_add(&b->set, "simulate_netsplit", "true", set_eval_bool, irc); 132 133 s = set_add(&b->set, "timezone", "local", set_eval_timezone, irc); -
irc.h
r0db6618 r345577b 354 354 char *set_eval_timezone(struct set *set, char *value); 355 355 char *irc_format_timestamp(irc_t *irc, time_t msg_ts); 356 char *set_eval_self_messages(struct set *set, char *value); 356 357 357 358 /* irc_im.c */ -
irc_im.c
r0db6618 r345577b 201 201 } 202 202 203 static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, time_t sent_at)203 static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, guint32 flags, time_t sent_at) 204 204 { 205 205 irc_t *irc = bee->ui_data; 206 206 irc_user_t *iu = (irc_user_t *) bu->ui_data; 207 irc_user_t *src_iu = iu; 208 irc_user_t *dst_iu = irc->user; 207 209 const char *dst; 208 210 char *prefix = NULL; 209 211 char *wrapped, *ts = NULL; 210 212 char *msg = g_strdup(msg_); 213 char *message_type = "PRIVMSG"; 211 214 GSList *l; 212 215 … … 216 219 217 220 dst = irc_user_msgdest(iu); 218 if (dst != irc->user->nick) { 219 /* if not messaging directly, call user by name */ 220 prefix = g_strdup_printf("%s%s%s", irc->user->nick, set_getstr(&bee->set, "to_char"), ts ? : ""); 221 222 if (flags & OPT_SELFMESSAGE) { 223 char *setting = set_getstr(&irc->b->set, "self_messages"); 224 225 if (is_bool(setting)) { 226 if (bool2int(setting)) { 227 /* set to true, send it with src/dst flipped */ 228 229 dst_iu = iu; 230 src_iu = irc->user; 231 232 if (dst == irc->user->nick) { 233 dst = dst_iu->nick; 234 } 235 } else { 236 /* set to false, skip the message completely */ 237 goto cleanup; 238 } 239 } else if (g_strncasecmp(setting, "prefix", 6) == 0) { 240 /* third state, prefix, loosely imitates the znc privmsg_prefix module */ 241 242 g_free(msg); 243 if (g_strncasecmp(msg_, "/me ", 4) == 0) { 244 msg = g_strdup_printf("/me -> %s", msg_ + 4); 245 } else { 246 msg = g_strdup_printf("-> %s", msg_); 247 } 248 249 if (g_strcasecmp(setting, "prefix_notice") == 0) { 250 message_type = "NOTICE"; 251 } 252 } 253 254 } 255 256 if (dst != dst_iu->nick) { 257 /* if not messaging directly (control channel), call user by name */ 258 prefix = g_strdup_printf("%s%s%s", dst_iu->nick, set_getstr(&bee->set, "to_char"), ts ? : ""); 221 259 } else { 222 260 prefix = ts; … … 249 287 250 288 wrapped = word_wrap(msg, 425); 251 irc_send_msg( iu, "PRIVMSG", dst, wrapped, prefix);289 irc_send_msg(src_iu, message_type, dst, wrapped, prefix); 252 290 g_free(wrapped); 253 291 … … 260 298 } 261 299 262 static gboolean bee_irc_user_typing(bee_t *bee, bee_user_t *bu, uint32_tflags)300 static gboolean bee_irc_user_typing(bee_t *bee, bee_user_t *bu, guint32 flags) 263 301 { 264 302 irc_t *irc = (irc_t *) bee->ui_data; … … 617 655 } 618 656 619 static gboolean bee_irc_chat_msg(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, time_t sent_at)657 static gboolean bee_irc_chat_msg(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, guint32 flags, time_t sent_at) 620 658 { 621 659 irc_t *irc = bee->ui_data; 622 irc_user_t *iu = bu->ui_data;660 irc_user_t *iu = flags & OPT_SELFMESSAGE ? irc->user : bu->ui_data; 623 661 irc_channel_t *ic = c->ui_data; 624 662 char *wrapped, *ts = NULL; -
irc_util.c
r0db6618 r345577b 119 119 } 120 120 } 121 122 123 char *set_eval_self_messages(set_t *set, char *value) 124 { 125 if (is_bool(value) || 126 g_strcasecmp(value, "prefix") == 0 || 127 g_strcasecmp(value, "prefix_notice") == 0) { 128 return value; 129 } else { 130 return SET_INVALID; 131 } 132 } -
protocols/bee.h
r0db6618 r345577b 105 105 gboolean (*user_status)(bee_t *bee, struct bee_user *bu, struct bee_user *old); 106 106 /* On every incoming message. sent_at = 0 means unknown. */ 107 gboolean (*user_msg)(bee_t *bee, bee_user_t *bu, const char *msg, time_t sent_at);107 gboolean (*user_msg)(bee_t *bee, bee_user_t *bu, const char *msg, guint32 flags, time_t sent_at); 108 108 /* Flags currently defined (OPT_TYPING/THINKING) in nogaim.h. */ 109 109 gboolean (*user_typing)(bee_t *bee, bee_user_t *bu, guint32 flags); … … 118 118 /* System messages of any kind. */ 119 119 gboolean (*chat_log)(bee_t *bee, struct groupchat *c, const char *text); 120 gboolean (*chat_msg)(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, time_t sent_at);120 gboolean (*chat_msg)(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *msg, guint32 flags, time_t sent_at); 121 121 gboolean (*chat_add_user)(bee_t *bee, struct groupchat *c, bee_user_t *bu); 122 122 gboolean (*chat_remove_user)(bee_t *bee, struct groupchat *c, bee_user_t *bu, const char *reason); -
protocols/bee_chat.c
r0db6618 r345577b 95 95 } 96 96 97 void imcb_chat_msg(struct groupchat *c, const char *who, char *msg, uint32_tflags, time_t sent_at)97 void imcb_chat_msg(struct groupchat *c, const char *who, char *msg, guint32 flags, time_t sent_at) 98 98 { 99 99 struct im_connection *ic = c->ic; 100 100 bee_t *bee = ic->bee; 101 101 bee_user_t *bu; 102 gboolean temp ;102 gboolean temp = FALSE; 103 103 char *s; 104 104 105 /* Gaim sends own messages through this too. IRC doesn't want this, so kill them */ 106 if (handle_is_self(ic, who)) { 105 if (handle_is_self(ic, who) && !(flags & OPT_SELFMESSAGE)) { 107 106 return; 108 107 } … … 122 121 123 122 if (bee->ui->chat_msg) { 124 bee->ui->chat_msg(bee, c, bu, msg, sent_at);123 bee->ui->chat_msg(bee, c, bu, msg, flags, sent_at); 125 124 } 126 125 -
protocols/bee_user.c
r0db6618 r345577b 247 247 } 248 248 249 void imcb_buddy_msg(struct im_connection *ic, const char *handle, const char *msg, uint32_tflags, time_t sent_at)249 void imcb_buddy_msg(struct im_connection *ic, const char *handle, const char *msg, guint32 flags, time_t sent_at) 250 250 { 251 251 bee_t *bee = ic->bee; … … 265 265 266 266 if (bee->ui->user_msg && bu) { 267 bee->ui->user_msg(bee, bu, msg, sent_at);267 bee->ui->user_msg(bee, bu, msg, flags, sent_at); 268 268 } else { 269 269 imcb_log(ic, "Message from unknown handle %s:\n%s", handle, msg); … … 297 297 } 298 298 299 void imcb_buddy_typing(struct im_connection *ic, const char *handle, uint32_tflags)299 void imcb_buddy_typing(struct im_connection *ic, const char *handle, guint32 flags) 300 300 { 301 301 bee_user_t *bu; -
protocols/nogaim.h
r0db6618 r345577b 70 70 #define OPT_PONGS 0x00010000 /* Service sends us keep-alives */ 71 71 #define OPT_PONGED 0x00020000 /* Received a keep-alive during last interval */ 72 #define OPT_SELFMESSAGE 0x00080000 /* A message sent by self from another location */ 72 73 73 74 /* ok. now the fun begins. first we create a connection structure */ … … 325 326 G_MODULE_EXPORT void imcb_buddy_action_response(bee_user_t *bu, const char *action, char * const args[], void *data); 326 327 327 G_MODULE_EXPORT void imcb_buddy_typing(struct im_connection *ic, const char *handle, uint32_tflags);328 G_MODULE_EXPORT void imcb_buddy_typing(struct im_connection *ic, const char *handle, guint32 flags); 328 329 G_MODULE_EXPORT struct bee_user *imcb_buddy_by_handle(struct im_connection *ic, const char *handle); 329 330 G_MODULE_EXPORT void imcb_clean_handle(struct im_connection *ic, char *handle);
Note: See TracChangeset
for help on using the changeset viewer.