Display share status info in favorite list
Returns the shareTypes share status info to the favorites file list.
This commit is contained in:
parent
f778e48ee5
commit
950530b162
|
@ -40,8 +40,10 @@ class Application extends App {
|
||||||
return new ApiController(
|
return new ApiController(
|
||||||
$c->query('AppName'),
|
$c->query('AppName'),
|
||||||
$c->query('Request'),
|
$c->query('Request'),
|
||||||
|
$server->getUserSession(),
|
||||||
$c->query('TagService'),
|
$c->query('TagService'),
|
||||||
$server->getPreviewManager()
|
$server->getPreviewManager(),
|
||||||
|
$server->getShareManager()
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,10 @@ use OCP\AppFramework\Http\DataResponse;
|
||||||
use OCP\AppFramework\Http\DataDisplayResponse;
|
use OCP\AppFramework\Http\DataDisplayResponse;
|
||||||
use OCA\Files\Service\TagService;
|
use OCA\Files\Service\TagService;
|
||||||
use OCP\IPreview;
|
use OCP\IPreview;
|
||||||
|
use OCP\Share\IManager;
|
||||||
|
use OCP\Files\FileInfo;
|
||||||
|
use OCP\Files\Node;
|
||||||
|
use OCP\IUserSession;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ApiController
|
* Class ApiController
|
||||||
|
@ -43,8 +47,12 @@ use OCP\IPreview;
|
||||||
class ApiController extends Controller {
|
class ApiController extends Controller {
|
||||||
/** @var TagService */
|
/** @var TagService */
|
||||||
private $tagService;
|
private $tagService;
|
||||||
|
/** @var IManager **/
|
||||||
|
private $shareManager;
|
||||||
/** @var IPreview */
|
/** @var IPreview */
|
||||||
private $previewManager;
|
private $previewManager;
|
||||||
|
/** IUserSession */
|
||||||
|
private $userSession;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $appName
|
* @param string $appName
|
||||||
|
@ -54,11 +62,15 @@ class ApiController extends Controller {
|
||||||
*/
|
*/
|
||||||
public function __construct($appName,
|
public function __construct($appName,
|
||||||
IRequest $request,
|
IRequest $request,
|
||||||
|
IUserSession $userSession,
|
||||||
TagService $tagService,
|
TagService $tagService,
|
||||||
IPreview $previewManager){
|
IPreview $previewManager,
|
||||||
|
IManager $shareManager) {
|
||||||
parent::__construct($appName, $request);
|
parent::__construct($appName, $request);
|
||||||
|
$this->userSession = $userSession;
|
||||||
$this->tagService = $tagService;
|
$this->tagService = $tagService;
|
||||||
$this->previewManager = $previewManager;
|
$this->previewManager = $previewManager;
|
||||||
|
$this->shareManager = $shareManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,8 +144,10 @@ class ApiController extends Controller {
|
||||||
*/
|
*/
|
||||||
public function getFilesByTag($tagName) {
|
public function getFilesByTag($tagName) {
|
||||||
$files = array();
|
$files = array();
|
||||||
$fileInfos = $this->tagService->getFilesByTag($tagName);
|
$nodes = $this->tagService->getFilesByTag($tagName);
|
||||||
foreach ($fileInfos as &$fileInfo) {
|
foreach ($nodes as &$node) {
|
||||||
|
$shareTypes = $this->getShareTypes($node);
|
||||||
|
$fileInfo = $node->getFileInfo();
|
||||||
$file = \OCA\Files\Helper::formatFileInfo($fileInfo);
|
$file = \OCA\Files\Helper::formatFileInfo($fileInfo);
|
||||||
$parts = explode('/', dirname($fileInfo->getPath()), 4);
|
$parts = explode('/', dirname($fileInfo->getPath()), 4);
|
||||||
if(isset($parts[3])) {
|
if(isset($parts[3])) {
|
||||||
|
@ -142,9 +156,43 @@ class ApiController extends Controller {
|
||||||
$file['path'] = '/';
|
$file['path'] = '/';
|
||||||
}
|
}
|
||||||
$file['tags'] = [$tagName];
|
$file['tags'] = [$tagName];
|
||||||
|
if (!empty($shareTypes)) {
|
||||||
|
$file['shareTypes'] = $shareTypes;
|
||||||
|
}
|
||||||
$files[] = $file;
|
$files[] = $file;
|
||||||
}
|
}
|
||||||
return new DataResponse(['files' => $files]);
|
return new DataResponse(['files' => $files]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a list of share types for outgoing shares
|
||||||
|
*
|
||||||
|
* @param Node $node file node
|
||||||
|
*
|
||||||
|
* @return int[] array of share types
|
||||||
|
*/
|
||||||
|
private function getShareTypes(Node $node) {
|
||||||
|
$userId = $this->userSession->getUser()->getUID();
|
||||||
|
$shareTypes = [];
|
||||||
|
$requestedShareTypes = [
|
||||||
|
\OCP\Share::SHARE_TYPE_USER,
|
||||||
|
\OCP\Share::SHARE_TYPE_GROUP,
|
||||||
|
\OCP\Share::SHARE_TYPE_LINK
|
||||||
|
];
|
||||||
|
foreach ($requestedShareTypes as $requestedShareType) {
|
||||||
|
// one of each type is enough to find out about the types
|
||||||
|
$shares = $this->shareManager->getSharesBy(
|
||||||
|
$userId,
|
||||||
|
$requestedShareType,
|
||||||
|
$node,
|
||||||
|
false,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
if (!empty($shares)) {
|
||||||
|
$shareTypes[] = $requestedShareType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $shareTypes;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
namespace OCA\Files\Service;
|
namespace OCA\Files\Service;
|
||||||
|
|
||||||
use OC\Files\FileInfo;
|
use OC\Files\FileInfo;
|
||||||
|
use OCP\Files\Node;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service class to manage tags on files.
|
* Service class to manage tags on files.
|
||||||
|
@ -93,7 +94,7 @@ class TagService {
|
||||||
* Get all files for the given tag
|
* Get all files for the given tag
|
||||||
*
|
*
|
||||||
* @param string $tagName tag name to filter by
|
* @param string $tagName tag name to filter by
|
||||||
* @return FileInfo[] list of matching files
|
* @return Node[] list of matching files
|
||||||
* @throws \Exception if the tag does not exist
|
* @throws \Exception if the tag does not exist
|
||||||
*/
|
*/
|
||||||
public function getFilesByTag($tagName) {
|
public function getFilesByTag($tagName) {
|
||||||
|
@ -103,15 +104,11 @@ class TagService {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$fileInfos = [];
|
$allNodes = [];
|
||||||
foreach ($fileIds as $fileId) {
|
foreach ($fileIds as $fileId) {
|
||||||
$nodes = $this->homeFolder->getById((int) $fileId);
|
$allNodes = array_merge($allNodes, $this->homeFolder->getById((int) $fileId));
|
||||||
foreach ($nodes as $node) {
|
|
||||||
/** @var \OC\Files\Node\Node $node */
|
|
||||||
$fileInfos[] = $node->getFileInfo();
|
|
||||||
}
|
}
|
||||||
}
|
return $allNodes;
|
||||||
return $fileInfos;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,14 +51,27 @@ class ApiControllerTest extends TestCase {
|
||||||
private $preview;
|
private $preview;
|
||||||
/** @var ApiController */
|
/** @var ApiController */
|
||||||
private $apiController;
|
private $apiController;
|
||||||
|
/** @var \OCP\Share\IManager */
|
||||||
|
private $shareManager;
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
$this->request = $this->getMockBuilder('\OCP\IRequest')
|
$this->request = $this->getMockBuilder('\OCP\IRequest')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
$user = $this->getMock('\OCP\IUser');
|
||||||
|
$user->expects($this->any())
|
||||||
|
->method('getUID')
|
||||||
|
->will($this->returnValue('user1'));
|
||||||
|
$userSession = $this->getMock('\OCP\IUserSession');
|
||||||
|
$userSession->expects($this->any())
|
||||||
|
->method('getUser')
|
||||||
|
->will($this->returnValue($user));
|
||||||
$this->tagService = $this->getMockBuilder('\OCA\Files\Service\TagService')
|
$this->tagService = $this->getMockBuilder('\OCA\Files\Service\TagService')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
$this->shareManager = $this->getMockBuilder('\OCP\Share\IManager')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
$this->preview = $this->getMockBuilder('\OCP\IPreview')
|
$this->preview = $this->getMockBuilder('\OCP\IPreview')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
@ -66,8 +79,10 @@ class ApiControllerTest extends TestCase {
|
||||||
$this->apiController = new ApiController(
|
$this->apiController = new ApiController(
|
||||||
$this->appName,
|
$this->appName,
|
||||||
$this->request,
|
$this->request,
|
||||||
|
$userSession,
|
||||||
$this->tagService,
|
$this->tagService,
|
||||||
$this->preview
|
$this->preview,
|
||||||
|
$this->shareManager
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,10 +116,32 @@ class ApiControllerTest extends TestCase {
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock()
|
->getMock()
|
||||||
);
|
);
|
||||||
|
$node = $this->getMockBuilder('\OC\Files\Node\File')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$node->expects($this->once())
|
||||||
|
->method('getFileInfo')
|
||||||
|
->will($this->returnValue($fileInfo));
|
||||||
$this->tagService->expects($this->once())
|
$this->tagService->expects($this->once())
|
||||||
->method('getFilesByTag')
|
->method('getFilesByTag')
|
||||||
->with($this->equalTo([$tagName]))
|
->with($this->equalTo([$tagName]))
|
||||||
->will($this->returnValue([$fileInfo]));
|
->will($this->returnValue([$node]));
|
||||||
|
|
||||||
|
$this->shareManager->expects($this->any())
|
||||||
|
->method('getSharesBy')
|
||||||
|
->with(
|
||||||
|
$this->equalTo('user1'),
|
||||||
|
$this->anything(),
|
||||||
|
$node,
|
||||||
|
$this->equalTo(false),
|
||||||
|
$this->equalTo(1)
|
||||||
|
)
|
||||||
|
->will($this->returnCallback(function($userId, $shareType) {
|
||||||
|
if ($shareType === \OCP\Share::SHARE_TYPE_USER || $shareType === \OCP\Share::SHARE_TYPE_LINK) {
|
||||||
|
return ['dummy_share'];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}));
|
||||||
|
|
||||||
$expected = new DataResponse([
|
$expected = new DataResponse([
|
||||||
'files' => [
|
'files' => [
|
||||||
|
@ -124,6 +161,7 @@ class ApiControllerTest extends TestCase {
|
||||||
'MyTagName'
|
'MyTagName'
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
'shareTypes' => [\OCP\Share::SHARE_TYPE_USER, \OCP\Share::SHARE_TYPE_LINK]
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
@ -166,10 +204,22 @@ class ApiControllerTest extends TestCase {
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock()
|
->getMock()
|
||||||
);
|
);
|
||||||
|
$node1 = $this->getMockBuilder('\OC\Files\Node\File')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$node1->expects($this->once())
|
||||||
|
->method('getFileInfo')
|
||||||
|
->will($this->returnValue($fileInfo1));
|
||||||
|
$node2 = $this->getMockBuilder('\OC\Files\Node\File')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$node2->expects($this->once())
|
||||||
|
->method('getFileInfo')
|
||||||
|
->will($this->returnValue($fileInfo2));
|
||||||
$this->tagService->expects($this->once())
|
$this->tagService->expects($this->once())
|
||||||
->method('getFilesByTag')
|
->method('getFilesByTag')
|
||||||
->with($this->equalTo([$tagName]))
|
->with($this->equalTo([$tagName]))
|
||||||
->will($this->returnValue([$fileInfo1, $fileInfo2]));
|
->will($this->returnValue([$node1, $node2]));
|
||||||
|
|
||||||
$expected = new DataResponse([
|
$expected = new DataResponse([
|
||||||
'files' => [
|
'files' => [
|
||||||
|
|
Loading…
Reference in New Issue