Check-in [91f8502978]
Overview
Comment: | Detect all command names in player config, so that both `xterm` and `streamripper` are probed for existence. Use dict comprehension for plugin_meta lookup. Remove wrap_entry in favour of generic uikit.wrap(). |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
91f85029781999fddc46aa61fa2a138b |
User & Date: | mario on 2015-05-03 14:10:33 |
Other Links: | manifest | tags |
Context
2015-05-03
| ||
14:13 | Add user plugin manager / download tool. Not very well integrated nor pretty. Still requires a restart, needs more hooks into config dialog. (Clean up previous plugin vboxes after installation. Auto-activation required to reimplement init loader. And channels.__path__ setup isn't yet injectable, because no plugin `order:` is honored by main/init, and pluginmanager2 would run too late for overrides.) check-in: 8e8a9dd020 user: mario tags: trunk | |
14:10 | Detect all command names in player config, so that both `xterm` and `streamripper` are probed for existence. Use dict comprehension for plugin_meta lookup. Remove wrap_entry in favour of generic uikit.wrap(). check-in: 91f8502978 user: mario tags: trunk | |
14:09 | Allow to override encoding= for .text results (requests can't detect it automatically for binary/json responses). check-in: 00ff8bac09 user: mario tags: trunk | |
Changes
Modified channels/configwin.py from [55e5421a33] to [227cef2658].
︙ | ︙ | |||
97 98 99 100 101 102 103 | # for each ListStore column id.) def list_edit(self, liststore, path, column, new_text): liststore[path][column] = new_text liststore[path][3] = self.app_bin_check(new_text) # return OK or CANCEL depending on availability of app def app_bin_check(self, v): | | | | > | | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # for each ListStore column id.) def list_edit(self, liststore, path, column, new_text): liststore[path][column] = new_text liststore[path][3] = self.app_bin_check(new_text) # return OK or CANCEL depending on availability of app def app_bin_check(self, v): bin = re.findall(r"(?<![$(`%-])\b(\w+(?:-\w+)*)", v) if bin: bin = [find_executable(bin) for bin in bin] if not None in bin: return gtk.STOCK_MEDIA_PLAY else: return gtk.STOCK_CANCEL else: return gtk.STOCK_NEW # iterate over channel and feature plugins def add_plugins(self): ls = {name: plugin_meta(module=name) for name in module_list()} #for name in module_list(): # if name in self.channels: # ls[name] = self.channels[name].meta # elif name in self.features: # ls[name] = self.features[name].meta # else: # ls[name] = plugin_meta(module=name) |
︙ | ︙ | |||
160 161 162 163 164 165 166 | else: add_( "config_"+opt["name"], gtk.Entry(), opt["description"], color ) # spacer add_( "filler_pl_"+name, gtk.HSeparator() ) | < < < < < < < < < < < < < < < < < < < < | | | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | else: add_( "config_"+opt["name"], gtk.Entry(), opt["description"], color ) # spacer add_( "filler_pl_"+name, gtk.HSeparator() ) # Put config widgets into channels/features configwin notebooks def add_channels(self, id=None, w=None, label=None, color=None, image=None, align=20): self.plugin_options.pack_start(uikit.wrap(self.widgets, id, w, label, color, image, align)) # Separate tab for non-channel plugins def add_features(self, id=None, w=None, label=None, color=None, image=None, align=20): self.feature_options.pack_start(uikit.wrap(self.widgets, id, w, label, color, image, align)) # save config def save(self, widget): self.save_config(conf.__dict__, "config_") self.save_config(conf.plugins, "config_plugins_") [callback() for callback in self.hooks["config_save"]] conf.save(nice=1) self.hide() |