annotate mcabber/src/hooks.c @ 147:7571de4aed73

[/trunk] Changeset 159 by mikael * Fix a bug in buddylist_build() * We now lock the current buddy even not when being in chat mode. For example, if we're writing to s.o. and he leaves just before we press enter, we won't write to the wrong buddy... If the current_buddy is a group, we lock it too. * Remove MCABBER_TESTUNIT ifdef in roster.h (test program isn't up-to-date anymore...)
author mikael
date Fri, 29 Apr 2005 19:56:28 +0000
parents 50f23c38743a
children 44c6410b4845
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
1 /*
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
2 * hooks.c -- Hooks layer
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
3 *
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
4 * Copyright (C) 2005 Mikael Berthe <bmikael@lists.lilotux.net>
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
5 *
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or (at
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
9 * your option) any later version.
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
10 *
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
14 * General Public License for more details.
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
15 *
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
19 * USA
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
20 */
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
21
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
22 #include <screen.h>
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
23
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
24 #include "hooks.h"
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
25 #include "roster.h"
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
26 #include "histolog.h"
115
33bff2c57293 [/trunk] Changeset 129 by mikael
mikael
parents: 113
diff changeset
27 #include "utf8.h"
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
28
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
29
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
30 inline void hk_message_in(const char *jid, time_t timestamp, const char *msg)
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
31 {
115
33bff2c57293 [/trunk] Changeset 129 by mikael
mikael
parents: 113
diff changeset
32 char *buffer = utf8_decode(msg);
141
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
33 int new_guy = FALSE;
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
34
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
35 // If this user isn't in the roster, we add it
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
36 if (!roster_exists(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
37 roster_add_user(jid, NULL, NULL, ROSTER_TYPE_USER);
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
38 new_guy = TRUE;
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
39 }
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
40
115
33bff2c57293 [/trunk] Changeset 129 by mikael
mikael
parents: 113
diff changeset
41 scr_WriteIncomingMessage(jid, buffer);
33bff2c57293 [/trunk] Changeset 129 by mikael
mikael
parents: 113
diff changeset
42 hlog_write_message(jid, timestamp, FALSE, buffer);
33bff2c57293 [/trunk] Changeset 129 by mikael
mikael
parents: 113
diff changeset
43 free(buffer);
146
50f23c38743a [/trunk] Changeset 158 by mikael
mikael
parents: 141
diff changeset
44 // We need to rebuild the list if the sender is unknown or
50f23c38743a [/trunk] Changeset 158 by mikael
mikael
parents: 141
diff changeset
45 // if the sender is offline/invisible and hide_offline_buddies is set
50f23c38743a [/trunk] Changeset 158 by mikael
mikael
parents: 141
diff changeset
46 if (new_guy ||
50f23c38743a [/trunk] Changeset 158 by mikael
mikael
parents: 141
diff changeset
47 (roster_getstatus(jid) == offline && buddylist_get_hide_offline_buddies()))
50f23c38743a [/trunk] Changeset 158 by mikael
mikael
parents: 141
diff changeset
48 {
141
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
49 buddylist_build();
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
50 update_roster = TRUE;
6533a231a65e [/trunk] Changeset 153 by mikael
mikael
parents: 120
diff changeset
51 }
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
52 }
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
53
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
54 inline void hk_message_out(const char *jid, time_t timestamp, const char *msg)
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
55 {
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
56 scr_WriteOutgoingMessage(jid, msg);
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
57 hlog_write_message(jid, timestamp, TRUE, msg);
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
58 }
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
59
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
60 inline void hk_statuschange(const char *jid, time_t timestamp,
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
61 enum imstatus status)
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
62 {
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
63 scr_LogPrint("Buddy status has changed: [%c>%c] <%s>",
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
64 imstatus2char[roster_getstatus(jid)], imstatus2char[status], jid);
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
65 roster_setstatus(jid, status);
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 118
diff changeset
66 buddylist_build();
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 118
diff changeset
67 scr_DrawRoster();
113
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
68 hlog_write_status(jid, 0, status);
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
69 }
8ac67e951eab [/trunk] Changeset 127 by mikael
mikael
parents:
diff changeset
70
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
71 inline void hk_mystatuschange(time_t timestamp,
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
72 enum imstatus old_status, enum imstatus new_status)
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
73 {
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
74 if (old_status == new_status)
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
75 return;
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
76
118
1e8f646e2c5b [/trunk] Changeset 131 by mikael
mikael
parents: 116
diff changeset
77 scr_LogPrint("Your status has changed: [%c>%c]",
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
78 imstatus2char[old_status], imstatus2char[new_status]);
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
79 //hlog_write_status(NULL, 0, status);
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
80 }
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 115
diff changeset
81