diff --git a/src/Wallabag/CoreBundle/Command/CleanDownloadedImagesCommand.php b/src/Wallabag/CoreBundle/Command/CleanDownloadedImagesCommand.php index ae6a3accc..de5cfc509 100644 --- a/src/Wallabag/CoreBundle/Command/CleanDownloadedImagesCommand.php +++ b/src/Wallabag/CoreBundle/Command/CleanDownloadedImagesCommand.php @@ -8,14 +8,16 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Finder\Finder; +use Wallabag\CoreBundle\Helper\DownloadImages; use Wallabag\UserBundle\Entity\User; class CleanDownloadedImagesCommand extends ContainerAwareCommand { /** @var SymfonyStyle */ protected $io; - protected $deleted = 0; + /** @var DownloadImages */ + protected $downloadImages; protected function configure() { @@ -44,8 +46,23 @@ class CleanDownloadedImagesCommand extends ContainerAwareCommand $this->io->text('Dry run mode enabled (no images will be removed)'); } + $this->downloadImages = $this->getContainer()->get('wallabag_core.entry.download_images'); + + // retrieve _existing_ folders in the image folder + $finder = new Finder(); + $finder + ->directories() + ->ignoreDotFiles(true) + ->depth(2) + ->in($this->downloadImages->getBaseFolder()); + + $existingPaths = []; + foreach ($finder as $file) { + $existingPaths[] = $file->getFilename(); + } + foreach ($users as $user) { - $this->clean($user, $dryRun); + $this->clean($user, $existingPaths, $dryRun); } $this->io->success(sprintf('Finished cleaning. %d deleted images', $this->deleted)); @@ -53,45 +70,27 @@ class CleanDownloadedImagesCommand extends ContainerAwareCommand return 0; } - private function clean(User $user, bool $dryRun) + private function clean(User $user, array $existingPaths, bool $dryRun) { $this->io->text(sprintf('Processing user %s', $user->getUsername())); $repo = $this->getContainer()->get('wallabag_core.entry_repository'); - $downloadImages = $this->getContainer()->get('wallabag_core.entry.download_images'); - $baseFolder = $downloadImages->getBaseFolder(); - + $baseFolder = $this->downloadImages->getBaseFolder(); $entries = $repo->findAllEntriesIdByUserId($user->getId()); $deletedCount = 0; - // first retrieve _valid_ folders from existing entries - $hashToId = []; + // retrieve _valid_ folders from existing entries $validPaths = []; foreach ($entries as $entry) { - $path = $downloadImages->getRelativePath($entry['id']); + $path = $this->downloadImages->getRelativePath($entry['id']); if (!file_exists($baseFolder . '/' . $path)) { continue; } // only store the hash, not the full path - $hash = explode('/', $path)[2]; - $validPaths[] = $hash; - $hashToId[$hash] = $entry['id']; - } - - // then retrieve _existing_ folders in the image folder - $finder = new Finder(); - $finder - ->directories() - ->ignoreDotFiles(true) - ->depth(2) - ->in($baseFolder); - - $existingPaths = []; - foreach ($finder as $file) { - $existingPaths[] = $file->getFilename(); + $validPaths[] = explode('/', $path)[2]; } // check if existing path are valid, if not, remove all images and the folder