diff options
author | Robin Appelman <robin@icewind.nl> | 2021-12-14 18:41:09 +0300 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2021-12-15 17:00:24 +0300 |
commit | 51dd3426254967b2b7b85603dd647df8d7863de0 (patch) | |
tree | 6fb979ffb450b5b5c57a601a5da3a0b19ab8a418 /lib | |
parent | 8e2248d38f18989d1854f9b720fcc4b7511cbb93 (diff) |
fix outdated/unscanned logic
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/BackgroundJob/BackgroundScanner.php | 70 |
1 files changed, 30 insertions, 40 deletions
diff --git a/lib/BackgroundJob/BackgroundScanner.php b/lib/BackgroundJob/BackgroundScanner.php index d4b5451..1e41e50 100644 --- a/lib/BackgroundJob/BackgroundScanner.php +++ b/lib/BackgroundJob/BackgroundScanner.php @@ -30,7 +30,7 @@ class BackgroundScanner extends TimedJob { /** @var ScannerFactory */ private $scannerFactory; - /** @var AppConfig */ + /** @var AppConfig */ private $appConfig; /** @var ILogger */ @@ -50,15 +50,16 @@ class BackgroundScanner extends TimedJob { /** @var bool */ private $isCLI; - public function __construct(ScannerFactory $scannerFactory, - AppConfig $appConfig, - IRootFolder $rootFolder, - ILogger $logger, - IUserManager $userManager, - IDBConnection $db, - IMimeTypeLoader $mimeTypeLoader, - ItemFactory $itemFactory, - bool $isCLI + public function __construct( + ScannerFactory $scannerFactory, + AppConfig $appConfig, + IRootFolder $rootFolder, + ILogger $logger, + IUserManager $userManager, + IDBConnection $db, + IMimeTypeLoader $mimeTypeLoader, + ItemFactory $itemFactory, + bool $isCLI ) { $this->rootFolder = $rootFolder; $this->scannerFactory = $scannerFactory; @@ -270,23 +271,20 @@ class BackgroundScanner extends TimedJob { return $data; } - protected function getUnscannedFiles() { + public function getUnscannedFiles() { $dirMimeTypeId = $this->mimeTypeLoader->getId('httpd/unix-directory'); - $qb1 = $this->db->getQueryBuilder(); - $qb1->select('fileid') - ->from('files_antivirus'); - - $qb2 = $this->db->getQueryBuilder(); - $qb2->select('fileid', 'storage') + $query = $this->db->getQueryBuilder(); + $query->select('fc.fileid', 'storage') ->from('filecache', 'fc') - ->where($qb2->expr()->notIn('fileid', $qb2->createFunction($qb1->getSQL()))) - ->andWhere($qb2->expr()->neq('mimetype', $qb2->expr()->literal($dirMimeTypeId))) - ->andWhere($qb2->expr()->like('path', $qb2->expr()->literal('files/%'))) - ->andWhere($this->getSizeLimitExpression($qb2)) + ->leftJoin('fc', 'files_antivirus', 'fa', $query->expr()->eq('fc.fileid', 'fa.fileid')) + ->where($query->expr()->isNull('fa.fileid')) + ->andWhere($query->expr()->neq('mimetype', $query->expr()->literal($dirMimeTypeId))) + ->andWhere($query->expr()->like('path', $query->expr()->literal('files/%'))) + ->andWhere($this->getSizeLimitExpression($query)) ->setMaxResults($this->getBatchSize() * 10); - return $qb2->execute(); + return $query->execute(); } protected function getToRescanFiles() { @@ -301,31 +299,23 @@ class BackgroundScanner extends TimedJob { return $qb->execute(); } - protected function getOutdatedFiles() { + public function getOutdatedFiles() { $dirMimeTypeId = $this->mimeTypeLoader->getId('httpd/unix-directory'); // We do not want to keep scanning the same files. So only scan them once per 28 days at most. $yesterday = time() - (28 * 24 * 60 * 60); - $qb1 = $this->db->getQueryBuilder(); - $qb2 = $this->db->getQueryBuilder(); - - $qb1->select('fileid') - ->from('files_antivirus') - ->andWhere($qb2->expr()->lt('check_time', $qb2->createNamedParameter($yesterday))) - ->orderBy('check_time', 'ASC'); - $qb2->select('fc.fileid', 'fc.storage') - ->from('filecache', 'fc') - ->leftJoin('fc', 'files_antivirus', 'fa', $qb2->expr()->eq('fc.fileid', 'fa.fileid')) - ->where($qb2->expr()->isNull('fa.fileid')) - ->andWhere($qb2->expr()->neq('mimetype', $qb2->expr()->literal($dirMimeTypeId))) - ->andWhere($qb2->expr()->like('path', $qb2->expr()->literal('files/%'))) - ->andWhere($this->getSizeLimitExpression($qb2)) + $query = $this->db->getQueryBuilder(); + $query->select('fc.fileid', 'fc.storage') + ->from('filecache', 'fc') + ->innerJoin('fc', 'files_antivirus', 'fa', $query->expr()->eq('fc.fileid', 'fa.fileid')) + ->andWhere($query->expr()->neq('mimetype', $query->createNamedParameter($dirMimeTypeId))) + ->andWhere($query->expr()->like('path', $query->expr()->literal('files/%'))) + ->andWhere($query->expr()->lt('check_time', $query->createNamedParameter($yesterday))) + ->andWhere($this->getSizeLimitExpression($query)) ->setMaxResults($this->getBatchSize() * 10); - $x = $qb2->getSQL(); - - return $qb2->execute(); + return $query->execute(); } protected function scanOneFile(File $file): void { |