Package flumotion :: Package admin :: Package gtk :: Module main
[hide private]

Source Code for Module flumotion.admin.gtk.main

  1  # -*- Mode: Python -*- 
  2  # vi:si:et:sw=4:sts=4:ts=4 
  3  # 
  4  # Flumotion - a streaming media server 
  5  # Copyright (C) 2004,2005,2006,2007 Fluendo, S.L. (www.fluendo.com). 
  6  # All rights reserved. 
  7   
  8  # This file may be distributed and/or modified under the terms of 
  9  # the GNU General Public License version 2 as published by 
 10  # the Free Software Foundation. 
 11  # This file is distributed without any warranty; without even the implied 
 12  # warranty of merchantability or fitness for a particular purpose. 
 13  # See "LICENSE.GPL" in the source distribution for more information. 
 14   
 15  # Licensees having purchased or holding a valid Flumotion Advanced 
 16  # Streaming Server license may use this file in accordance with the 
 17  # Flumotion Advanced Streaming Server Commercial License Agreement. 
 18  # See "LICENSE.Flumotion" in the source distribution for more information. 
 19   
 20  # Headers in this file shall remain intact. 
 21   
 22  import os 
 23  import sys 
 24   
 25  import gettext 
 26  import gtk.glade 
 27   
 28  from twisted.internet import reactor, defer 
 29  from flumotion.admin import connections 
 30  from flumotion.admin.admin import AdminModel 
 31  from flumotion.admin.gtk import dialogs 
 32  from flumotion.admin.gtk.client import Window 
 33  from flumotion.common import log, errors, connection 
 34  from flumotion.configure import configure 
 35  from flumotion.twisted import pb as fpb 
 36  from flumotion.common.options import OptionParser 
 37   
 38  # FIXME: a function with a capital is extremely poor style. 
39 -def Greeter():
40 # We do the import here so gettext has been set up and class strings 41 # from greeter are translated 42 from flumotion.admin.gtk import greeter 43 return greeter.Greeter()
44
45 -def startAdminFromGreeter(greeter):
46 # fuck python's lexicals! 47 _info = [] 48 49 def got_state(state): 50 greeter.set_sensitive(False) 51 authenticator = fpb.Authenticator(username=state['user'], 52 password=state['passwd']) 53 info = connection.PBConnectionInfo(state['host'], state['port'], 54 not state['use_insecure'], 55 authenticator) 56 _info.append(info) 57 model = AdminModel() 58 return model.connectToManager(info)
59 60 def refused(failure): 61 failure.trap(errors.ConnectionRefusedError) 62 dret = dialogs.connection_refused_message(greeter.state['host'], 63 greeter.window) 64 dret.addCallback(lambda _: startAdminFromGreeter(greeter)) 65 return dret 66 67 def failed(failure): 68 failure.trap(errors.ConnectionFailedError) 69 message = "".join(failure.value.args) 70 dret = dialogs.connection_failed_message(_info[0], message, 71 greeter.window) 72 dret.addCallback(lambda _: startAdminFromGreeter(greeter)) 73 return dret 74 75 def connected(model): 76 greeter.destroy() 77 return model 78 79 d = greeter.run_async() 80 d.addCallback(got_state) 81 d.addCallback(connected) 82 d.addErrback(refused) 83 d.addErrback(failed) 84 return d 85
86 -def startAdminFromManagerString(managerString, useSSL):
87 info = connections.parsePBConnectionInfo(managerString, useSSL) 88 model = AdminModel() 89 return model.connectToManager(info)
90
91 -def main(args):
92 parser = OptionParser(domain="flumotion-admin") 93 parser.add_option('-m', '--manager', 94 action="store", type="string", dest="manager", 95 help="the manager to connect to, e.g. localhost:7531") 96 parser.add_option('', '--no-ssl', 97 action="store_true", dest="no_ssl", 98 help="disable encryption when connecting to the manager") 99 100 options, args = parser.parse_args(args) 101 102 # set up gettext 103 localedir = os.path.join(configure.localedatadir, 'locale') 104 log.debug("locale", "Loading locales from %s" % localedir) 105 gettext.bindtextdomain('flumotion', localedir) 106 gettext.textdomain('flumotion') 107 gtk.glade.bindtextdomain('flumotion', localedir) 108 gtk.glade.textdomain('flumotion') 109 110 if len(args) > 1: 111 log.error('flumotion-admin', 112 'too many arguments: %r' % (args[1:],)) 113 114 if options.manager: 115 d = startAdminFromManagerString(options.manager, 116 not options.no_ssl) 117 else: 118 d = startAdminFromGreeter(Greeter()) 119 120 from flumotion.ui.icons import register_icons 121 register_icons() 122 123 win = Window() 124 125 def adminStarted(admin): 126 win.setAdminModel(admin) 127 win.show()
128 129 def failure(failure): 130 message = "".join(failure.value.args) 131 log.warning('admin', "Failed to connect: %s", 132 log.getFailureMessage(failure)) 133 sys.stderr.write("Connection to manager failed: %s\n" % message) 134 reactor.stop() 135 136 d.addCallbacks(adminStarted, failure) 137 138 reactor.run() 139