/**
  * @param \FlameCore\Synchronizer\Files\FilesComparer $diff
  */
 protected function addMissing(FilesComparer $diff)
 {
     $files = $diff->getMissingFiles();
     $directories = $diff->getMissingDirs();
     if ($this->observer) {
         $this->observer->notify('sync.task.start', ['task' => 'Adding missing files', 'total' => count($files)]);
     }
     foreach ($directories as $directory) {
         if (!$this->target->createDir($directory)) {
             $this->fails++;
         }
     }
     foreach ($files as $file) {
         $content = $this->source->get($file);
         if ($content === false || !$this->target->put($file, $content, 0777)) {
             $this->fails++;
         }
         if ($this->observer) {
             $this->observer->notify('sync.task.status');
         }
     }
     if ($this->observer) {
         $this->observer->notify('sync.task.finish');
     }
 }
 /**
  * @param string $file
  * @return bool
  */
 protected function compare($file)
 {
     return $this->source->getFileHash($file) !== $this->target->getFileHash($file);
 }