summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
3789dbc)
Remove external enclosing parentheses in user defined MPD filter, for
instance when there is more than one expression:
((genre == 'rock' ) AND (date =~ '198.')).
Even though it's a valid MPD filter, forge_filter will enclose it
properly. We do not want to through a syntax error at users since it's a
valid MPD filter, hence trying to transparently reformat the filter.
filter = ((genre == 'rock' ) AND (date =~ '198.'))
and
filter = (genre == 'rock' ) AND (date =~ '198.')
Will work the same, producing the valid MPD filter:
((genre == 'Punk') AND (date =~ '198[2-9]+') AND (artist != ''))
+def forge_filter(cfg, logger):
+ """forge_filter merges tags config and user defined MPD filter into a single
+ MPD filter"""
tags = set(cfg.keys()) & Tags.supported_tags
cfg_filter = cfg.get('filter', None)
tags = set(cfg.keys()) & Tags.supported_tags
cfg_filter = cfg.get('filter', None)
+ # Remove external enclosing parentheses in user defined MPD filter, for
+ # instance when there is more than one expression:
+ # ((genre == 'rock' ) AND (date =~ '198.'))
+ # Even though it's a valid MPD filter, forge_filter will enclose it
+ # properly. We do not want to through a syntax error at users since it's a
+ # valid MPD filter, hence trying to transparently reformat the filter
+ if cfg_filter.startswith('((') and cfg_filter.endswith('))'):
+ logger.debug('Drop external enclosing parentheses in user filter: %s',
+ cfg_filter[1:-1])
+ cfg['filter'] = cfg_filter[1:-1]
+ cfg_filter = cfg['filter']
mpd_filter = []
if cfg_filter:
mpd_filter.append(cfg_filter)
mpd_filter = []
if cfg_filter:
mpd_filter.append(cfg_filter)
def __init__(self, daemon):
super().__init__(daemon)
self._control_conf()
def __init__(self, daemon):
super().__init__(daemon)
self._control_conf()
- self.mpd_filter = forge_filter(self.plugin_conf)
+ self.mpd_filter = forge_filter(self.plugin_conf, self.log)
self._setup_tagsneeded()
self.log.debug('mpd filter: %s', self.mpd_filter)
self._setup_tagsneeded()
self.log.debug('mpd filter: %s', self.mpd_filter)
'Need at least MPD 0.21 to use Tags plugin (filters required)')
self.player.disconnect()
raise PluginException('MPD >= 0.21 required')
'Need at least MPD 0.21 to use Tags plugin (filters required)')
self.player.disconnect()
raise PluginException('MPD >= 0.21 required')
+ if not self.plugin_conf['filter']:
+ return
# Check filter is valid
try:
# Check filter is valid
try:
- if self.plugin_conf['filter']:
- # Use window to limit response size
- self.player.find(self.plugin_conf['filter'], "window", (0, 1))
+ # Use window to limit response size
+ self.player.find(self.mpd_filter, "window", (0, 1))
except CommandError as err:
except CommandError as err:
raise PluginException('Badly formated filter in tags plugin configuration: "%s"'
% self.plugin_conf['filter']) from err
raise PluginException('Badly formated filter in tags plugin configuration: "%s"'
% self.plugin_conf['filter']) from err
tags_cfg = config['tags']
if not control_config(tags_cfg):
return
tags_cfg = config['tags']
if not control_config(tags_cfg):
return
- filt = forge_filter(tags_cfg)
+ filt = forge_filter(tags_cfg, log)
log.info('Trying tags and filter config')
log.debug('Complete filter (tag+filter): %s', filt)
try:
log.info('Trying tags and filter config')
log.debug('Complete filter (tag+filter): %s', filt)
try: