Commit 1a262631 authored by Joas Schilling's avatar Joas Schilling
Browse files

Do not walk over the users directory, but over the list of tagged objects

Way quicker
parent 093efa45
......@@ -48,7 +48,7 @@ class TagService {
* @param string $path path
* @param array $tags array of tags
* @return array list of tags
* @throws \OCP\NotFoundException if the file does not exist
* @throws \OCP\Files\NotFoundException if the file does not exist
*/
public function updateFileTags($path, $tags) {
$fileId = $this->homeFolder->get($path)->getId();
......@@ -74,30 +74,27 @@ class TagService {
}
/**
* Updates the tags of the specified file path.
* The passed tags are absolute, which means they will
* replace the actual tag selection.
* Get all files for the given tag
*
* @param array $tagName tag name to filter by
* @return FileInfo[] list of matching files
* @throws \Exception if the tag does not exist
*/
public function getFilesByTag($tagName) {
$nodes = $this->homeFolder->searchByTag(
$tagName, $this->userSession->getUser()->getUId()
);
try {
$fileIds = $this->tagger->getIdsForTag($tagName);
} catch (\Exception $e) {
return [];
}
$fileInfos = [];
foreach ($nodes as $node) {
try {
foreach ($fileIds as $fileId) {
$nodes = $this->homeFolder->getById((int) $fileId);
foreach ($nodes as $node) {
/** @var \OC\Files\Node\Node $node */
$fileInfos[] = $node->getFileInfo();
} catch (\Exception $e) {
// FIXME Should notify the user, when this happens
// Can not get FileInfo, maybe the connection to the external
// storage is interrupted.
}
}
return $fileInfos;
}
}
......
......@@ -34,8 +34,8 @@
namespace OC;
use \OC\Tagging\Tag,
\OC\Tagging\TagMapper;
use \OC\Tagging\Tag;
use \OC\Tagging\TagMapper;
class Tags implements \OCP\ITags {
......@@ -248,6 +248,7 @@ class Tags implements \OCP\ITags {
*
* @param string $tag Tag id or name.
* @return array|false An array of object ids or false on error.
* @throws \Exception
*/
public function getIdsForTag($tag) {
$result = null;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment