mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
refactor(tags): move favorite event dispatching to tags.php
Signed-off-by: grnd-alt <salimbelakkaf@outlook.de>
This commit is contained in:
parent
2d02d83597
commit
8d953aeb8d
7 changed files with 34 additions and 46 deletions
|
|
@ -28,8 +28,6 @@ namespace OCA\DAV\Connector\Sabre;
|
|||
*
|
||||
*/
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Events\NodeAddedToFavorite;
|
||||
use OCP\Files\Events\NodeRemovedFromFavorite;
|
||||
use OCP\ITagManager;
|
||||
use OCP\ITags;
|
||||
use OCP\IUserSession;
|
||||
|
|
@ -260,10 +258,8 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin {
|
|||
$propPatch->handle(self::FAVORITE_PROPERTYNAME, function ($favState) use ($node, $path) {
|
||||
if ((int)$favState === 1 || $favState === 'true') {
|
||||
$this->getTagger()->tagAs($node->getId(), self::TAG_FAVORITE);
|
||||
$this->eventDispatcher->dispatchTyped(new NodeAddedToFavorite($this->userSession->getUser(), $node->getId(), $path));
|
||||
} else {
|
||||
$this->getTagger()->unTag($node->getId(), self::TAG_FAVORITE);
|
||||
$this->eventDispatcher->dispatchTyped(new NodeRemovedFromFavorite($this->userSession->getUser(), $node->getId(), $path));
|
||||
}
|
||||
|
||||
if (is_null($favState)) {
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ use OCP\AppFramework\Bootstrap\IBootstrap;
|
|||
use OCP\AppFramework\Bootstrap\IRegistrationContext;
|
||||
use OCP\Collaboration\Reference\RenderReferenceEvent;
|
||||
use OCP\Collaboration\Resources\IProviderManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Cache\CacheEntryRemovedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
|
||||
|
|
@ -100,7 +99,6 @@ class Application extends App implements IBootstrap {
|
|||
$c->get(IActivityManager::class),
|
||||
$c->get(ITagManager::class)->load(self::APP_ID),
|
||||
$server->getUserFolder(),
|
||||
$c->get(IEventDispatcher::class),
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,6 @@
|
|||
namespace OCA\Files\Service;
|
||||
|
||||
use OCP\Activity\IManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Events\NodeAddedToFavorite;
|
||||
use OCP\Files\Events\NodeRemovedFromFavorite;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\ITags;
|
||||
|
|
@ -26,7 +23,6 @@ class TagService {
|
|||
private IManager $activityManager,
|
||||
private ?ITags $tagger,
|
||||
private ?Folder $homeFolder,
|
||||
private IEventDispatcher $dispatcher,
|
||||
) {
|
||||
}
|
||||
|
||||
|
|
@ -58,16 +54,10 @@ class TagService {
|
|||
|
||||
$newTags = array_diff($tags, $currentTags);
|
||||
foreach ($newTags as $tag) {
|
||||
if ($tag === ITags::TAG_FAVORITE) {
|
||||
$this->dispatcher->dispatchTyped(new NodeAddedToFavorite($this->userSession->getUser(), $fileId, $path));
|
||||
}
|
||||
$this->tagger->tagAs($fileId, $tag);
|
||||
}
|
||||
$deletedTags = array_diff($currentTags, $tags);
|
||||
foreach ($deletedTags as $tag) {
|
||||
if ($tag === ITags::TAG_FAVORITE) {
|
||||
$this->dispatcher->dispatchTyped(new NodeRemovedFromFavorite($this->userSession->getUser(), $fileId, $path));
|
||||
}
|
||||
$this->tagger->unTag($fileId, $tag);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ class TagServiceTest extends \Test\TestCase {
|
|||
$this->activityManager,
|
||||
$this->tagger,
|
||||
$this->root,
|
||||
$this->dispatcher,
|
||||
])
|
||||
->setMethods($methods)
|
||||
->getMock();
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ use OC\Tagging\TagMapper;
|
|||
use OCP\Db\Exception as DBException;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\ITagManager;
|
||||
|
|
@ -23,16 +24,14 @@ use Psr\Log\LoggerInterface;
|
|||
* @template-implements IEventListener<UserDeletedEvent>
|
||||
*/
|
||||
class TagManager implements ITagManager, IEventListener {
|
||||
private TagMapper $mapper;
|
||||
private IUserSession $userSession;
|
||||
private IDBConnection $connection;
|
||||
private LoggerInterface $logger;
|
||||
|
||||
public function __construct(TagMapper $mapper, IUserSession $userSession, IDBConnection $connection, LoggerInterface $logger) {
|
||||
$this->mapper = $mapper;
|
||||
$this->userSession = $userSession;
|
||||
$this->connection = $connection;
|
||||
$this->logger = $logger;
|
||||
public function __construct(
|
||||
private TagMapper $mapper,
|
||||
private IUserSession $userSession,
|
||||
private IDBConnection $connection,
|
||||
private LoggerInterface $logger,
|
||||
private IEventDispatcher $dispatcher,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -57,7 +56,7 @@ class TagManager implements ITagManager, IEventListener {
|
|||
}
|
||||
$userId = $this->userSession->getUser()->getUId();
|
||||
}
|
||||
return new Tags($this->mapper, $userId, $type, $this->logger, $this->connection, $defaultTags);
|
||||
return new Tags($this->mapper, $userId, $type, $this->logger, $this->connection, $this->dispatcher, $this->userSession, $defaultTags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -11,8 +11,12 @@ use OC\Tagging\Tag;
|
|||
use OC\Tagging\TagMapper;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Events\NodeAddedToFavorite;
|
||||
use OCP\Files\Events\NodeRemovedFromFavorite;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\ITags;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Share_Backend;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
|
|
@ -21,10 +25,6 @@ class Tags implements ITags {
|
|||
* Used for storing objectid/categoryname pairs while rescanning.
|
||||
*/
|
||||
private static array $relations = [];
|
||||
private string $type;
|
||||
private string $user;
|
||||
private IDBConnection $db;
|
||||
private LoggerInterface $logger;
|
||||
private array $tags = [];
|
||||
|
||||
/**
|
||||
|
|
@ -38,11 +38,6 @@ class Tags implements ITags {
|
|||
*/
|
||||
private array $owners = [];
|
||||
|
||||
/**
|
||||
* The Mapper we are using to communicate our Tag objects to the database.
|
||||
*/
|
||||
private TagMapper $mapper;
|
||||
|
||||
/**
|
||||
* The sharing backend for objects of $this->type. Required if
|
||||
* $this->includeShared === true to determine ownership of items.
|
||||
|
|
@ -62,14 +57,18 @@ class Tags implements ITags {
|
|||
*
|
||||
* since 20.0.0 $includeShared isn't used anymore
|
||||
*/
|
||||
public function __construct(TagMapper $mapper, string $user, string $type, LoggerInterface $logger, IDBConnection $connection, array $defaultTags = []) {
|
||||
$this->mapper = $mapper;
|
||||
$this->user = $user;
|
||||
$this->type = $type;
|
||||
public function __construct(
|
||||
private TagMapper $mapper,
|
||||
private string $user,
|
||||
private string $type,
|
||||
private LoggerInterface $logger,
|
||||
private IDBConnection $db,
|
||||
private IEventDispatcher $dispatcher,
|
||||
private IUserSession $userSession,
|
||||
array $defaultTags = [],
|
||||
) {
|
||||
$this->owners = [$this->user];
|
||||
$this->tags = $this->mapper->loadTags($this->owners, $this->type);
|
||||
$this->db = $connection;
|
||||
$this->logger = $logger;
|
||||
|
||||
if (count($defaultTags) > 0 && count($this->tags) === 0) {
|
||||
$this->addMultiple($defaultTags, true);
|
||||
|
|
@ -502,7 +501,7 @@ class Tags implements ITags {
|
|||
* @param string $tag The id or name of the tag
|
||||
* @return boolean Returns false on error.
|
||||
*/
|
||||
public function tagAs($objid, $tag) {
|
||||
public function tagAs($objid, $tag, string $path = '') {
|
||||
if (is_string($tag) && !is_numeric($tag)) {
|
||||
$tag = trim($tag);
|
||||
if ($tag === '') {
|
||||
|
|
@ -532,6 +531,9 @@ class Tags implements ITags {
|
|||
]);
|
||||
return false;
|
||||
}
|
||||
if ($tag === ITags::TAG_FAVORITE) {
|
||||
$this->dispatcher->dispatchTyped(new NodeAddedToFavorite($this->userSession->getUser(), $objid, $path));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -542,7 +544,7 @@ class Tags implements ITags {
|
|||
* @param string $tag The id or name of the tag
|
||||
* @return boolean
|
||||
*/
|
||||
public function unTag($objid, $tag) {
|
||||
public function unTag($objid, $tag, string $path = '') {
|
||||
if (is_string($tag) && !is_numeric($tag)) {
|
||||
$tag = trim($tag);
|
||||
if ($tag === '') {
|
||||
|
|
@ -569,6 +571,9 @@ class Tags implements ITags {
|
|||
]);
|
||||
return false;
|
||||
}
|
||||
if ($tag === ITags::TAG_FAVORITE) {
|
||||
$this->dispatcher->dispatchTyped(new NodeRemovedFromFavorite($this->userSession->getUser(), $objid, $path));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace Test;
|
||||
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserSession;
|
||||
|
|
@ -48,7 +49,7 @@ class TagsTest extends \Test\TestCase {
|
|||
|
||||
$this->objectType = $this->getUniqueID('type_');
|
||||
$this->tagMapper = new \OC\Tagging\TagMapper(\OC::$server->get(IDBConnection::class));
|
||||
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession, \OC::$server->get(IDBConnection::class), \OC::$server->get(LoggerInterface::class));
|
||||
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession, \OC::$server->get(IDBConnection::class), \OC::$server->get(LoggerInterface::class), \OC::$server->get(IEventDispatcher::class));
|
||||
}
|
||||
|
||||
protected function tearDown(): void {
|
||||
|
|
@ -65,7 +66,7 @@ class TagsTest extends \Test\TestCase {
|
|||
->expects($this->any())
|
||||
->method('getUser')
|
||||
->willReturn(null);
|
||||
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession, \OC::$server->getDatabaseConnection(), \OC::$server->get(LoggerInterface::class));
|
||||
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession, \OC::$server->getDatabaseConnection(), \OC::$server->get(LoggerInterface::class), \OC::$server->get(IEventDispatcher::class));
|
||||
$this->assertNull($this->tagMgr->load($this->objectType));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue