/**
  * Make a directory as described in the task description
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     $deferred->notify(new Notification("Creating directory '{$description->getName()}'", Notification::PRIORITY_NORMAL));
     if ($this->getFileSystem()->isDirectory($description->getName())) {
         $deferred->resolve("Directory '{$description->getName()}' already exists");
         return;
     }
     if ($this->getFileSystem()->makeDirectory($description->getName())) {
         $deferred->resolve("Created directory '{$description->getName()}'");
         return;
     }
     $deferred->reject("Directory '{$description->getName()}' could not be created");
 }
 /**
  * Make a directory as described in the task description
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     $deferred->notify(new Notification("Deleting file or directory '{$description->getName()}'", Notification::PRIORITY_NORMAL));
     if (!$this->getFileSystem()->isFile($description->getName()) && !$this->getFileSystem()->isDirectory($description->getName())) {
         $deferred->resolve("File or directory '{$description->getName()}' does not exist");
         return;
     }
     if ($this->getFileSystem()->delete($description->getName())) {
         $deferred->resolve("Deleted file or directory '{$description->getName()}'");
         return;
     }
     $deferred->reject("File or directory '{$description->getName()}' could not be deleted");
 }
 /**
  * Change the target owner
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     try {
         $deferred->notify(new Notification("Changing '{$description->getTarget()}' owner to '{$description->getOwner()}'", Notification::PRIORITY_NORMAL));
         if ($this->getFileSystem()->changeOwner($description->getTarget(), $description->getOwner())) {
             $deferred->resolve("Changed '{$description->getTarget()}' owner to '{$description->getOwner()}' successfully");
             return;
         }
     } catch (\Exception $e) {
         // do noting, we reject below
         $deferred->reject("Failed to change the owner of {$description->getTarget()}: " . $e->getMessage());
         return;
     }
     $deferred->reject("Failed to change the owner of {$description->getTarget()} to {$description->getOwner()}");
 }
 /**
  * Load contents of a template, replace placeholders with passed values and save to a target file
  *
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     try {
         $deferred->notify(new Notification("Loading template {$description->getTemplate()}'", Notification::PRIORITY_NORMAL));
         $contents = $this->getFileSystem()->getFileContents($description->getTemplate());
         $keyValuePairs = [];
         foreach ($description->getParams() as $key => $value) {
             $keyValuePairs["{{ " . $key . " }}"] = $value;
         }
         $processedContents = strtr($contents, $keyValuePairs);
         $deferred->notify("File content generated, saving to {$description->getTarget()}");
         if ($this->getFileSystem()->write($description->getTarget(), $processedContents)) {
             $deferred->resolve("Created '{$description->getTarget()}' from template '{$description->getTemplate()}'");
             return;
         }
     } catch (\Exception $e) {
         $deferred->notify("Could not write template: " . $e->getMessage());
     }
     $deferred->reject("Could not create '{$description->getTarget()}' from template '{$description->getTemplate()}'");
 }
 /**
  * Make a directory as described in the task description
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     $deferred->notify(new Notification("Moving '{$description->getFrom()}' to '{$description->getTo()}'", Notification::PRIORITY_NORMAL));
     if ($this->getFileSystem()->move($description->getFrom(), $description->getTo())) {
         $deferred->resolve("Moved '{$description->getFrom()}' to '{$description->getTo()}'");
         return;
     }
     $deferred->reject("Could not move '{$description->getFrom()}' to '{$description->getTo()}'");
 }
 /**
  * Check a file doesn't exist
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     $deferred->notify(new Notification("Checking that file '{$description->getName()}' does not exist", Notification::PRIORITY_NORMAL));
     if (!$this->getFileSystem()->isFile($description->getName())) {
         $deferred->resolve("File '{$description->getName()}' does not exist");
         return;
     }
     $deferred->reject("File '{$description->getName()}' exists");
 }
 /**
  * Make a directory as described in the task description
  * @param Deferred $deferred
  * @param TaskInterface $task
  * @return bool
  */
 protected function processDeferred(Deferred $deferred, TaskInterface $task)
 {
     yield;
     /** @var Description $description */
     $description = $task->getDescription();
     $deferred->notify(new Notification("Copying '{$description->getFrom()}' to '{$description->getTo()}'", Notification::PRIORITY_NORMAL));
     try {
         if (!$this->getFileSystem()->copy($description->getFrom(), $description->getTo())) {
             $deferred->notify("Directory permissions were not applied correctly");
         }
     } catch (\Exception $e) {
         $deferred->notify("Copy failed: {$e->getMessage()}");
         $deferred->reject("Could not copy '{$description->getFrom()}' to '{$description->getTo()}'");
         return;
     }
     $deferred->resolve("Copied '{$description->getFrom()}' to '{$description->getTo()}'");
 }