You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
#!/usr/bin/python |
|
# -*- coding: utf-8 -*- |
|
|
|
# Mitter, a Maemo client for Twitter. |
|
# Copyright (C) 2007, 2008 Julio Biason |
|
# |
|
# 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 3 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, see <http://www.gnu.org/licenses/>. |
|
|
|
import logging |
|
|
|
_log = logging.getLogger('ui.__init__') |
|
|
|
interfaces = [ |
|
'pygtk', |
|
'cmd', |
|
'mh', |
|
'tty'] |
|
|
|
|
|
def _import_name(interface): |
|
"""Return the name of the module for that interface.""" |
|
return 'mitterlib.ui.ui_%s' % (interface) |
|
|
|
|
|
def _interface_list(prefer=None): |
|
"""Return a list of UI modules.""" |
|
if prefer: |
|
if prefer in interfaces: |
|
yield _import_name(prefer) |
|
|
|
for interface in interfaces: |
|
module_name = _import_name(interface) |
|
_log.debug('Module %s' % (module_name)) |
|
yield module_name |
|
|
|
|
|
def interface(prefer): |
|
"""Try to find an interface that works in the current user system.""" |
|
_log.debug('Preferred interface: %s' % (prefer)) |
|
interface = None |
|
for module_name in _interface_list(prefer): |
|
# try to import each using __import__ |
|
try: |
|
_log.debug('Trying to import %s' % (module_name)) |
|
interface = __import__(module_name, fromlist=[module_name]) |
|
break |
|
except ImportError, exc: |
|
_log.debug('Failed') |
|
_log.debug(str(exc)) |
|
pass |
|
|
|
return interface |
|
|
|
|
|
def interface_options(options): |
|
"""Add options in the command line OptParser object for every |
|
interface (yes, every interface, even the ones the user doesn't care).""" |
|
|
|
available_interfaces = [] |
|
for module in _interface_list(): |
|
try: |
|
_log.debug('Importing %s for options' % (module)) |
|
interface = __import__(module, fromlist=[module]) |
|
|
|
interface.options(options) |
|
available_interfaces.append(module.split('_')[-1]) |
|
except ImportError: |
|
pass # so we don't care |
|
|
|
return
|
|
|