Catch exceptions and use as many results as possible

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2017-04-11 14:16:17 +02:00 committed by Roeland Jago Douma
parent 7d416ac1dd
commit 29f2088a7b
No known key found for this signature in database
GPG Key ID: F941078878347C0C
1 changed files with 58 additions and 23 deletions

View File

@ -22,7 +22,10 @@
*/ */
namespace OC\Share20; namespace OC\Share20;
use OCP\Files\InvalidPathException;
use OCP\Files\Node; use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\Share\IManager; use OCP\Share\IManager;
use OCP\Share\IShareHelper; use OCP\Share\IShareHelper;
@ -62,7 +65,11 @@ class ShareHelper implements IShareHelper {
* @return array * @return array
*/ */
protected function getPathsForUsers(Node $node, array $users) { protected function getPathsForUsers(Node $node, array $users) {
$byId = $results = []; /** @var array[] $byId */
$byId = [];
/** @var array[] $results */
$results = [];
foreach ($users as $uid => $info) { foreach ($users as $uid => $info) {
if (!isset($byId[$info['node_id']])) { if (!isset($byId[$info['node_id']])) {
$byId[$info['node_id']] = []; $byId[$info['node_id']] = [];
@ -70,11 +77,17 @@ class ShareHelper implements IShareHelper {
$byId[$info['node_id']][$uid] = $info['node_path']; $byId[$info['node_id']][$uid] = $info['node_path'];
} }
if (isset($byId[$node->getId()])) { try {
foreach ($byId[$node->getId()] as $uid => $path) { if (isset($byId[$node->getId()])) {
$results[$uid] = $path; foreach ($byId[$node->getId()] as $uid => $path) {
$results[$uid] = $path;
}
unset($byId[$node->getId()]);
} }
unset($byId[$node->getId()]); } catch (NotFoundException $e) {
return $results;
} catch (InvalidPathException $e) {
return $results;
} }
if (empty($byId)) { if (empty($byId)) {
@ -84,17 +97,25 @@ class ShareHelper implements IShareHelper {
$item = $node; $item = $node;
$appendix = '/' . $node->getName(); $appendix = '/' . $node->getName();
while (!empty($byId)) { while (!empty($byId)) {
/** @var Node $item */ try {
$item = $item->getParent(); /** @var Node $item */
$item = $item->getParent();
if (!empty($byId[$item->getId()])) { if (!empty($byId[$item->getId()])) {
foreach ($byId[$item->getId()] as $uid => $path) { foreach ($byId[$item->getId()] as $uid => $path) {
$results[$uid] = $path . $appendix; $results[$uid] = $path . $appendix;
}
unset($byId[$item->getId()]);
} }
unset($byId[$item->getId()]);
}
$appendix = '/' . $item->getName() . $appendix; $appendix = '/' . $item->getName() . $appendix;
} catch (NotFoundException $e) {
return $results;
} catch (InvalidPathException $e) {
return $results;
} catch (NotPermittedException $e) {
return $results;
}
} }
return $results; return $results;
@ -106,7 +127,11 @@ class ShareHelper implements IShareHelper {
* @return array * @return array
*/ */
protected function getPathsForRemotes(Node $node, array $remotes) { protected function getPathsForRemotes(Node $node, array $remotes) {
$byId = $results = []; /** @var array[] $byId */
$byId = [];
/** @var array[] $results */
$results = [];
foreach ($remotes as $cloudId => $info) { foreach ($remotes as $cloudId => $info) {
if (!isset($byId[$info['node_id']])) { if (!isset($byId[$info['node_id']])) {
$byId[$info['node_id']] = []; $byId[$info['node_id']] = [];
@ -116,17 +141,27 @@ class ShareHelper implements IShareHelper {
$item = $node; $item = $node;
while (!empty($byId)) { while (!empty($byId)) {
if (!empty($byId[$item->getId()])) { try {
$path = $this->getMountedPath($item); if (!empty($byId[$item->getId()])) {
foreach ($byId[$item->getId()] as $uid => $token) { $path = $this->getMountedPath($item);
$results[$uid] = [ foreach ($byId[$item->getId()] as $uid => $token) {
'node_path' => $path, $results[$uid] = [
'token' => $token, 'node_path' => $path,
]; 'token' => $token,
];
}
unset($byId[$item->getId()]);
} }
unset($byId[$item->getId()]);
/** @var Node $item */
$item = $item->getParent();
} catch (NotFoundException $e) {
return $results;
} catch (InvalidPathException $e) {
return $results;
} catch (NotPermittedException $e) {
return $results;
} }
$item = $item->getParent();
} }
return $results; return $results;