error("Media path hasn't been configured. Exiting."); return; } if (!$record = $this->argument('record')) { $this->syncAll(); return; } $this->syngle($record); } /** * Sync all files in the configured media path. */ protected function syncAll() { $this->info('Koel syncing started. All we need now is just a little patience…'); // Get the tags to sync. // Notice that this is only meaningful for existing records. // New records will have every applicable field sync'ed in. $tags = $this->option('tags') ? explode(',', $this->option('tags')) : []; Media::sync(null, $tags, $this->option('force'), $this); $this->output->writeln("Completed! {$this->synced} new or updated song(s), " ."{$this->ignored} unchanged song(s), " ."and {$this->invalid} invalid file(s)."); } /** * SYNc a sinGLE file or directory. See my awesome pun? * * @param string $record The watch record. * As of current we only support inotifywait. * Some examples: * - "DELETE /var/www/media/gone.mp3" * - "CLOSE_WRITE,CLOSE /var/www/media/new.mp3" * - "MOVED_TO /var/www/media/new_dir" * * @link http://man7.org/linux/man-pages/man1/inotifywait.1.html */ public function syngle($record) { Media::syncByWatchRecord(new InotifyWatchRecord($record), $this); } /** * Log a song's sync status to console. */ public function logToConsole($path, $result) { $name = basename($path); if ($result === true) { if ($this->option('verbose')) { $this->line("$name has no changes – ignoring"); } ++$this->ignored; } elseif ($result === false) { if ($this->option('verbose')) { $this->error("$name is not a valid media file"); } ++$this->invalid; } else { if ($this->option('verbose')) { $this->info("$name synced"); } ++$this->synced; } } }