5805fafaf3f0e4e5cdd4b96bbd31c2e1013bd1eb
[riece] / lisp / riece-channel.el
1 ;;; riece-channel.el --- a channel object
2 ;; Copyright (C) 1998-2003 Daiki Ueno
3
4 ;; Author: Daiki Ueno <ueno@unixuser.org>
5 ;; Created: 1998-09-28
6 ;; Keywords: IRC, riece
7
8 ;; This file is part of Riece.
9
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Code:
26
27 (require 'riece-options)
28 (require 'riece-globals)
29 (require 'riece-identity)
30
31 ;;; Channel object:
32 (defun riece-find-channel (name)
33   "Get a channel object named NAME from the server buffer."
34   (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
35                              riece-obarray)))
36     (if symbol
37         (symbol-value symbol))))
38
39 (defun riece-forget-channel (name)
40   (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
41                              riece-obarray)))
42     (when symbol
43       (makunbound symbol)
44       (unintern (symbol-name symbol) riece-obarray))))
45
46 (defun riece-make-channel (users operators speakers
47                                  topic modes banned invited uninvited
48                                  key)
49   "Make an instance of channel object.
50 Arguments are appropriate to channel users, operators, speakers
51 \(+v), topic, modes, banned users, invited users, uninvited users, and
52 the channel key, respectively."
53   (vector users operators speakers topic modes banned invited uninvited))
54
55 (defun riece-get-channel (name)
56   (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
57                              riece-obarray)))
58     (if symbol
59         (symbol-value symbol)
60       (set (intern (riece-identity-canonicalize-prefix name)
61                    riece-obarray)
62            (riece-make-channel nil nil nil nil nil nil nil nil nil)))))
63
64 (defun riece-channel-users (channel)
65   "Return the users of CHANNEL."
66   (aref channel 0))
67
68 (defun riece-channel-operators (channel)
69   "Return the operators of CHANNEL."
70   (aref channel 1))
71
72 (defun riece-channel-speakers (channel)
73   "Return the speakers of CHANNEL."
74   (aref channel 2))
75
76 (defun riece-channel-topic (channel)
77   "Return the topic of CHANNEL."
78   (aref channel 3))
79
80 (defun riece-channel-modes (channel)
81   "Return the modes of CHANNEL."
82   (aref channel 4))
83
84 (defun riece-channel-banned (channel)
85   "Return the banned users of CHANNEL."
86   (aref channel 5))
87
88 (defun riece-channel-invited (channel)
89   "Return the invited users of CHANNEL."
90   (aref channel 6))
91
92 (defun riece-channel-uninvited (channel)
93   "Return the uninvited users of CHANNEL."
94   (aref channel 7))
95
96 (defun riece-channel-key (channel)
97   "Return the key of CHANNEL."
98   (aref channel 8))
99
100 (defun riece-channel-set-users (channel value)
101   "Set the users of CHANNEL to VALUE."
102   (aset channel 0 value))
103
104 (defun riece-channel-set-operators (channel value)
105   "Set the operators of CHANNEL to VALUE."
106   (aset channel 1 value))
107
108 (defun riece-channel-set-speakers (channel value)
109   "Set the speakers of CHANNEL to VALUE."
110   (aset channel 2 value))
111
112 (defun riece-channel-set-topic (channel value)
113   "Set the topic of CHANNEL to VALUE."
114   (aset channel 3 value))
115
116 (defun riece-channel-set-modes (channel value)
117   "Set the modes of CHANNEL to VALUE."
118   (aset channel 4 value))
119
120 (defun riece-channel-set-banned (channel value)
121   "Set the banned users of CHANNEL to VALUE."
122   (aset channel 5 value))
123
124 (defun riece-channel-set-invited (channel value)
125   "Set the invited users of CHANNEL to VALUE."
126   (aset channel 6 value))
127
128 (defun riece-channel-set-uninvited (channel value)
129   "Set the uninvited users of CHANNEL to VALUE."
130   (aset channel 7 value))
131
132 (defun riece-channel-set-key (channel value)
133   "Set the key of CHANNEL to VALUE."
134   (aset channel 8 value))
135
136 (defun riece-channel-get-users (name)
137   "Return channel's users as list."
138   (riece-channel-users (riece-get-channel name)))
139
140 (defun riece-channel-get-operators (name)
141   "Return channel's operators as list."
142   (riece-channel-operators (riece-get-channel name)))
143
144 (defun riece-channel-get-speakers (name)
145   "Return channel's speakers as list."
146   (riece-channel-speakers (riece-get-channel name)))
147
148 (defun riece-channel-get-topic (name)
149   "Return channel's topic."
150   (riece-channel-topic (riece-get-channel name)))
151
152 (defun riece-channel-get-modes (name)
153   "Return channel's modes as list."
154   (riece-channel-modes (riece-get-channel name)))
155
156 (defun riece-channel-get-banned (name)
157   "Return channel's banned users as list."
158   (riece-channel-banned (riece-get-channel name)))
159
160 (defun riece-channel-get-invited (name)
161   "Return channel's invited users as list."
162   (riece-channel-invited (riece-get-channel name)))
163
164 (defun riece-channel-get-uninvited (name)
165   "Return channel's uninvited users as list."
166   (riece-channel-uninvited (riece-get-channel name)))
167
168 (defun riece-channel-get-key (name)
169   "Return channel's key."
170   (riece-channel-key (riece-get-channel name)))
171
172 ;;; Functions called from `riece-handle-mode-message':
173 (defun riece-channel-toggle-mode (name mode flag)
174   "Add or remove channel MODE of channel."
175   (let* ((channel (riece-get-channel name))
176          (modes (riece-channel-modes channel)))
177     (if flag
178         (unless (memq mode modes)
179           (riece-channel-set-modes channel (cons mode modes)))
180       (if (memq mode modes)
181           (riece-channel-set-modes channel (delq mode modes))))))
182
183 (defun riece-channel-toggle-banned (name pattern flag)
184   "Add or remove banned PATTERN of channel."
185   (let* ((channel (riece-get-channel name))
186          (banned (riece-channel-banned channel)))
187     (if flag
188         (unless (member pattern banned)
189           (riece-channel-set-banned channel (cons pattern banned)))
190       (if (setq pattern (car (member pattern banned)))
191           (riece-channel-set-banned channel (delq pattern banned))))))
192
193 (defun riece-channel-toggle-invited (name pattern flag)
194   "Add or remove invited PATTERN of channel."
195   (let* ((channel (riece-get-channel name))
196          (invited (riece-channel-invited channel)))
197     (if flag
198         (unless (member pattern invited)
199           (riece-channel-set-invited channel (cons pattern invited)))
200       (if (setq pattern (car (member pattern invited)))
201           (riece-channel-set-invited channel (delq pattern invited))))))
202
203 (defun riece-channel-toggle-uninvited (name pattern flag)
204   "Add or remove uninvited PATTERN to channel."
205   (let* ((channel (riece-get-channel name))
206          (uninvited (riece-channel-uninvited channel)))
207     (if flag
208         (unless (member pattern uninvited)
209           (riece-channel-set-uninvited channel (cons pattern uninvited)))
210       (if (setq pattern (car (member pattern uninvited)))
211           (riece-channel-set-uninvited
212            channel (delq pattern uninvited))))))
213
214 (defun riece-channel-toggle-user (name user flag)
215   "Add or remove an user to channel."
216   (let* ((channel (riece-get-channel name))
217          (users (riece-channel-users channel)))
218     (if flag
219         (unless (member user users)
220           (riece-channel-set-users channel (cons user users)))
221       (if (setq user (car (member user users)))
222           (riece-channel-set-users channel (delq user users))))))
223
224 (defun riece-channel-toggle-operator (name user flag)
225   "Add or remove an operator to channel."
226   (let* ((channel (riece-get-channel name))
227          (operators (riece-channel-operators channel)))
228     (if flag
229         (unless (member user operators)
230           (riece-channel-set-operators channel (cons user operators)))
231       (if (setq user (car (member user operators)))
232           (riece-channel-set-operators channel (delq user operators))))))
233
234 (defun riece-channel-toggle-speaker (name user flag)
235   "Add or remove an speaker to channel."
236   (let* ((channel (riece-get-channel name))
237          (speakers (riece-channel-speakers channel)))
238     (if flag
239         (unless (member user speakers)
240           (riece-channel-set-speakers channel (cons user speakers)))
241       (if (setq user (car (member user speakers)))
242           (riece-channel-set-speakers channel (delq user speakers))))))
243
244 (provide 'riece-channel)
245
246 ;;; riece-channel.el ends here