Merge lp:~julien-spautz/cable/refactor-controllers into lp:cable

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
Reviewer Review Type Date Requested Status
Julien Spautz Pending
Review via email: mp+189504@code.launchpad.net
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 }

Subscribers

People subscribed via source and target branches

to all changes: