Merge lp:~julien-spautz/cable/refactor-controllers into lp:cable
- refactor-controllers
- Merge into trunk
Proposed by
Julien Spautz
Status: | Merged |
---|---|
Merged at revision: | 153 |
Proposed branch: | lp:~julien-spautz/cable/refactor-controllers |
Merge into: | lp:cable |
Diff against target: |
421 lines (+118/-158) 4 files modified
src/Controllers/Channel.vala (+40/-51) src/Controllers/PrivateChat.vala (+0/-6) src/Controllers/Window.vala (+65/-88) src/Ports/Irc.vala (+13/-13) |
To merge this branch: | bzr merge lp:~julien-spautz/cable/refactor-controllers |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Julien Spautz | Pending | ||
Review via email: mp+189504@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/Controllers/Channel.vala' |
2 | --- src/Controllers/Channel.vala 2013-09-28 18:13:07 +0000 |
3 | +++ src/Controllers/Channel.vala 2013-10-06 15:45:28 +0000 |
4 | @@ -43,15 +43,6 @@ |
5 | } |
6 | |
7 | void load_state () { |
8 | - /*if (backend.joined) { |
9 | - view.room.state = Widgets.Room.State.CHAT; |
10 | - FIXME some bug in maki returns garbage here: |
11 | - -> view.room.list_users (backend.nicks, backend.prefixes); |
12 | - backend.event_topic (backend.topic, ""); |
13 | - } else { |
14 | - view.room.state = Widgets.Room.State.JOINING; |
15 | - }*/ |
16 | - // part and rejoin to workaround bug |
17 | view.state = State.JOINING; |
18 | |
19 | if (server.backend.connected == false) { |
20 | @@ -67,21 +58,10 @@ |
21 | } |
22 | } |
23 | |
24 | - // GUI signals |
25 | void connect_frontend_signals () { |
26 | - view.part.connect (() => { |
27 | - backend.send_part (); |
28 | - }); |
29 | - |
30 | - server.window.view.selected.connect ((item) => { |
31 | - if (item == view) |
32 | - view.unread_messages = 0; |
33 | - }); |
34 | - |
35 | - view.join.connect (() => { |
36 | - view.state = State.JOINING; |
37 | - backend.send_join (); |
38 | - }); |
39 | + view.part.connect (part_channel); |
40 | + view.join.connect (start_joining); |
41 | + view.private_chat_requested.connect (open_new_private_chat_and_select); |
42 | |
43 | view.send_message.connect ((message) => { |
44 | if (message.has_prefix ("/")) |
45 | @@ -98,14 +78,23 @@ |
46 | return false; |
47 | }); |
48 | |
49 | - view.private_chat_requested.connect ((name) => { |
50 | - server.open_new_chat_with (name); |
51 | - if (server.private_chats.has_key (name)) |
52 | - server.window.view.current_chat = server.private_chats [name].view; |
53 | - }); |
54 | - } |
55 | + } |
56 | + |
57 | + void part_channel () { |
58 | + backend.send_part (); |
59 | + } |
60 | + |
61 | + void start_joining () { |
62 | + view.state = State.JOINING; |
63 | + backend.send_join (); |
64 | + } |
65 | + |
66 | + void open_new_private_chat_and_select (string name) { |
67 | + server.open_new_chat_with (name); |
68 | + if (server.private_chats.has_key (name)) |
69 | + server.window.view.current_chat = server.private_chats [name].view; |
70 | + } |
71 | |
72 | - // IRC signals |
73 | void connect_backend_signals () { |
74 | backend.event_message.connect ((from, message) => { |
75 | if (server.window.view.current_chat != view) |
76 | @@ -128,12 +117,8 @@ |
77 | if (!view.has_user (name)) |
78 | return; |
79 | |
80 | - if (name.has_prefix ("@")) |
81 | - view.rename_user (name.replace ("@", ""), new_nick, UserType.OPERATOR); |
82 | - else if (name.has_prefix ("+")) |
83 | - view.rename_user (name.replace ("+", ""), new_nick, UserType.VOICED); |
84 | - else |
85 | - view.rename_user (name, new_nick, UserType.REGULAR); |
86 | + var type = remove_prefix_and_get_type (ref name); |
87 | + view.rename_user (name, new_nick, type); |
88 | }); |
89 | |
90 | backend.event_part.connect ((from, message) => { |
91 | @@ -141,13 +126,8 @@ |
92 | view.state = State.NOT_JOINED; |
93 | } else { |
94 | var name = from.split ("!")[0]; |
95 | - |
96 | - if (name.has_prefix ("@")) |
97 | - view.remove_user (name.replace ("@", ""), message); |
98 | - else if (name.has_prefix ("+")) |
99 | - view.remove_user (name.replace ("+", ""), message); |
100 | - else |
101 | - view.remove_user (name, message); |
102 | + remove_prefix_and_get_type (ref name); |
103 | + view.remove_user (name, message); |
104 | } |
105 | }); |
106 | |
107 | @@ -156,13 +136,8 @@ |
108 | view.state = State.CHAT; |
109 | } else { |
110 | var name = from.split ("!")[0]; |
111 | - |
112 | - if (name.has_prefix ("@")) |
113 | - view.add_user (name.replace ("@", ""), UserType.OPERATOR); |
114 | - else if (name.has_prefix ("+")) |
115 | - view.add_user (name.replace ("+", ""), UserType.VOICED); |
116 | - else |
117 | - view.add_user (name, UserType.REGULAR); |
118 | + var type = remove_prefix_and_get_type (ref name); |
119 | + view.add_user (name, type); |
120 | } |
121 | }); |
122 | |
123 | @@ -189,11 +164,25 @@ |
124 | |
125 | backend.event_action.connect ((from, message) => { |
126 | var nick = from.split ("!")[0]; |
127 | - view.message ("", "* " + nick + " " + message, MessageType.ACTION); |
128 | + view.message ("", @"*$nick $message*", MessageType.ACTION); |
129 | }); |
130 | |
131 | backend.event_names.connect (view.list_users); |
132 | } |
133 | + |
134 | + UserType remove_prefix_and_get_type (ref string nick) { |
135 | + if (name.has_prefix ("@")) { |
136 | + name.replace ("@", ""); |
137 | + return UserType.OPERATOR; |
138 | + } |
139 | + |
140 | + if (name.has_prefix ("+")) { |
141 | + name.replace ("+", ""); |
142 | + return UserType.VOICED; |
143 | + } |
144 | + |
145 | + return UserType.REGULAR; |
146 | + } |
147 | |
148 | void send_command (string command) { |
149 | |
150 | |
151 | === modified file 'src/Controllers/PrivateChat.vala' |
152 | --- src/Controllers/PrivateChat.vala 2013-09-28 18:13:07 +0000 |
153 | +++ src/Controllers/PrivateChat.vala 2013-10-06 15:45:28 +0000 |
154 | @@ -40,7 +40,6 @@ |
155 | void connect_signals () { |
156 | server.backend.event_message.connect (display_message_and_notify); |
157 | view.send_message.connect (send_message_and_display); |
158 | - server.window.view.selected.connect (clear_unread_messages); |
159 | } |
160 | |
161 | void display_message_and_notify (string from, string target, string message) { |
162 | @@ -70,11 +69,6 @@ |
163 | view.entry = ""; |
164 | } |
165 | |
166 | - void clear_unread_messages (Port.View.Chat chat) { |
167 | - if (chat == view) |
168 | - view.unread_messages = 0; |
169 | - } |
170 | - |
171 | bool is_not_me (string nick) { |
172 | return nick != server.nick; |
173 | } |
174 | |
175 | === modified file 'src/Controllers/Window.vala' |
176 | --- src/Controllers/Window.vala 2013-09-28 18:13:07 +0000 |
177 | +++ src/Controllers/Window.vala 2013-10-06 15:45:28 +0000 |
178 | @@ -29,17 +29,13 @@ |
179 | |
180 | public Window (Port.View.Window window, Port.Irc.Session session) { |
181 | GLib.Object (view: window, backend: session); |
182 | - |
183 | - connect_frontend_signals (); |
184 | - connect_backend_signals (); |
185 | + connect_signals (); |
186 | initialize (); |
187 | } |
188 | |
189 | - // restore saved state |
190 | void initialize () { |
191 | var channels = Settings.preferences.channels; |
192 | |
193 | - // check for channels from last session |
194 | if (channels.length > 0) { |
195 | foreach (var channel in channels) { |
196 | var parts = channel.split (":"); |
197 | @@ -52,80 +48,45 @@ |
198 | view.welcome_shown = true; |
199 | } |
200 | |
201 | - // backend events that affect the window's state |
202 | - void connect_backend_signals () { |
203 | - /*Irc.client.event_nick.connect ((time, server, from, nick) => { |
204 | - var current_chat = view.current_chat; |
205 | - var current_server = view.current_server; |
206 | - |
207 | - if (server == current_server.id) |
208 | - view.title = string.join (" — ", current_chat.name, nick); |
209 | - });*/ |
210 | - } |
211 | - |
212 | - // frontend signals from the window |
213 | - void connect_frontend_signals () { |
214 | - view.selected.connect ((item) => { |
215 | - if (item is Port.View.Channel) { |
216 | - var channel = item as Port.View.Channel; |
217 | - view.title = string.join (" — ", channel.name); |
218 | - Settings.preferences.last_used_nick = channel.nick; |
219 | - } |
220 | - }); |
221 | - |
222 | - view.join.connect ((a,n,c) => { |
223 | - join_channel (a,n,c); |
224 | - }); |
225 | - |
226 | - view.remove_channel.connect (() => { |
227 | - var channel_id = view.current_chat.id; |
228 | - var server_id = view.current_server.id; |
229 | - |
230 | - if (view.current_chat == null) { |
231 | - warning ("No channel selected, cannot leave."); |
232 | - } else if (view.current_chat is Port.View.Channel) { |
233 | - part_channel (servers[server_id].channels[channel_id]); |
234 | - } else if (view.current_chat is Port.View.PrivateChat) { |
235 | - var channel = servers[server_id].private_chats[channel_id]; |
236 | - var server = channel.server; |
237 | - server.view.remove_chat (channel.view.id); |
238 | - server.private_chats.unset (channel.view.id); |
239 | - |
240 | - if (server.channels.size == 0) |
241 | - servers.unset (server.view.id); |
242 | - |
243 | - if (servers.size == 0) { |
244 | - view.title = App.TITLE; |
245 | - view.welcome_shown = true; |
246 | - } |
247 | - } |
248 | - }); |
249 | - |
250 | - view.add_channel.connect (() => { |
251 | - var dialog = new Dialogs.JoinChannel (); |
252 | - dialog.done.connect ((a,b,c) => join_channel (a.address,b.nick_name,c)); |
253 | - dialog.show_all (); |
254 | - }); |
255 | - |
256 | - view.show_preferences.connect (() => { |
257 | - var dialog = new Dialogs.Preferences (); |
258 | - dialog.show_all (); |
259 | - }); |
260 | - |
261 | - view.close.connect (() => { |
262 | - string[] chans = {}; |
263 | - |
264 | - foreach (var server in servers.values) { |
265 | - foreach (var channel in server.channels.values) { |
266 | - chans += string.join (":", server.address, server.nick, channel.name); |
267 | - channel.backend.send_part (); |
268 | - } |
269 | - } |
270 | - |
271 | - Settings.preferences.channels = chans; |
272 | - }); |
273 | - } |
274 | - |
275 | + void connect_signals () { |
276 | + view.selected.connect (set_window_title_on_chat_switched); |
277 | + view.join.connect (join_channel); |
278 | + view.remove_channel.connect (remove_chat); |
279 | + view.add_channel.connect (show_join_dialog); |
280 | + view.show_preferences.connect (show_preferences_dialog); |
281 | + view.close.connect (part_all_channels_and_update_settings); |
282 | + } |
283 | + |
284 | + void set_window_title_on_chat_switched (Port.View.Chat chat) { |
285 | + view.title = chat.name; |
286 | + Settings.preferences.last_used_nick = chat.nick; |
287 | + chat.unread_messages = 0; |
288 | + } |
289 | + |
290 | + void part_all_channels_and_update_settings () { |
291 | + string[] chans = {}; |
292 | + |
293 | + foreach (var server in servers.values) { |
294 | + foreach (var channel in server.channels.values) { |
295 | + chans += string.join (":", server.address, server.nick, channel.name); |
296 | + channel.backend.send_part (); |
297 | + } |
298 | + } |
299 | + |
300 | + Settings.preferences.channels = chans; |
301 | + } |
302 | + |
303 | + void show_preferences_dialog () { |
304 | + var dialog = new Dialogs.Preferences (); |
305 | + dialog.show_all (); |
306 | + } |
307 | + |
308 | + void show_join_dialog () { |
309 | + var dialog = new Dialogs.JoinChannel (); |
310 | + dialog.done.connect ((a,b,c) => join_channel (a.address,b.nick_name,c)); |
311 | + dialog.show_all (); |
312 | + } |
313 | + |
314 | void join_channel (string address, string nick, string channel_name) { |
315 | Server server = null; |
316 | foreach (var s in servers.values) |
317 | @@ -148,16 +109,32 @@ |
318 | view.current_chat = channel.view; |
319 | view.welcome_shown = false; |
320 | } |
321 | - |
322 | - void part_channel (Channel channel) { |
323 | - var server = channel.server; |
324 | - |
325 | - channel.backend.send_part (); |
326 | - server.view.remove_chat (channel.view.id); |
327 | - server.channels.unset (channel.view.id); |
328 | - |
329 | - if (server.channels.size == 0) |
330 | + |
331 | + void remove_chat () { |
332 | + var channel_id = view.current_chat.id; |
333 | + var server_id = view.current_server.id; |
334 | + |
335 | + Server server = null; |
336 | + |
337 | + if (view.current_chat == null) { |
338 | + warning ("No channel selected, cannot leave."); |
339 | + } else if (view.current_chat is Port.View.Channel) { |
340 | + var channel = servers[server_id].channels[channel_id]; |
341 | + server = channel.server; |
342 | + channel.backend.send_part (); |
343 | + server.view.remove_chat (channel.view.id); |
344 | + server.channels.unset (channel.view.id); |
345 | + } else if (view.current_chat is Port.View.PrivateChat) { |
346 | + var channel = servers[server_id].private_chats[channel_id]; |
347 | + server = channel.server; |
348 | + server.view.remove_chat (channel.view.id); |
349 | + server.private_chats.unset (channel.view.id); |
350 | + } |
351 | + |
352 | + if (server.channels.size == 0 && server.private_chats.size == 0) { |
353 | servers.unset (server.view.id); |
354 | + view.remove_server (server.view.id); |
355 | + } |
356 | |
357 | if (servers.size == 0) { |
358 | view.title = App.TITLE; |
359 | |
360 | === modified file 'src/Ports/Irc.vala' |
361 | --- src/Ports/Irc.vala 2013-09-28 18:13:07 +0000 |
362 | +++ src/Ports/Irc.vala 2013-10-06 15:45:28 +0000 |
363 | @@ -15,10 +15,10 @@ |
364 | public abstract string name { get; set; } |
365 | public abstract bool away { get; } |
366 | public abstract bool connected { get; } |
367 | - public abstract string[] channel_names { owned get; } |
368 | - public abstract string[] supported_prefixes { owned get; } |
369 | - public abstract string supported_channel_types { owned get; } |
370 | - public abstract string[] ignores { owned get; } |
371 | + //public abstract string[] channel_names { owned get; } |
372 | + //public abstract string[] supported_prefixes { owned get; } |
373 | + //public abstract string supported_channel_types { owned get; } |
374 | + //public abstract string[] ignores { owned get; } |
375 | |
376 | public signal void event_away (); |
377 | public signal void event_away_message (string nick, string message); |
378 | @@ -43,17 +43,17 @@ |
379 | public abstract void send_connect (); |
380 | public abstract void send_ignore (string pattern); |
381 | public abstract void send_message (string target, string message); |
382 | - public abstract void send_mode (string target, string mode); |
383 | + //public abstract void send_mode (string target, string mode); |
384 | public abstract void send_nick (string nick); |
385 | - public abstract void send_nickserv (); |
386 | + //public abstract void send_nickserv (); |
387 | public abstract void send_notice (string target, string message); |
388 | - public abstract void send_oper (string name, string password); |
389 | + //public abstract void send_oper (string name, string password); |
390 | public abstract void send_part (string channel, string? message = null); |
391 | public abstract void send_quit (string? message = null); |
392 | public abstract void send_raw (string command); |
393 | public abstract void send_unignore (string pattern); |
394 | - public abstract void send_who (string mask, bool operators_only); |
395 | - public abstract void send_whois (string mask); |
396 | + //public abstract void send_who (string mask, bool operators_only); |
397 | + //public abstract void send_whois (string mask); |
398 | |
399 | public abstract bool is_me (string nick); |
400 | } |
401 | @@ -80,16 +80,16 @@ |
402 | public signal void event_no_such (); |
403 | |
404 | public abstract void send_action (string message); |
405 | - public abstract void send_invite (string who); |
406 | + //public abstract void send_invite (string who); |
407 | public abstract void send_join (string key = ""); |
408 | public abstract void send_kick (string who, string message); |
409 | - public abstract void send_list (); |
410 | + //public abstract void send_list (); |
411 | public abstract void send_message (string message); |
412 | public abstract void send_names (); |
413 | public abstract void send_part (string? message = null); |
414 | public abstract void send_topic (string topic = ""); |
415 | |
416 | - public abstract string user_channel_mode (string nick); |
417 | - public abstract string user_channel_prefix (string nick); |
418 | + //public abstract string user_channel_mode (string nick); |
419 | + //public abstract string user_channel_prefix (string nick); |
420 | } |
421 | } |