Changeset 123
- Timestamp:
- 03/24/06 19:32:05 (3 years ago)
- Files:
-
- trunk/Makefile.in (modified) (1 diff)
- trunk/src/audio_control.py (modified) (2 diffs)
- trunk/src/main.py (modified) (1 diff)
- trunk/src/mesk/__init__.py (modified) (2 diffs)
- trunk/src/mesk/plugin.py (modified) (5 diffs)
- trunk/src/plugins/audioscrobbler.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Makefile.in
r118 r123 54 54 install -m 644 ./src/*.png ${libdir} 55 55 install -m 644 ./src/*.svg ${libdir} 56 # Plugins 57 install -m 755 -d ${libdir}/plugins 58 install -m 644 ./src/*.py ${libdir}/plugins 59 install -m 644 ./src/*.glade ${libdir}/plugins 56 60 57 61 install -m 755 -d ${docdir} trunk/src/audio_control.py
r113 r123 26 26 import mesk 27 27 _ = mesk.common.i18n._ 28 from mesk.plugin_events import AudioControlListener 28 29 29 30 class AudioControl(gobject.GObject): … … 106 107 107 108 self.set_widget_sensitivites() 109 self._plugins = \ 110 mesk.plugin.get_manager().get_plugins(AudioControlListener) 111 # FIXME 112 #print self._plugins 108 113 109 114 def set_playlist(self, pl): trunk/src/main.py
r121 r123 41 41 plugin_mgr = mesk.plugin.PluginMgr(mesk.PLUGINS_DIR) 42 42 mesk.plugin.set_manager(plugin_mgr) 43 print mesk.plugin.get_manager().get_plugins()44 43 45 44 self.main_window = MainWindow() trunk/src/mesk/__init__.py
r122 r123 60 60 _('Logging level. May be CRITICAL, ERROR, WARNING, INFO, ' 61 61 'VERBOSE, or DEBUG')], 62 'plugins': [str, '', _('A list of plugins (separated by \';\') to activate ' 63 'on startup.')], 62 64 }, 63 65 … … 113 115 import mesk.audio_source 114 116 import mesk.plugin 117 import mesk.plugin_events trunk/src/mesk/plugin.py
r121 r123 49 49 50 50 SYS_PLUGINS_DIR = './plugins' 51 PLUGIN_TUPLE_LEN = 5 52 (NAME, 53 DESCRIPTION, 54 AUTHOR, 55 URL, 56 FACTORY) = range(PLUGIN_TUPLE_LEN) 51 57 52 58 def __init__(self, plugins_dir): … … 55 61 sys.path.append(self.SYS_PLUGINS_DIR) 56 62 57 def plugins(root):63 def load_plugins(root): 58 64 plgins = [] 59 65 for file in os.listdir(root): … … 64 70 return plgins 65 71 66 self.__plugins = {} 67 sys_plugins = plugins(self.SYS_PLUGINS_DIR) 68 user_plugins = plugins(plugins_dir) 72 self.__plugins = {} # Loaded and active plugins 73 self.__all_plugins = [] # All available plugins 74 # Each element in the list is an 5-tuple: 75 # (NAME, DESCRIPTION, AUTHOR, URL, FACTORY) 76 load_plugins(self.SYS_PLUGINS_DIR) 77 load_plugins(plugins_dir) 69 78 # The order of this loop dictates that user plugins override 70 79 # system plugins 71 for plugin in (sys_plugins + user_plugins): 72 self.__plugins[plugin.name] = plugin 80 active_plugins = mesk.config.get(mesk.CONFIG_MAIN, 'plugins') 81 active_plugins = active_plugins.split(';') 82 for plugin_info in self.__all_plugins: 83 if plugin_info[self.NAME] in active_plugins: 84 mesk.log.info('Activating \'%s\' plugin' % \ 85 plugin_info[self.NAME]) 86 plugin = plugin_info[self.FACTORY]() 87 self.__plugins[plugin_info[self.NAME]] = plugin 73 88 74 def get_plugins(self): 75 return [plugin for plugin in self.__plugins.values()] 89 def get_plugins(self, type = None): 90 if not type: 91 return [plugin for plugin in self.__plugins.values()] 92 93 plugins = [] 94 for p in self.__plugins.values(): 95 if isinstance(p, type): 96 plugins.append(p) 97 return plugins 76 98 77 99 def load_plugin(self, plugin_file): … … 88 110 __import__(module) 89 111 module = sys.modules[module] 90 entry_point = getattr(module, 'create_plugin') 91 plugin = entry_point() 112 plugin_info = self._make_plugin_tuple(module) 113 if plugin_info: 114 self.__all_plugins.append(plugin_info) 92 115 except Exception, ex: 93 116 mesk.log.error('Plugin \'%s\' failed to load: %s' % (module, … … 101 124 102 125 return plugin 126 127 def _make_plugin_tuple(self, module): 128 try: 129 name = getattr(module, 'NAME') 130 descr = getattr(module, 'DESCRIPTION') 131 author = getattr(module, 'AUTHOR') 132 url = getattr(module, 'URL') 133 factory = getattr(module, 'create_plugin') 134 return (name, descr, author, url, factory) 135 except AttributeError, ex: 136 mesk.log.verbose('Skipping non plugin module: %s' % str(ex)) 137 return None trunk/src/plugins/audioscrobbler.py
r122 r123 24 24 _ = mesk.common.i18n._ 25 25 from mesk.plugin import Plugin 26 from mesk.plugin_events import SourceListener 27 28 # Required variables 29 NAME = 'audioscrobbler' 30 DESCRIPTION = _('Submits played songs to last.fm') 31 AUTHOR = 'Travis Shirk <travis@pobox.com>' 32 URL = 'http://mesk.nicfit.net/plugins/' 26 33 27 34 PROTOCOL_VERSION = '1.1' … … 36 43 CONFIG_SECTION = 'audioscrobbler' 37 44 38 class AudioscrobblerPlugin(Plugin ):45 class AudioscrobblerPlugin(Plugin, SourceListener): 39 46 40 47 def __init__(self): 41 Plugin.__init__(self, 'audioscrobbler', 42 _('Submits played songs to last.fm'), 43 'Travis Shirk <travis@pobox.com>', 44 'http://mesk.nicfit.net/plugins/') 48 Plugin.__init__(self, NAME, DESCRIPTION, AUTHOR, URL) 45 49 46 50 self.user = '' … … 65 69 pass 66 70 67 def on_play(self): 68 pass 69 def on_pause(self): 70 pass 71 def on_stop(self): 72 pass 71 def on_plugin_source_started(self, audio_source): 72 print "on_plugin_source_started", audio_source 73 def on_plugin_source_ended(self, audio_source): 74 print "on_plugin_source_ended", audio_source 73 75 74 76 def create_plugin():
