/**
  * Check if an event dispatcher has a subscriber
  *
  * @param HasDispatcherInterface $dispatcher
  * @param EventSubscriberInterface $subscriber
  *
  * @return bool
  */
 protected function hasSubscriber(HasDispatcherInterface $dispatcher, EventSubscriberInterface $subscriber)
 {
     $class = get_class($subscriber);
     $all = array_keys(call_user_func(array($class, 'getSubscribedEvents')));
     foreach ($all as $i => $event) {
         foreach ($dispatcher->getEventDispatcher()->getListeners($event) as $e) {
             if ($e[0] === $subscriber) {
                 unset($all[$i]);
                 break;
             }
         }
     }
     return count($all) == 0;
 }
 /**
  * Add the custom param listener to a transfer object
  *
  * @param HasDispatcherInterface $sync
  */
 protected function addCustomParamListener(HasDispatcherInterface $sync)
 {
     $params = $this->params;
     $sync->getEventDispatcher()->addListener(UploadSync::BEFORE_TRANSFER, function (Event $e) use($params) {
         if ($e['command'] instanceof CommandInterface) {
             $e['command']->overwriteWith($params);
         }
     });
 }
 /**
  * Add the custom param listener to a transfer object
  *
  * @param HasDispatcherInterface $sync
  */
 protected function addCustomParamListener(HasDispatcherInterface $sync)
 {
     $params = $this->params;
     $sync->getEventDispatcher()->addListener(UploadSync::BEFORE_TRANSFER, function (Event $e) use($params) {
         if ($e['command'] instanceof CommandInterface) {
             $e['command']->overwriteWith($params);
         } elseif ($e['command'] instanceof TransferInterface) {
             // Multipart upload transfer object
             foreach ($params as $k => $v) {
                 $e['command']->setOption($k, $v);
             }
         }
     });
 }