Beispiel #1
0
def process_message(message, connection):
    #logging.debug('Message %s from %s', message.name, message.get('from'))
    if 'plugins' == message.name:
        print_line('Available plugins:')
        for key in message.keys():
            print_line('%10s: %s' % (key, message.get(key, 'No description')))

    if 'networks' == message.name:
        print_line('Active networks:')
        for net in message.get('networks', []):
            arr = []
            arr.append(net.get('type'))
            for key in net.keys():
                if key not in ['type', 'name']:
                    arr.append('%s: %s' % (key, net.get(key)))
            print_line('%10s: %s' % (net.get('name'), u', '.join(arr)))

    if 'profile' == message.name:
        print_line('Profile:')
        for p in message.get('commands', []):
            print_command(p)
    if 'rules' == message.name:
        print_line('Filtering rules:')
        for rule in message.get('rules', []):
            print_rule(rule)

    if 'unread_networks' == message.name:
        print_line('Unread networks:')
        for net in message.get('networks', []):
            print_line('%10s: %s' % (net.get('name'), net.get('count')))

    if 'options' == message.name:
        print_line('Plugin options:')
        for key in message.keys():
            print_line('%10s: %s' % (key, message.get(key, '')))

    def print_user(entry):
        status = ''
        if entry.get('status'):
            status = '[%s]' % entry.get('status')
        net = ''
        if entry.get('net'):
            net = '[%s]' % entry.get('net')
        status_str = ''
        if entry.get('status-string'):
            status_str = '/%s' % entry.get('status-string')
        count = ''
        if entry.get('count'):
            count = '[%s]' % entry.get('count')
        print_line('%15s: %s%s%s%s%s' % (entry.get('userid', ''), count, net, status, entry.get('user', entry.get('userid', 'None')), status_str))

    _from  = ''
    if message.get('net'):
        _from = '[%s]' % (message.get('net'))

    def user_compare(u1, u2):
        s1 = u1.get('status', None)
        s2 = u2.get('status', None)
        n1 = u1.get('user', u1.get('group', ''))
        n2 = u2.get('user', u2.get('group', ''))
        #logging.debug('Compare %s and %s %s %s', n1, n2, s1, s2)
        if s1 == s2:
            if n1>n2:
                return 1
            elif n1<n2:
                return -1
            else:
                return 0
        if not s1:
            return -1
        if not s2:
            return 1
        if s1 == 'online':
            return -1
        if s2 == 'online':
            return 1
        if s1 == 'offline':
            return 1
        if s2 == 'offline':
            return -1
        if s1>s2:
            return 1
        elif s1<s2:
            return -1
        else:
            return 0
    def sort_messages(m1, m2):
        d1 = m1.get('message-date', '')
        d2 = m2.get('message-date', '')
        if d1>d2:
            return -1
        elif d1<d2:
            return 1
        else:
            return 0
    def sort_by_count(i1, i2):
        c1 = int(i1.get('count', 0))
        c2 = int(i2.get('count', 0))
        if c1>c2:
            return -1
        elif c1<c2:
            return 1
        return 0

    if 'users' == message.name:
        print_line('%sUsers:' % (_from))
        for user in sorted(message.get('users', []), user_compare):
            print_user(user)

    if 'unread_users' == message.name:
        print_line('%sUnread users:' % (_from))
        for user in sorted(message.get('users', []), sort_by_count):
            print_user(user)

    if 'groups' == message.name:
        print_line(u'%sGroups:' % (_from))
        for group in message.get('groups', []):
            print_line('%10s: %s' % (group.get('groupid', 'None'), group.get('group', '')))

    if 'unread_groups' == message.name:
        print_line(u'%sUnread groups:' % _from)
        for group in sorted(message.get('groups', []), sort_by_count):
            print_line('%10s: [%s]%s' % (group.get('groupid', 'None'), group.get('count', 0), group.get('group', '')))

    if 'unread_messages' == message.name:
        print_line(u'%sUnread messages:' % _from)
        for mess in sorted(message.get('messages', []), sort_messages):
            print_message(mess, message.get('net', ''))

    if 'mark_read' == message.name:
        print_line(u'%sMarked messages as read: %i' % (_from, len(message.get('messages', []))))

    if 'group' == message.name:
        print_line('%sGroup details:' % (_from))
        for ent in sorted(message.get('entries', []), user_compare):
            if ent.get('user'):
                print_user(ent)
            else:
                print_line('%s: [%s]' % (ent.get('net', ''), ent.get('group', '')))

    if 'user' == message.name:
        print_line('%sUser details:' % (_from))
        for ent in sorted(message.get('entries', []), user_compare):
            print_line('%s: %s' % (ent.get('net', ''), ent.get('user', '')))

    if 'error' == message.name:
        print_line('%sError: %s' % (_from, message.get('text', 'No error description')), 'red')

    if 'progress' == message.name:
        print_line('%sProgress: %s' % (_from, message.get('text', 'No message')), 'yellow')

    if 'ok' == message.name:
        print_line('%sComplete: %s' % (_from, message.get('text', '')))

    if 'message' == message.name:
        Globals.last_message_id = message.get('messageid')
        print_message(message, message.get('net', ''))
Beispiel #2
0
def process_message(message, connection):
    #logging.debug('Message %s', message.name)

    if message.name in ['shutdown']:
        try:
            reactor.stop()
            if common.daemon:
                common.daemon.delpid()
        except:
            pass
        return

    if message.name in ['plugins']:
        manage_plugins(message, connection)
        return

    if message.name in ['net']:
        manage_networks(message, connection)
        return

    if message.name in ['reply']:
        manage_reply(message, connection)
        return

    if message.name in ['unread_networks']:
        manage_unread_networks(message, connection)
        return

    if message.name in ['profile']:
        manage_profile(message, connection)
        return

    if message.name in ['rule']:
        manage_rules(message, connection)
        return

    if message.get('via'):
        message_to_plugin(message, connection)
        return

    if message.name in ['status']:
        manage_status(message, connection)
        return

    if message.name in ['users']:
        manage_users(message, connection)
        return

    if message.name in ['groups']:
        manage_groups(message, connection)
        return

    if message.name in ['user']:
        manage_user(message, connection)
        return

    if message.name in ['group']:
        manage_group(message, connection)
        return

    if message.name in ['unread_users']:
        manage_unread_users(message, connection)
        return

    if message.name in ['unread_groups']:
        manage_unread_groups(message, connection)
        return

    if message.name in ['mark_read']:
        manage_mark_read(message, connection)
        return

    if message.name in ['unread_messages']:
        manage_unread_messages(message, connection)
        return

    report_error(message, connection, 'Invalid command')