62 DISCONNECTED |
63 DISCONNECTED |
63 } |
64 } |
64 |
65 |
65 public signal void state_changed(Conference conf, State old_state, State new_state, string description); |
66 public signal void state_changed(Conference conf, State old_state, State new_state, string description); |
66 public signal void on_join(Conference conf, Occupant occupant); |
67 public signal void on_join(Conference conf, Occupant occupant); |
67 public signal void on_part(Conference conf, Occupant occupant); |
68 public signal void on_part(Conference conf, Occupant occupant, string? status); |
68 public signal void on_role(Conference conf, Occupant occupant, Role prev); |
69 public signal void on_role(Conference conf, Occupant occupant, Role prev); |
69 public signal void on_affil(Conference conf, Occupant occupant, Affiliation prev); |
70 public signal void on_affil(Conference conf, Occupant occupant, Affiliation prev); |
70 public signal void on_nick(Conference conf, Occupant occupant, string prev); |
71 public signal void on_nick(Conference conf, Occupant occupant, string prev); |
71 public signal void on_message(Conference conf, Occupant? occupant, Lm.MessageNode message, string? body); |
72 public signal void on_message(Conference conf, Occupant? occupant, Lm.MessageNode message, string? body); |
72 public signal void on_subject(Conference conf, Occupant? occupant); |
73 public signal void on_subject(Conference conf, Occupant? occupant); |
168 log("Muc", LogLevelFlags.LEVEL_INFO, "Joined a room which I was already in: %s", from[0]); |
169 log("Muc", LogLevelFlags.LEVEL_INFO, "Joined a room which I was already in: %s", from[0]); |
169 |
170 |
170 if (occupant != null) { |
171 if (occupant != null) { |
171 if (role == Role.NONE) { |
172 if (role == Role.NONE) { |
172 occupants.unset(from[1]); |
173 occupants.unset(from[1]); |
|
174 var status_child = node.get_child("status"); |
173 log("Muc", LogLevelFlags.LEVEL_INFO, "MUC<%s> %s has parted.", this.jid, from[1]); |
175 log("Muc", LogLevelFlags.LEVEL_INFO, "MUC<%s> %s has parted.", this.jid, from[1]); |
174 module.on_part(this, occupant); |
176 module.on_part(this, occupant, (status_child!=null) ? status_child.get_value() : null); |
175 if (occupant.isme) { |
177 if (occupant.isme) { |
176 _change_state(State.DISCONNECTED, "we became unavailable"); |
178 _change_state(State.DISCONNECTED, "we became unavailable"); |
177 } |
179 } |
178 } else { |
180 } else { |
179 if (affil != occupant.affil) { |
181 if (affil != occupant.affil) { |
192 occupant.nick = prs_nick; |
194 occupant.nick = prs_nick; |
193 module.on_nick(this, occupant, from[1]); |
195 module.on_nick(this, occupant, from[1]); |
194 } |
196 } |
195 } |
197 } |
196 } else { |
198 } else { |
197 assert( role!= Role.NONE); |
199 if( role!= Role.NONE) { |
198 occupant = new Occupant(); |
200 occupant = new Occupant(); |
199 occupant.role = role; |
201 occupant.role = role; |
200 occupant.affil = affil; |
202 occupant.affil = affil; |
201 occupant.nick = from[1]; |
203 occupant.nick = from[1]; |
202 occupants[from[1]] = occupant; |
204 occupants[from[1]] = occupant; |
203 occupant.isme = statuses.contains(110); |
205 occupant.isme = statuses.contains(110); |
204 log("Muc", LogLevelFlags.LEVEL_INFO, "MUC<%s> %s has joined as %s/%s.", this.jid, from[1], affil.to_string(), role.to_string()); |
206 log("Muc", LogLevelFlags.LEVEL_INFO, "MUC<%s> %s has joined as %s/%s.", this.jid, from[1], affil.to_string(), role.to_string()); |
205 if (statuses.contains(110)) { |
207 if (statuses.contains(110)) { |
206 this.nick = from[1]; |
208 this.nick = from[1]; |
207 _change_state(State.CONNECTED, "got own presence. we are "+this.nick); |
209 _change_state(State.CONNECTED, "got own presence. we are "+this.nick); |
208 } |
210 } |
209 module.on_join(this, occupant); |
211 module.on_join(this, occupant); |
|
212 } else |
|
213 log("Muc", LogLevelFlags.LEVEL_WARNING, "Got NONE role for new participant. Maybe we are reconnecting."); |
210 } |
214 } |
211 |
215 |
212 stdout.printf("User list: "); |
216 stdout.printf("User list: "); |
213 foreach (var a in occupants.keys) |
217 foreach (var a in occupants.keys) |
214 stdout.printf("%s <%s,%s>, ", a, occupants[a].affil.to_string(), occupants[a].role.to_string()); |
218 stdout.printf("%s <%s,%s>, ", a, occupants[a].affil.to_string(), occupants[a].role.to_string()); |