Source code for flexget.plugins.modify.reorder_quality
from loguru import logger
from flexget import plugin
from flexget.event import event
from flexget.utils import qualities
logger = logger.bind(name='reorder_quality')
[docs]
class ReorderQuality:
"""Allow modifying quality priorities from default ordering.
Example::
reorder_quality:
webrip:
above: hdtv
"""
schema = {
'type': 'object',
'additionalProperties': {
'type': 'object',
'properties': {
'above': {'type': 'string', 'format': 'quality'},
'below': {'type': 'string', 'format': 'quality'},
},
'maxProperties': 1,
},
}
def __init__(self):
self.quality_priorities = {}
[docs]
def on_task_start(self, task, config):
self.quality_priorities = {}
for quality, _config in config.items():
action, other_quality = next(iter(_config.items()))
if quality not in qualities._registry:
raise plugin.PluginError(f'{quality} is not a valid quality')
quality_component = qualities._registry[quality]
other_quality_component = qualities._registry[other_quality]
if quality_component.type != other_quality_component.type:
raise plugin.PluginError(
f'{quality}={quality_component.type} and {other_quality}={other_quality_component.type} do not have the same quality type'
)
self.quality_priorities[quality] = quality_component.value
logger.debug('stored {} original value {}', quality, quality_component.value)
new_value = other_quality_component.value
if action == 'above':
new_value += 1
else:
new_value -= 1
quality_component.value = new_value
logger.debug('New value for {}: {} ({} {})', quality, new_value, action, other_quality)
logger.debug('Changed priority for: {}', ', '.join(list(config.keys())))
[docs]
def on_task_exit(self, task, config):
if not self.quality_priorities:
logger.debug('nothing changed, aborting restore')
return
for name, value in self.quality_priorities.items():
qualities._registry[name].value = value
logger.debug('Restored priority for: {}', ', '.join(list(self.quality_priorities.keys())))
self.quality_priorities = {}
on_task_abort = on_task_exit
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(ReorderQuality, 'reorder_quality', api_ver=2)