Пример #1
0
    def on_connect(self, result, error):
        if error:
            self.disconnect(error=error[1])
            # we should immediately retry if we failed to open the socket and
            # there are hosts left
            if self.status == DISCONNECTED and not self.failedlasthost:
                windows.get_default(
                    self,
                    self.core.manager).write("* Retrying with next available host")
                self.connect()
        else:
            self.source = source = ui.Source()
            self.status = INITIALIZING
            self.failedhosts[:] = ()

            self.events.trigger('SocketConnect', network=self)

            if source.enabled:
                self.source = ui.fork(self.on_read, self.socket.recv, 8192)

        # Auto join channels on connect
        for channel in self.core.channels:
            self.core.run_command("/join %s" % channel)
        for channelother in self.core.channels:
            self.core.run_command("/join %s" % channelother)
Пример #2
0
def server(server=None, port=6667, network=None, connect=True):
    network_info = {}

    if server:
        network_info["name"] = server
        network_info["server"] = server
        if port:
            network_info["port"] = port
        get_network_info(server, network_info)

    if not network:
        network = irc.Network(**network_info)
        windows.new(windows.StatusWindow, network, "status").activate()
    else:
        if "server" in network_info:
            network.name = network_info['name']
            network.server = network_info['server']
            if not network.status:
                window = windows.get_default(network, core.manager)
                if window:
                    window.update()
        if "port" in network_info:
            network.port = network_info["port"]

    if network.status:
        network.quit()
    if connect:
        network.connect()
        #core.window.write("* Connecting to %s on port %s" % (network.server, network.port))
        windows.get_default(network, core.manager).write(
            "* Connecting to %s on port %s" % (network.server, network.port)
        )

    return network
Пример #3
0
 def do_announce_reconnect():
     if not e.network.status:
         windows.get_default(
             e.network).write(
             "* Will reconnect in %s seconds.." %
             delay)
         e.network._reconnect_source = ui.register_timer(
             delay *
             1000,
             do_reconnect)
Пример #4
0
    def notice(self, target, msg):
        self.raw("NOTICE %s :%s" % (target, msg))

        if len(msg) > 1 and msg[0:1] == "\x01":
            self.events.trigger(
                'OwnCtcpReply', source=self.me, target=str(target),
                text=msg[1:-1],
                network=self, window=windows.get_default(self, self.manager)
            )
        else:
            self.events.trigger(
                'OwnNotice', source=self.me, target=str(target), text=msg,
                network=self, window=windows.get_default(self)
            )
Пример #5
0
 def notice(self, target, msg):
     self.raw("NOTICE %s :%s" % (target, msg))
     
     events.trigger(
         'OwnNotice', source=self.me, target=str(target), text=msg,
         network=self, window=windows.get_default(self)
         )
Пример #6
0
    def got_msg(self, msg):
        pmsg = parse_irc(msg, self.server)

        e_data = self.events.data(raw=msg,
                                  msg=pmsg,
                                  text=pmsg[-1],
                                  network=self,
                                  window=windows.get_default(
                                      self, self.core.manager))

        if "!" in pmsg[0]:
            e_data.source, e_data.address = pmsg[0].split('!', 1)

        else:
            e_data.source, e_data.address = pmsg[0], ''

        if len(pmsg) > 2:
            e_data.target = pmsg[2]
        else:
            e_data.target = pmsg[-1]

        if len(pmsg) >= 4:
            channel = pmsg[2]
            msg = pmsg[3]
            if self.me in msg and not self.activity.has_toplevel_focus():
                self.activity.notify_user(e_data.source + _(" on ") + channel,
                                          msg)
                if _HAS_SOUND:
                    SOUNDS_PATH = os.path.join(get_bundle_path(), 'sounds')
                    SOUND = os.path.join(SOUNDS_PATH, 'alert.wav')
                    PLAYER.set_state(Gst.State.NULL)
                    PLAYER.set_property('uri', 'file://%s' % SOUND)
                    PLAYER.set_state(Gst.State.PLAYING)

        self.events.trigger('Raw', e_data)
Пример #7
0
    def disconnect(self, error=None):
        if self.socket:
            self.socket.close()

        if self.source:
            self.source.unregister()
            self.source = None

        self.socket = None

        self.status = DISCONNECTED

        #note: connecting from onDisconnect is probably a Bad Thing
        self.events.trigger('Disconnect', network=self, error=error)

        #trigger a nick change if the nick we want is different from the one we
        # had.
        if self.me != self.nicks[0]:
            self.events.trigger('Nick',
                                network=self,
                                window=windows.get_default(self),
                                source=self.me,
                                target=self.nicks[0],
                                address='',
                                text=self.nicks[0])
            self.me = self.nicks[0]
Пример #8
0
 def msg(self, target, msg):
     self.raw("PRIVMSG %s :%s" % (target, msg))
     
     events.trigger(
         'OwnText', source=self.me, target=str(target), text=msg,
         network=self, window=windows.get_default(self)
         )
Пример #9
0
def onCtcpReply(e):
    color = getsourcecolor(e)
    to_write = "%s%s--- %s reply from %s:\x0F %s" % (prefix(e), color, e.name.capitalize(), format_source(e), ' '.join(e.args))
    
    window = windows.manager.get_active()
    if window.network != e.network:
        window = windows.get_default(e.network)
    window.write(to_write, widgets.TEXT)
Пример #10
0
    def notice(self, target, msg):
        self.raw("NOTICE %s :%s" % (target, msg))

        if len(msg) > 1 and msg[0:1] == "\x01":
            self.events.trigger('OwnCtcpReply',
                                source=self.me,
                                target=str(target),
                                text=msg[1:-1],
                                network=self,
                                window=windows.get_default(self, self.manager))
        else:
            self.events.trigger('OwnNotice',
                                source=self.me,
                                target=str(target),
                                text=msg,
                                network=self,
                                window=windows.get_default(self))
Пример #11
0
def onOwnNotice(e):
    window = windows.manager.get_active()
    if window.network != e.network:
        window = windows.get_default(e.network)
        
    f = log_file(e.network, window.id)

    f.write('-%s- %s' % (e.source, e.text))
Пример #12
0
def onCtcpReply(e):
    window = windows.manager.get_active()
    if window.network != e.network:
        window = windows.get_default(e.network)
        
    f = log_file(e.network, window.id)

    f.write('--- %s reply from %s: %s' % (e.name.capitalize(), e.source, ' '.join(e.args)))
Пример #13
0
    def msg(self, target, msg):
        self.raw("PRIVMSG %s :%s" % (target, msg))

        self.events.trigger('OwnText',
                            source=self.me,
                            target=str(target),
                            text=msg,
                            network=self,
                            window=windows.get_default(self, self.manager))
Пример #14
0
    def notice(self, target, msg):
        self.raw("NOTICE %s :%s" % (target, msg))

        self.events.trigger('OwnNotice',
                            source=self.me,
                            target=str(target),
                            text=msg,
                            network=self,
                            window=windows.get_default(self))
Пример #15
0
def onOwnCtcpReply(e):
    color = getsourcecolor(e)
    to_write = "%s-> %s--- %s reply from %s:\x0F %s" % (
        prefix(e), color, e.name.capitalize(), format_source(e), ' '.join(e.args))

    window = windows.manager.get_active()
    if window.network != e.network:
        window = windows.get_default(e.network)
    window.write(to_write, widgets.TEXT)
Пример #16
0
    def msg(self, target, msg):
        self.raw("PRIVMSG %s :%s" % (target, msg))

        if len(msg) > 8 and msg[0:7] == "\x01ACTION":
            self.events.trigger(
                'OwnAction', source=self.me, target=str(target),
                text=msg[8:-1],
                network=self, window=windows.get_default(self, self.manager)
            )
        elif len(msg) > 1 and msg[0:1] == "\x01":
            self.events.trigger(
                'OwnCtcp', source=self.me, target=str(target),
                text=msg[1:-1],
                network=self, window=windows.get_default(self, self.manager)
            )
        else:
            self.events.trigger(
                'OwnText', source=self.me, target=str(target), text=msg,
                network=self, window=windows.get_default(self, self.manager)
            )
Пример #17
0
def change_nick(network, nick):
    if not network.status:
        core.events.trigger(
            'Nick',
            network=network, window=windows.get_default(network, core.manager),
            source=network.me, target=nick, address='', text=nick
        )
        network.nicks[0] = nick
        network.me = nick
    else:
        network.raw('NICK :%s' % nick)
Пример #18
0
    def on_connect(self, result, error):
        if error:
            self.disconnect(error=error[1])
            #we should immediately retry if we failed to open the socket and there are hosts left
            if self.status == DISCONNECTED and not self.failedlasthost:
                windows.get_default(self, self.core.manager).write(
                    "* Retrying with next available host")
                self.connect()
        else:
            self.source = source = ui.Source()
            self.status = INITIALIZING
            self.failedhosts[:] = ()

            self.events.trigger('SocketConnect', network=self)

            if source.enabled:
                self.source = ui.fork(self.on_read, self.socket.recv, 8192)

        # Auto join channels on connect
        for channel in self.core.channels:
            self.core.run_command("/join %s" % channel)
Пример #19
0
def onCommandIrcurl(e):
    url = e.args[0]

    if url.startswith('irc://'):
        url = url[6:]

        if not url.startswith('/'):
            host, target = url.rsplit('/', 1)
            if ':' in host:
                host, port = host.rsplit(':', 1)
            else:
                port = 6667
        else:
            host = None
            port = 6667
            target = url

        if host:
            if e.network and e.network.server == host:
                network = e.network
            else:
                for w in list(windows.manager):
                    if w.network and w.network.server == host:
                        network = w.network
                        break
                else:
                    for w in list(windows.manager):
                        if w.network and w.network.server == 'irc.default.org':
                            network = server(host, port, w.network)
                            break
                    else:
                        network = server(host, port)

        if ',' in target:
            target, modifiers = target.split(',', 1)
            action = ''
        else:
            target = unquote(target)
            if target[0] not in '#&+':
                target = '#' + target
            action = 'join %s' % target

        if network.status == irc.CONNECTED:
            core.events.run(action, windows.get_default(network), network)
        else:
            if not hasattr(network, 'temp_perform'):
                network.temp_perform = [action]
            else:
                network.temp_perform.append(action)
Пример #20
0
    def msg(self, target, msg):
        self.raw("PRIVMSG %s :%s" % (target, msg))

        if len(msg) > 8 and msg[0:7] == "\x01ACTION":
            self.events.trigger('OwnAction',
                                source=self.me,
                                target=str(target),
                                text=msg[8:-1],
                                network=self,
                                window=windows.get_default(self, self.manager))
        elif len(msg) > 1 and msg[0:1] == "\x01":
            self.events.trigger('OwnCtcp',
                                source=self.me,
                                target=str(target),
                                text=msg[1:-1],
                                network=self,
                                window=windows.get_default(self, self.manager))
        else:
            self.events.trigger('OwnText',
                                source=self.me,
                                target=str(target),
                                text=msg,
                                network=self,
                                window=windows.get_default(self, self.manager))
Пример #21
0
    def got_msg(self, msg):
        pmsg = parse_irc(msg, self.server)

        e_data = self.events.data(
            raw=msg,
            msg=pmsg,
            text=pmsg[-1],
            network=self,
            window=windows.get_default(self, self.core.manager)
        )

        if "!" in pmsg[0]:
            e_data.source, e_data.address = pmsg[0].split('!', 1)

        else:
            e_data.source, e_data.address = pmsg[0], ''

        if len(pmsg) > 2:
            e_data.target = pmsg[2]
        else:
            e_data.target = pmsg[-1]

        if len(pmsg) >= 4:
            channel = pmsg[2]
            msg = pmsg[3]
            if self.me in msg and not self.activity.has_toplevel_focus():
                self.activity.notify_user(
                    e_data.source +
                    _(" on ") +
                    channel,
                    msg)
                if _HAS_SOUND:
                    SOUNDS_PATH = os.path.join(get_bundle_path(), 'sounds')
                    SOUND = os.path.join(SOUNDS_PATH, 'alert.wav')
                    PLAYER.set_state(Gst.State.NULL)
                    PLAYER.set_property('uri', 'file://%s' % SOUND)
                    PLAYER.set_state(Gst.State.PLAYING)

        self.events.trigger('Raw', e_data)
Пример #22
0
    def got_msg(self, msg):
        pmsg = parse_irc(msg, self.server)

        e_data = self.events.data(raw=msg,
                                  msg=pmsg,
                                  text=pmsg[-1],
                                  network=self,
                                  window=windows.get_default(
                                      self, self.core.manager))

        if "!" in pmsg[0]:
            e_data.source, e_data.address = pmsg[0].split('!', 1)

        else:
            e_data.source, e_data.address = pmsg[0], ''

        if len(pmsg) > 2:
            e_data.target = pmsg[2]
        else:
            e_data.target = pmsg[-1]

        self.events.trigger('Raw', e_data)
Пример #23
0
    def got_msg(self, msg):
        pmsg = parse_irc(msg, self.server)

        e_data = self.events.data(
            raw=msg,
            msg=pmsg,
            text=pmsg[-1],
            network=self,
            window=windows.get_default(self, self.core.manager)
        )

        if "!" in pmsg[0]:
            e_data.source, e_data.address = pmsg[0].split('!', 1)

        else:
            e_data.source, e_data.address = pmsg[0], ''

        if len(pmsg) > 2:
            e_data.target = pmsg[2]
        else:
            e_data.target = pmsg[-1]

        self.events.trigger('Raw', e_data)
Пример #24
0
    def disconnect(self, error=None):
        if self.socket:
            self.socket.close()

        if self.source:
            self.source.unregister()
            self.source = None

        self.socket = None

        self.status = DISCONNECTED

        # note: connecting from onDisconnect is probably a Bad Thing
        self.events.trigger('Disconnect', network=self, error=error)

        # trigger a nick change if the nick we want is different from the one we
        # had.
        if self.me != self.nicks[0]:
            self.events.trigger(
                'Nick', network=self, window=windows.get_default(self),
                source=self.me, target=self.nicks[0], address='',
                text=self.nicks[0]
            )
            self.me = self.nicks[0]
Пример #25
0
def emote(network, user, msg):
    network.raw("PRIVMSG %s :\x01ACTION %s\x01" % (user, msg))
    events.trigger(
        'OwnAction', network=network, window=windows.get_default(network),
        source=network.me, target=str(user), text=msg
        )
Пример #26
0
def onConnecting(e):
    window = windows.get_default(e.network)
    if window:
        window.update()
Пример #27
0
def onConnecting(e):
    return
    window = windows.get_default(e.network)
    if window:
        window.update()