~julien-spautz/cable/new-folder-layout

« back to all changes in this revision

Viewing changes to src/Controller/Channel.vala

  • Committer: Julien Spautz
  • Date: 2013-09-23 16:09:58 UTC
  • mfrom: (137.2.9 pm)
  • Revision ID: spautz.julien@gmail.com-20130923160958-xp2xk4525213cz5c
Implemented basic private messaging capabilities:

- Open private chat by double-cklicking a user name
- Close a private chat in the same way you close a channel
- Automatically open new private chat when a /msg has been received
- Do not allow to start a private chat with yourself

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
    Boston, MA 02110-1301 USA.
18
18
***/
19
19
 
20
 
internal class Cable.Controller.Channel : GLib.Object {
21
 
 
22
 
    internal weak Server server;
23
 
    internal View.Channel view;
24
 
    internal Irc.Channel backend;
25
 
 
26
 
    internal string name; //TODO id
27
 
 
28
 
    internal Channel (Server server, string name) {
29
 
        debug (@"+ CONTROLLER CHANNEL $name");
30
 
 
 
20
public class Cable.Controller.Channel : GLib.Object {
 
21
 
 
22
    public weak Server server;
 
23
    public View.Channel view;
 
24
    public Irc.Channel backend;
 
25
 
 
26
    public string name; //TODO id
 
27
 
 
28
    public Channel (Server server, string name) {
31
29
        this.server = server;
32
30
        this.name = name;
33
31
 
34
 
        if (server.view.has_channel (name) == false)
 
32
        if (server.view.has_chat (name) == false)
35
33
            server.view.add_channel (name, name);
36
34
 
37
 
        view = server.view.get_channel_by_id (name);
 
35
        view = server.view.get_chat (name) as View.Channel;
38
36
        view.nick = server.nick;
39
37
        backend = new Irc.Channel (name, server.backend);
40
38
 
44
42
        load_state ();
45
43
    }
46
44
 
47
 
    ~Channel () { debug (@"- CONTROLLER CHANNEL $name"); }
48
 
 
49
45
    void load_state () {
50
46
        /*if (backend.joined) {
51
47
            view.room.state = Widgets.Room.State.CHAT;
102
98
            return false;
103
99
        });
104
100
 
 
101
        view.private_chat_requested.connect ((name) => {
 
102
            server.open_new_chat_with (name);
 
103
            if (server.private_chats.has_key (name))
 
104
                server.window.view.current_chat = server.private_chats [name].view;
 
105
        });
105
106
    }
106
107
 
107
108
    // IRC signals
108
109
    void connect_backend_signals () {
109
110
        backend.event_message.connect ((from, message) => {
110
 
            if (server.window.view.current_channel != view)
 
111
            if (server.window.view.current_chat != view)
111
112
                view.unread_messages++;
112
113
        });
113
114
 
207
208
                }
208
209
                var channel = new Channel (server, channel_with_hash);
209
210
                server.channels[channel_with_hash] = channel;
210
 
                server.window.view.current_channel = channel.view;
 
211
                server.window.view.current_chat = channel.view;
211
212
                break;
212
213
 
213
214
            case "part":