*/ public function scan(): array { $missing = []; foreach (array_keys($this->orphans->scannedDisks()) as $diskName) { $onDisk = array_flip(Storage::disk($diskName)->allFiles()); File::query() ->where('disk', $diskName) ->select(['id', 'path']) ->chunkById(500, function ($files) use ($onDisk, &$missing): void { foreach ($files as $file) { if (! isset($onDisk[$file->path])) { $missing[] = (int) $file->id; } } }); } return $missing; } /** * Files this installation has marked missing whose bytes are back. * * A remount, a restored backup, a bucket reconnected. Recovery is not * optional politeness: the alternative is an administrator who fixed * their storage and still has a library that says every file is gone. * * @return list */ public function recovered(): array { $back = []; foreach (array_keys($this->orphans->scannedDisks()) as $diskName) { $onDisk = array_flip(Storage::disk($diskName)->allFiles()); File::query() ->where('disk', $diskName) ->where('scan_status', ScanStatus::Missing) ->select(['id', 'path']) ->chunkById(500, function ($files) use ($onDisk, &$back): void { foreach ($files as $file) { if (isset($onDisk[$file->path])) { $back[] = (int) $file->id; } } }); } return $back; } }