fix symfony configuration and sort by priority

This commit is contained in:
Khoubza Younes
2021-09-29 16:10:39 +01:00
parent 3f845a4137
commit 6d52a98206
5 changed files with 123 additions and 49 deletions
@@ -39,6 +39,7 @@ final class NotifySendNotifier extends AbstractNotifier
$default = array(
'binary' => 'notify-send',
'expire_time' => 0,
'priority' => 1,
);
$options = array_replace($default, $options);
+28 -1
View File
@@ -14,6 +14,11 @@ final class CliPresenter implements PresenterInterface
*/
private $notifiers = array();
/**
* @var NotifierInterface[]
*/
private $sorted = array();
public function render(Response $response)
{
$notifier = $this->createNotifier();
@@ -26,12 +31,34 @@ final class CliPresenter implements PresenterInterface
$this->notifiers[] = $notifier;
}
public function getSortedNotifiers()
{
if (0 !== count($this->sorted)) {
return $this->sorted;
}
$this->sorted = $this->notifiers;
usort($this->sorted, static function (NotifierInterface $a, NotifierInterface $b) {
$priorityA = $a->getPriority();
$priorityB = $b->getPriority();
if ($priorityA == $priorityB) {
return 0;
}
return $priorityA < $priorityB ? 1 : -1;
});
return $this->sorted;
}
/**
* @return NotifierInterface
*/
private function createNotifier()
{
foreach ($this->notifiers as $notifier) {
foreach ($this->getSortedNotifiers() as $notifier) {
if ($notifier->isSupported()) {
return $notifier;
}
@@ -8,17 +8,23 @@ use Symfony\Component\Config\Definition\ConfigurationInterface;
final class Configuration implements ConfigurationInterface
{
/**
* @return TreeBuilder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('flasher_cli');
$rootNode = $this->getRootNode($treeBuilder, 'flasher_cli');
$name = 'flasher_cli';
$treeBuilder = new TreeBuilder($name);
$rootNode = $this->getRootNode($treeBuilder, $name);
$rootNode
->children()
->booleanNode('render_all')
->isRequired()
->defaultValue(false)
->end()
->booleanNode('render_immediately')
->isRequired()
->defaultValue(true)
->end()
->scalarNode('title')
@@ -35,6 +41,10 @@ final class Configuration implements ConfigurationInterface
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('variable')->end()
->defaultValue(array())
->end()
->append($this->addNotifiersConfig())
->end()
;
@@ -44,11 +54,12 @@ final class Configuration implements ConfigurationInterface
private function addNotifiersConfig()
{
$treeBuilder = new TreeBuilder('notifiers');
$rootNode = $this->getRootNode($treeBuilder, 'notifiers');
$name = 'notifiers';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->fixXmlConfig('notifier')
->children()
->append($this->addGrowlNotifyNotifier())
->append($this->addKDialogNotifier())
@@ -67,15 +78,20 @@ final class Configuration implements ConfigurationInterface
*/
private function addGrowlNotifyNotifier()
{
$treeBuilder = new TreeBuilder('growl_notify');
$rootNode = $this->getRootNode($treeBuilder, 'growl_notify');
$name = 'growl_notify';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.growl_notify')->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(0)
->end()
->scalarNode('binary')->defaultValue('growlnotify')->end()
->arrayNode('binary_paths')
->beforeNormalization()
->ifString()
@@ -86,7 +102,7 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
@@ -104,15 +120,20 @@ final class Configuration implements ConfigurationInterface
*/
private function addKDialogNotifier()
{
$treeBuilder = new TreeBuilder('kdialog_notifier');
$rootNode = $this->getRootNode($treeBuilder, 'kdialog_notifier');
$name = 'kdialog_notifier';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.kdialog_notifier')->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(0)
->end()
->scalarNode('binary')->defaultValue('kdialog')->end()
->arrayNode('binary_paths')
->beforeNormalization()
->ifString()
@@ -123,11 +144,11 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->end()
@@ -141,15 +162,20 @@ final class Configuration implements ConfigurationInterface
*/
private function addNotifuNotifier()
{
$treeBuilder = new TreeBuilder('notifu_notifier');
$rootNode = $this->getRootNode($treeBuilder, 'notifu_notifier');
$name = 'notifu_notifier';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.notifu_notifier')->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(0)
->end()
->scalarNode('binary')->defaultValue('notifu')->end()
->arrayNode('binary_paths')
->beforeNormalization()
->ifString()
@@ -160,11 +186,11 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->end()
@@ -178,14 +204,19 @@ final class Configuration implements ConfigurationInterface
*/
private function addNotifySendNotifier()
{
$treeBuilder = new TreeBuilder('notify_send');
$rootNode = $this->getRootNode($treeBuilder, 'notify_send');
$name = 'notify_send';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.notify_send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(1)
->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->arrayNode('binary_paths')
->beforeNormalization()
@@ -197,11 +228,11 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->end()
@@ -215,15 +246,20 @@ final class Configuration implements ConfigurationInterface
*/
private function addSnoreToastNotifier()
{
$treeBuilder = new TreeBuilder('snore_toast_notifier');
$rootNode = $this->getRootNode($treeBuilder, 'snore_toast_notifier');
$name = 'snore_toast_notifier';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.snore_toast_notifier')->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(0)
->end()
->scalarNode('binary')->defaultValue('snoretoast')->end()
->arrayNode('binary_paths')
->beforeNormalization()
->ifString()
@@ -234,11 +270,11 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->end()
@@ -252,15 +288,20 @@ final class Configuration implements ConfigurationInterface
*/
private function addTerminalNotifierNotifier()
{
$treeBuilder = new TreeBuilder('terminal_notifier_notifier');
$rootNode = $this->getRootNode($treeBuilder, 'terminal_notifier_notifier');
$name = 'terminal_notifier_notifier';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.terminal_notifier_notifier')->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(0)
->end()
->scalarNode('binary')->defaultValue('terminal-notifier')->end()
->arrayNode('binary_paths')
->beforeNormalization()
->ifString()
@@ -271,11 +312,11 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->end()
@@ -289,15 +330,20 @@ final class Configuration implements ConfigurationInterface
*/
private function addToasterNotifier()
{
$treeBuilder = new TreeBuilder('toaster_send');
$rootNode = $this->getRootNode($treeBuilder, 'toaster_send');
$name = 'toaster';
$rootNode = $this->getRootNode(new TreeBuilder($name), $name);
$rootNode
->addDefaultsIfNotSet()
->children()
->booleanNode('enabled')->defaultValue(true)->end()
->scalarNode('service')->defaultValue('flasher.cli.toaster_send')->end()
->scalarNode('binary')->defaultValue('notify-send')->end()
->scalarNode('priority')
->beforeNormalization()
->always(function ($v) { return (int) $v; })
->end()
->defaultValue(0)
->end()
->scalarNode('binary')->defaultValue('toast')->end()
->arrayNode('binary_paths')
->beforeNormalization()
->ifString()
@@ -308,11 +354,11 @@ final class Configuration implements ConfigurationInterface
->scalarNode('title')->defaultValue(null)->end()
->booleanNode('mute')->defaultValue(true)->end()
->arrayNode('icons')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->arrayNode('sounds')
->prototype('scalar')->end()
->prototype('variable')->end()
->defaultValue(array())
->end()
->end()
@@ -17,7 +17,6 @@ final class FlasherCliExtension extends Extension
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
dd($config);
$loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('config.php');
@@ -37,7 +36,7 @@ final class FlasherCliExtension extends Extension
$this->registerNotifier($container, $config, 'notify_send');
$this->registerNotifier($container, $config, 'snore_toast_notifier');
$this->registerNotifier($container, $config, 'terminal_notifier_notifier');
$this->registerNotifier($container, $config, 'toaster_send');
$this->registerNotifier($container, $config, 'toaster');
}
private function registerNotifier(ContainerBuilder $container, array $config, $notifier)
@@ -49,11 +48,12 @@ final class FlasherCliExtension extends Extension
private function createConfigFor(array $config, $notifier)
{
$options = $config[$notifier];
$options = $config['notifiers'][$notifier];
$options['title'] = $config['title'];
$options['mute'] = $config['mute'];
$options['icons'] = array_replace_recursive($config['icons'], $options['icons']);
$options['sounds'] = array_replace_recursive($config['sounds'], $options['sounds']);
return $options;
}
+1 -1
View File
@@ -63,7 +63,7 @@ $container
->addTag('flasher.cli_notifier');
$container
->register('flasher.cli.toaster_send', 'Flasher\Cli\Prime\Notifier\ToasterNotifier')
->register('flasher.cli.toaster', 'Flasher\Cli\Prime\Notifier\ToasterNotifier')
->addArgument(array())
->addTag('flasher.cli_notifier');