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', ''))
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')