diff --git a/src/Controller/TorrentController.php b/src/Controller/TorrentController.php index 806b675..e2b3281 100644 --- a/src/Controller/TorrentController.php +++ b/src/Controller/TorrentController.php @@ -257,6 +257,12 @@ class TorrentController extends AbstractController $form['torrent']['error'][] = $translator->trans('Torrent file out of size limit'); } + //// Check for duplicates + if ($torrentService->findTorrentByMd5File(md5_file($file->getPathName()))) + { + $form['torrent']['error'][] = $translator->trans('Torrent file already exists'); + } + //// Validate torrent format if (!$torrentService->readTorrentFileByFilepath($file->getPathName())) { diff --git a/src/Entity/Torrent.php b/src/Entity/Torrent.php index aba75a0..38cc8d6 100644 --- a/src/Entity/Torrent.php +++ b/src/Entity/Torrent.php @@ -28,6 +28,9 @@ class Torrent #[ORM\Column] private ?bool $approved = null; + #[ORM\Column(length: 32)] + private ?string $md5file = null; + #[ORM\Column(type: Types::TEXT, nullable: true)] private ?string $keywords = null; @@ -88,6 +91,18 @@ class Torrent return $this; } + public function getMd5file(): ?string + { + return $this->md5file; + } + + public function setMd5file(string $md5file): static + { + $this->md5file = $md5file; + + return $this; + } + public function getKeywords(): ?string { return $this->keywords; diff --git a/src/Service/TorrentService.php b/src/Service/TorrentService.php index 17d3457..907d109 100644 --- a/src/Service/TorrentService.php +++ b/src/Service/TorrentService.php @@ -209,6 +209,7 @@ class TorrentService $torrent = $this->addTorrent( $userId, $added, + md5_file($filepath), $this->generateTorrentKeywordsByTorrentFilepath( $filepath ), @@ -256,6 +257,7 @@ class TorrentService public function addTorrent( int $userId, int $added, + string $md5file, string $keywords, bool $approved ): ?Torrent @@ -264,6 +266,7 @@ class TorrentService $torrent->setUserId($userId); $torrent->setAdded($added); + $torrent->setMd5File($md5file); $torrent->setKeywords($keywords); $torrent->setApproved($approved); @@ -294,6 +297,17 @@ class TorrentService ); } + public function findTorrentByMd5File(string $md5file) : ?Torrent + { + return $this->entityManagerInterface + ->getRepository(Torrent::class) + ->findOneBy( + [ + 'md5file' => $md5file + ] + ); + } + public function setTorrentsApprovedByUserId( int $userId, bool $value