def main(args=sys.argv[1:]): import ipmsg from ipmsg.config import settings import ipmsg.consts as c from optparse import OptionParser usage = '%prog [options] message ip[:port]' parser = OptionParser(usage=usage) parser.add_option("-p", "--port", type="int", dest="port", default=c.IPMSG_DEFAULT_PORT, help="port", metavar="PORT") parser.add_option("-u", "--user", dest="user", default='', help="user name") parser.add_option("-g", "--group", dest="group", default='', help="group name") parser.add_option("-b", "--broadcast", action="store_true", dest="broadcast", default=False, help="broadcast", metavar="") parser.add_option("-s", "--seal", action="store_true", dest="seal", default=False, help="seal message", metavar="") (options, args) = parser.parse_args() settings['user_name'] = options.user settings['group_name'] = options.group # TODO: It seems that I didn't implemented the multicast part... if options.broadcast: pass if len(args) < 2: parser.print_help() sys.exit() try: nics = ipmsg.get_all_network_interface() if len(nics) == 0: print('No network avalible.') sys.exit() msg = args[0] addrs = [] for x in args[1:]: addr = x.split(':') if len(addr) == 1: addr.append(options.port) else: addr[1] = int(addr[1]) addrs.append(tuple(addr)) except NotImplemented: parser.print_help() sys.exit() else: ipmsg.init(port=options.port) ipmsg.engine.start_server() for addr in addrs: ipmsg.send(addrs=[addr], msg=msg, encrypt=False, seal=options.seal) print(ipmsg.whatsnew()) ipmsg.engine.stop_server() sys.exit()
def mainloop(self): try: messages, events = ipmsg.whatsnew() new_incoming = [m for m in messages if m.io == 1 and m not in self.incoming] paused = [m for m in messages if m.io == 0 and m.is_send_error()] read_notify = [m for m in messages if m.io == 0 and m.is_opened()] deleted_notify = [m for m in messages if m.io == 0 and m.is_ignored()] except ipmsg.NetworkError: ipmsg.put_offline() dlg = NetworkErrorDialog(None) dlg.show() dlg.run() return True if settings['enable_notify']: if settings['notify_online']: msg = ''.join([contact.get_desc() + ' signed online.\n' for contact in events if contact.status in (STAT_ON, STAT_AFK)]) if len(msg) > 0: notify.balloon('notify', msg, notify.EVENT) if settings['notify_offline']: msg = ''.join([contact.get_desc() + ' signed out.\n' for contact in events if contact.status == STAT_OFF]) if len(msg) > 0: notify.balloon('notify', msg, notify.EVENT) for msg in read_notify: notify.balloon('notify', '%s has opened your message.' % msg.contact.name , notify.EVENT) for msg in deleted_notify: notify.balloon('notify', '%s ignored your message.' % msg.contact.name , notify.EVENT) if settings['enable_notify'] and (not ipmsg.get_status().is_afk() or not settings['disable_notify_afk']): for msg in new_incoming: icon = msg.atts and notify.ATT or notify.MSG notify.balloon(msg.contact.get_desc(), msg.options['seal'] and '--Secret Message--' or msg.msg, icon) if settings['enable_popup'] and (not ipmsg.get_status().is_afk() or not settings['non_popup_when_afk']): for msg in new_incoming: recv_dlg = RecvDialog(msg) recv_dlg.show() ipmsg.read_notice(msg) new_incoming = [] prev_unread = [m for m in self.incoming if not m.is_read()] self.incoming = [m for m in messages if m.io == 1] self.update_icon() for msg in [m for m in paused if m not in self.prev_paused]: if settings['notify_error']: notify.balloon('Error', 'Message not delivered', notify.EVENT) dlg = ResendConfimDialog(None, msg.msg) def on_resend_rsps(w, id, msg): if id == gtk.RESPONSE_YES: ipmsg.resend(msg) w.destroy() dlg.connect('response', on_resend_rsps, msg) dlg.show() self.prev_paused = paused[:] for msg in new_incoming: label = ' %s ... (%s ago)' % (msg.contact.get_desc(), util.calc_time(msg.packet.age())) item = gtk.MenuItem(label, False) item.connect('activate', self.on_read_msg, msg) item.show() self.left_menu.insert(item, 1) self.left_menu.get_children()[0].set_sensitive(not ipmsg.get_status().is_off()) return True