Check-in [11f270a726]
Overview
Comment: | Remove config.find_in_dirs(), which is unused now. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
11f270a72658df64a93873a72df1987d |
User & Date: | mario on 2015-05-21 20:08:33 |
Other Links: | manifest | tags |
Context
2015-05-22
| ||
01:49 | Channel plugin for reddit /r/*music* categories. Just filters out Youtube or direct MP3/Ogg links at the moment. check-in: d840371943 user: mario tags: trunk | |
2015-05-21
| ||
20:08 | Remove config.find_in_dirs(), which is unused now. check-in: 11f270a726 user: mario tags: trunk | |
02:25 | Make quicksearch icon activatable again (property "secondary-icon-activatable" was required). check-in: 069f6308de user: mario tags: trunk | |
Changes
Modified channels/__init__.py from [00c8218319] to [d0e1f694ba].
︙ | ︙ | |||
11 12 13 14 15 16 17 | # pack: # bookmarks.py, configwin.py, dirble.py, dnd.py, exportcat.py, # filtermusic.py, global_key.py, history.py, internet_radio.py, # itunes.py, jamendo.py, links.py, live365.py, modarchive.py, # myoggradio.py, pluginmanager2.py, radiobrowser.py, radionomy.py, # radiotray.py, search.py, shoutcast.py, somafm.py, streamedit.py, # surfmusik.py, timer.py, tunein.py, ubuntuusers.py, youtube.py, | | > | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # pack: # bookmarks.py, configwin.py, dirble.py, dnd.py, exportcat.py, # filtermusic.py, global_key.py, history.py, internet_radio.py, # itunes.py, jamendo.py, links.py, live365.py, modarchive.py, # myoggradio.py, pluginmanager2.py, radiobrowser.py, radionomy.py, # radiotray.py, search.py, shoutcast.py, somafm.py, streamedit.py, # surfmusik.py, timer.py, tunein.py, ubuntuusers.py, youtube.py, # useragentswitcher.py, xiph.py, favicon.py, filter_bitrate.py, # ui_cht.py # config: - # priority: core # # GenericChannel implements the basic GUI functions and defines # the default channel data structure. It implements fallback logic # for all other channel implementations. Only `bookmarks` uses it # directly. |
︙ | ︙ |
Modified config.py from [9e6c88a45c] to [b290c1e0fd].
︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 | self.playlist_asis = 0 self.window_title = 1 self.google_homepage = 0 self.windows = platform.system()=="Windows" self.pyquery = 1 self.debug = 0 # Add plugin names and default config: options from each .meta def add_plugin_defaults(self, meta, name): pluginconf.add_plugin_defaults(self, self.plugins, meta, name) # look at system binaries for standard audio players | > > > > > > > > > | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | self.playlist_asis = 0 self.window_title = 1 self.google_homepage = 0 self.windows = platform.system()=="Windows" self.pyquery = 1 self.debug = 0 # update old setting names def migrate(self): # 2.1.1 if "audio/mp3" in self.play: self.play["audio/mpeg"] = self.play["audio/mp3"] del self.play["audio/mp3"] # 2.1.7 if self.tmp == "/tmp": self.tmp = "/tmp/streamtuner2" # Add plugin names and default config: options from each .meta def add_plugin_defaults(self, meta, name): pluginconf.add_plugin_defaults(self, self.plugins, meta, name) # look at system binaries for standard audio players |
︙ | ︙ | |||
215 216 217 218 219 220 221 | # write try: f.write(data.encode("utf-8")) except TypeError as e: f.write(data) # Python3 sometimes wants to write strings rather than bytes f.close() | < < < < < < < < < < < < < < < < < < < < < < < < < | 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 | # write try: f.write(data.encode("utf-8")) except TypeError as e: f.write(data) # Python3 sometimes wants to write strings rather than bytes f.close() # retrieve data from config file def load(self, name): name = name + ".json" file = self.dir + "/" + name try: # .gz or normal file if os.path.exists(file + ".gz"): f = gzip.open(file + ".gz", "rt") elif os.path.exists(file): f = open(file, "rt") else: return # file not found # decode r = json.load(f) f.close() return r except Exception as e: log.ERR("JSON parsing error (in "+name+")", e) # recursive dict update def update(self, with_new_data): for key,value in with_new_data.items(): if type(value) == dict: self[key].update(value) else: self[key] = value # descends into sub-dicts instead of wiping them with subkeys # Shortcut to `state.json` loading (currently selected categories etc.) def state(self, module=None, d={}): if not d: d.update(conf.load("state") or {}) if module: return d.get(module, {}) return d # standard user account storage in ~/.netrc or less standard but contemporarily in ~/.config/netrc def netrc(self, varhosts=("shoutcast.com")): global netrc if not netrc: netrc = {} try: from netrc import netrc as parser try: netrc = parser().hosts except: netrc = parser(self.xdg() + "/netrc").hosts except: log.STAT("No .netrc") for server in varhosts: if server in netrc: return netrc[server] # Use config:-style definitions for argv extraction, # such as: { arg: -D, name: debug, type: bool } def init_args(self, ap): for opt in plugin_meta(frame=1).get("config"): kwargs = pluginconf.argparse_map(opt) if kwargs: #print(kwargs) ap.add_argument(*kwargs.pop("args"), **kwargs) return ap.parse_args() # Copy args fields into conf. dict def apply_args(self, args): self.debug = args.debug self.nothreads = args.nothreads if args.exit: sys.exit(1) for p_id in (args.disable or []): self.plugins[p_id] = 0 for p_id in (args.enable or []): self.plugins[p_id] = 1 # Simplified print wrapper: `log.err(...)` class log_printer(object): # Wrapper method = None |
︙ | ︙ | |||
364 365 366 367 368 369 370 | # populate global conf instance conf = ConfigDict() log.PROC("ConfigDict() initialized") # tie in pluginconf.* | < < | 348 349 350 351 352 353 354 355 356 357 358 | # populate global conf instance conf = ConfigDict() log.PROC("ConfigDict() initialized") # tie in pluginconf.* pluginconf.log_ERR = log.ERR pluginconf.module_base = "config" pluginconf.plugin_base = ["channels", "plugins"]#, conf.share+"/channels", conf.dir+"/plugins"] |
Modified st2.py from [eca59ce447] to [54146ab945].
︙ | ︙ | |||
197 198 199 200 201 202 203 | gui_startup(100.0) #-- Shortcut for glade.get_widget() # Allows access to widgets as direct attributes instead of using .get_widget() # Also looks in self.channels[] for the named channel plugins def __getattr__(self, name): | | | | > < | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | gui_startup(100.0) #-- Shortcut for glade.get_widget() # Allows access to widgets as direct attributes instead of using .get_widget() # Also looks in self.channels[] for the named channel plugins def __getattr__(self, name): if name in self.channels: return self.channels[name] # like self.shoutcast elif name in self.features: return self.features[name] # like self.configwin else: return self.get_object(name) # or gives an error if neither exists # Custom-named widgets are available from .widgets{} not via .get_widget() def get_widget(self, name): if name in self.widgets: return self.widgets[name] else: return gtk.Builder.get_object(self, name) # Run function in separate thread. # Often used in conjunction with uikit.do() for Gtk interactions. def thread(self, target, *args, **kwargs): if conf.nothreads: return target(*args, **kwargs) thread = Thread(target=target, args=args, kwargs=kwargs) thread.start() # Returns the currently selected directory/channel object (remembered position) def channel(self): return self.channels[self.current_channel] # List of module titles for channel tabs |
︙ | ︙ |