|
|
@@ -28,9 +28,11 @@ |
|
|
|
|
|
|
|
namespace OCA\Files\Command; |
|
|
|
|
|
|
|
use Doctrine\DBAL\Connection; |
|
|
|
use OC\Core\Command\Base; |
|
|
|
use OC\ForbiddenException; |
|
|
|
use OCP\Files\StorageNotAvailableException; |
|
|
|
use OCP\IDBConnection; |
|
|
|
use OCP\IUserManager; |
|
|
|
use Symfony\Component\Console\Input\InputArgument; |
|
|
|
use Symfony\Component\Console\Input\InputInterface; |
|
|
@@ -106,7 +108,8 @@ class Scan extends Base { |
|
|
|
} |
|
|
|
|
|
|
|
protected function scanFiles($user, $path, $verbose, OutputInterface $output, $backgroundScan = false) { |
|
|
|
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger()); |
|
|
|
$connection = $this->reconnectToDatabase($output); |
|
|
|
$scanner = new \OC\Files\Utils\Scanner($user, $connection, \OC::$server->getLogger()); |
|
|
|
# check on each file/folder if there was a user interrupt (ctrl-c) and throw an exception |
|
|
|
# printout and count |
|
|
|
if ($verbose) { |
|
|
@@ -318,4 +321,26 @@ class Scan extends Base { |
|
|
|
return date('H:i:s', $secs); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @return \OCP\IDBConnection |
|
|
|
*/ |
|
|
|
protected function reconnectToDatabase(OutputInterface $output) { |
|
|
|
/** @var Connection | IDBConnection $connection*/ |
|
|
|
$connection = \OC::$server->getDatabaseConnection(); |
|
|
|
try { |
|
|
|
$connection->close(); |
|
|
|
} catch (\Exception $ex) { |
|
|
|
$output->writeln("<info>Error while disconnecting from database: {$ex->getMessage()}</info>"); |
|
|
|
} |
|
|
|
while (!$connection->isConnected()) { |
|
|
|
try { |
|
|
|
$connection->connect(); |
|
|
|
} catch (\Exception $ex) { |
|
|
|
$output->writeln("<info>Error while re-connecting to database: {$ex->getMessage()}</info>"); |
|
|
|
sleep(60); |
|
|
|
} |
|
|
|
} |
|
|
|
return $connection; |
|
|
|
} |
|
|
|
|
|
|
|
} |