~marco-gallotta/ibid/ascii-501638

« back to all changes in this revision

Viewing changes to ibid/source/silc.py

  • Committer: Marco Gallotta
  • Date: 2010-01-04 10:04:11 UTC
  • mfrom: (808.1.18 trunk)
  • Revision ID: marco@me-20100104100411-1wxdof04tgydys8o
Merge with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
        self.users = {}
21
21
 
22
22
        self.factory.join = self.join
23
 
        self.factory.part = self.part
 
23
        self.factory.leave = self.leave
24
24
        self.factory.send = self.send
25
25
 
26
26
    def _create_event(self, type, user, channel):
34
34
        else:
35
35
            event.channel = event.sender['connection']
36
36
        event.public = True
37
 
        event.source = self.factory.name
38
37
 
39
38
        self.users[event.sender['connection']] = user
40
39
        self.users[event.sender['id']] = user
70
69
            self.send(response)
71
70
 
72
71
    def send(self, response):
73
 
        message = response['reply'].expandtabs(1).replace('\n', ' ') \
74
 
                  .encode('utf-8')
 
72
        message = response['reply'].encode('utf-8')
75
73
        flags=0
76
74
        if response.get('action', False):
77
75
            flags=4
115
113
        self.command_call('JOIN %s' % channel)
116
114
        return True
117
115
 
118
 
    def part(self, channel):
 
116
    def leave(self, channel):
119
117
        if channel not in self.channels:
120
118
            return False
121
119
 
147
145
        del self.users[self._to_hex(user.user_id)]
148
146
        del self.users[self._to_hex(user.fingerprint)]
149
147
 
 
148
    def notify_nick_change(self, user, old_nick, new_nick):
 
149
        event = self._create_event(u'state', user, None)
 
150
        event.state = u'offline'
 
151
        event.sender['nick'] = unicode(old_nick, 'utf-8', 'replace')
 
152
        event.othername = unicode(new_nick, 'utf-8', 'replace')
 
153
        ibid.dispatcher.dispatch(event).addCallback(self.respond)
 
154
 
 
155
        event = self._create_event(u'state', user, None)
 
156
        event.state = u'online'
 
157
        event.sender['nick'] = unicode(new_nick, 'utf-8', 'replace')
 
158
        event.othername = unicode(old_nick, 'utf-8', 'replace')
 
159
        ibid.dispatcher.dispatch(event).addCallback(self.respond)
 
160
 
150
161
    def notify_kicked(self, user, message, kicker, channel):
151
162
        self._state_event(user, channel, u'kicked', kicker, message)
152
163
 
162
173
        for channel in self.factory.channels:
163
174
            self.join(channel)
164
175
 
 
176
        event = Event(self.factory.name, u'source')
 
177
        event.status = u'connected'
 
178
        ibid.dispatcher.dispatch(event)
 
179
 
165
180
    def command_reply_join(self, channel, name, topic, hmac, x, y, users):
166
181
        self.channels[name] = channel
 
182
        for user in users:
 
183
            self._state_event(user, channel, u'online')
167
184
 
168
185
    def disconnect(self):
169
186
        self.command_call('QUIT')
170
187
 
171
188
    def disconnected(self, message):
 
189
        self.factory.log.info(u"Disconnected (%s)", reason)
 
190
 
 
191
        event = Event(self.factory.name, u'source')
 
192
        event.status = u'disconnected'
 
193
        ibid.dispatcher.dispatch(event)
 
194
 
172
195
        self.factory.s.stopService()
173
196
        self.channels.clear()
174
197
        self.users.clear()