Wed, 13 May 2009 20:29:03 +0000
Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.
|
11218
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1 | #include <assert.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
2 | #include <stdlib.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
3 | #include <string.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
4 | #include "cc_interface.h" |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
5 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
6 | struct cc_session_node { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
7 | struct cc_session session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
8 | struct cc_session_node *next; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
9 | }; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
10 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
11 | struct cc_session *cc_find_session(struct crazychat *cc, char *handle) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
12 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
13 | struct cc_session_node *curr; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
14 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
15 | assert(cc); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
16 | assert(handle); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
17 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
18 | curr = cc->sessions; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
19 | while (curr) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
20 | struct cc_session *session = &curr->session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
21 | if (!strncmp(session->name, handle, strlen(session->name))) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
22 | return session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
23 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
24 | curr = curr->next; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
25 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
26 | return NULL; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
27 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
28 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
29 | struct cc_session *cc_add_session(struct crazychat *cc, char *handle) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
30 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
31 | struct cc_session_node *curr; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
32 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
33 | assert(cc); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
34 | assert(handle); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
35 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
36 | if (!cc->sessions) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
37 | cc->sessions = (struct cc_session_node*) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
38 | malloc(sizeof(*cc->sessions)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
39 | memset(cc->sessions, 0, sizeof(*cc->sessions)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
40 | cc->sessions->session.cc = cc; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
41 | cc->sessions->session.name = strdup(handle); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
42 | return &cc->sessions->session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
43 | } else { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
44 | if (!strncmp(cc->sessions->session.name, handle, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
45 | strlen(cc->sessions->session.name))) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
46 | return &cc->sessions->session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
47 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
48 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
49 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
50 | curr = cc->sessions; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
51 | while (curr->next) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
52 | struct cc_session *session = &curr->next->session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
53 | if (!strncmp(session->name, handle, strlen(session->name))) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
54 | return session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
55 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
56 | curr = curr->next; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
57 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
58 | curr->next = (struct cc_session_node*)malloc(sizeof(*curr->next)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
59 | memset(curr->next, 0, sizeof(*curr->next)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
60 | curr->next->session.cc = cc; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
61 | curr->next->session.name = strdup(handle); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
62 | return &curr->next->session; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
63 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
64 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
65 | void cc_remove_session(struct crazychat *cc, struct cc_session *session) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
66 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
67 | struct cc_session_node *curr, *prev; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
68 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
69 | assert(cc); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
70 | assert(session); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
71 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
72 | assert(cc->sessions); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
73 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
74 | curr = cc->sessions; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
75 | prev = NULL; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
76 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
77 | while (curr) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
78 | if (&curr->session == session) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
79 | if (prev) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
80 | prev->next = curr->next; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
81 | } else { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
82 | cc->sessions = curr->next; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
83 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
84 | /* destroy curr */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
85 | free(curr); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
86 | g_source_remove(session->timer_id); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
87 | free(session->name); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
88 | free(session); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
89 | return; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
90 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
91 | prev = curr; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
92 | curr = curr->next; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
93 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
94 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
95 | assert(0); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
96 | } |