mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 17:23:59 -04:00
feat: specify media type via url path: systemtags-current/$mediaType
- only the media part of the mime type can be search, but not the full mime type. It can be added, should it become necessary. - thus fixes previously hardcoded selector for image/ types - also fixes a return type hint - adds a return type hint Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
2ea872d156
commit
c0dbde5fba
3 changed files with 28 additions and 4 deletions
|
|
@ -31,21 +31,34 @@ use OCP\Files\IRootFolder;
|
|||
use OCP\IUserSession;
|
||||
use OCP\SystemTag\ISystemTagManager;
|
||||
use Sabre\DAV\Exception\Forbidden;
|
||||
use Sabre\DAV\Exception\NotFound;
|
||||
|
||||
class SystemTagsInUseCollection extends \Sabre\DAV\SimpleCollection {
|
||||
protected IUserSession $userSession;
|
||||
protected IRootFolder $rootFolder;
|
||||
protected string $mediaType;
|
||||
|
||||
public function __construct(IUserSession $userSession, IRootFolder $rootFolder) {
|
||||
public function __construct(IUserSession $userSession, IRootFolder $rootFolder, string $mediaType = '') {
|
||||
$this->userSession = $userSession;
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->mediaType = $mediaType;
|
||||
$this->name = 'systemtags-current';
|
||||
if ($this->mediaType != '') {
|
||||
$this->name .= '/' . $this->mediaType;
|
||||
}
|
||||
}
|
||||
|
||||
public function setName($name): void {
|
||||
throw new Forbidden('Permission denied to rename this collection');
|
||||
}
|
||||
|
||||
public function getChild($name) {
|
||||
if ($this->mediaType !== '') {
|
||||
throw new NotFound('Invalid media type');
|
||||
}
|
||||
return new self($this->userSession, $this->rootFolder, $name);
|
||||
}
|
||||
|
||||
public function getChildren() {
|
||||
$user = $this->userSession->getUser();
|
||||
if ($user === null) {
|
||||
|
|
@ -53,7 +66,7 @@ class SystemTagsInUseCollection extends \Sabre\DAV\SimpleCollection {
|
|||
}
|
||||
|
||||
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
|
||||
$result = $userFolder->getSystemTags('image');
|
||||
$result = $userFolder->getSystemTags($this->mediaType);
|
||||
$children = [];
|
||||
foreach ($result as $tagData) {
|
||||
$tag = new SystemTag((string)$tagData['id'], $tagData['name'], (bool)$tagData['visibility'], (bool)$tagData['editable']);
|
||||
|
|
|
|||
|
|
@ -97,6 +97,10 @@ class QuerySearchHelper {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array<array-key, array{id: int, name: string, visibility: int, editable: int, ref_file_id: int, number_files: int}>
|
||||
*/
|
||||
public function findUsedTagsInCaches(ISearchQuery $searchQuery, array $caches): array {
|
||||
$query = $this->getQueryBuilder();
|
||||
$query->selectTagUsage();
|
||||
|
|
|
|||
|
|
@ -337,10 +337,17 @@ class Folder extends Node implements \OCP\Files\Folder {
|
|||
}
|
||||
|
||||
/**
|
||||
* @return Node[]
|
||||
*
|
||||
* @return array<array-key, array{id: int, name: string, visibility: int, editable: int, ref_file_id: int, number_files: int}>
|
||||
*/
|
||||
public function getSystemTags(string $mediaType, int $limit = 0, int $offset = 0): array {
|
||||
$query = $this->queryFromOperator(new SearchComparison(ISearchComparison::COMPARE_LIKE, 'mimetype', $mediaType . '/%'), null, $limit, $offset);
|
||||
// Currently query has to have exactly one search condition. If no media type is provided,
|
||||
// we fall back to the presence of a systemtag.
|
||||
if (empty($mediaType)) {
|
||||
$query = $this->queryFromOperator(new SearchComparison(ISearchComparison::COMPARE_LIKE, 'systemtag', '%'), null, $limit, $offset);
|
||||
} else {
|
||||
$query = $this->queryFromOperator(new SearchComparison(ISearchComparison::COMPARE_LIKE, 'mimetype', $mediaType . '/%'), null, $limit, $offset);
|
||||
}
|
||||
[$caches, ] = $this->getCachesAndMountpointsForSearch();
|
||||
/** @var QuerySearchHelper $searchHelper */
|
||||
$searchHelper = \OCP\Server::get(QuerySearchHelper::class);
|
||||
|
|
|
|||
Loading…
Reference in a new issue