#!/usr/bin/python # # telepathy-butterfly - an MSN connection manager for Telepathy # # Copyright (C) 2006-2007 Ali Sabil # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import gobject import dbus.glib import signal import os import sys import logging if sys.version_info < (2, 5): print >> sys.stderr, 'Critical: python >= 2.5 required. Exiting.' sys.exit(1) import telepathy if telepathy.version < (0, 15, 17): print >> sys.stderr, 'Critical: telepathy-python >= 0.15.17 required. Exiting.' sys.exit(1) import papyon if papyon.version < (0, 4, 2): print >> sys.stderr, 'Critical: papyon >= 0.4.2 required. Exiting.' sys.exit(1) from telepathy.utils import debug_divert_messages debug_divert_messages(os.getenv('BUTTERFLY_LOGFILE')) logging.basicConfig(level=logging.DEBUG) from butterfly import ButterflyConnectionManager from butterfly import ButterflyDebug from butterfly.util.decorator import async logger = logging.getLogger('Butterfly') IDLE_TIMEOUT = 5000 PROCESS_NAME = 'telepathy-butterfly' if __name__ == '__main__': try: # change process name for killall import ctypes libc = ctypes.CDLL('libc.so.6') libc.prctl(15, PROCESS_NAME, 0, 0, 0) except Exception, e: logger.warning('Unable to set processName: %s" % e') @async def quit(): manager.quit() mainloop.quit() if 'BUTTERFLY_PERSIST' not in os.environ: def timeout_cb(): if len(manager._connections) == 0: logger.info('No connection received - quitting') quit() return False gobject.timeout_add(IDLE_TIMEOUT, timeout_cb) shutdown_callback = quit else: shutdown_callback = None signal.signal(signal.SIGTERM, lambda : quit) try: manager = ButterflyConnectionManager(shutdown_func=shutdown_callback) handler = ButterflyDebug(manager) except dbus.exceptions.NameExistsException: logger.warning('Failed to acquire bus name, connection manager already running?') sys.exit(1) mainloop = gobject.MainLoop(is_running=True) while mainloop.is_running(): try: mainloop.run() except KeyboardInterrupt: quit()