mirror of
https://github.com/nextcloud/server.git
synced 2026-06-12 10:10:49 -04:00
Merge pull request #23861 from nextcloud/backport/23350/stable18
[stable18] Inidicate preview availability in share api responses
This commit is contained in:
commit
263dc717ac
6 changed files with 109 additions and 11 deletions
2
apps/files_sharing/js/dist/files_sharing.js
vendored
2
apps/files_sharing/js/dist/files_sharing.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -353,6 +353,7 @@
|
|||
id: share.file_source,
|
||||
icon: OC.MimeType.getIconUrl(share.mimetype),
|
||||
mimetype: share.mimetype,
|
||||
hasPreview: share.has_preview,
|
||||
tags: share.tags || []
|
||||
}
|
||||
if (share.item_type === 'folder') {
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ use OCP\Files\NotFoundException;
|
|||
use OCP\IConfig;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IL10N;
|
||||
use OCP\IPreview;
|
||||
use OCP\IRequest;
|
||||
use OCP\IServerContainer;
|
||||
use OCP\IURLGenerator;
|
||||
|
|
@ -97,6 +98,8 @@ class ShareAPIController extends OCSController {
|
|||
private $appManager;
|
||||
/** @var IServerContainer */
|
||||
private $serverContainer;
|
||||
/** @var IPreview */
|
||||
private $previewManager;
|
||||
|
||||
/**
|
||||
* Share20OCS constructor.
|
||||
|
|
@ -126,7 +129,8 @@ class ShareAPIController extends OCSController {
|
|||
IL10N $l10n,
|
||||
IConfig $config,
|
||||
IAppManager $appManager,
|
||||
IServerContainer $serverContainer
|
||||
IServerContainer $serverContainer,
|
||||
IPreview $previewManager
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
|
||||
|
|
@ -141,6 +145,7 @@ class ShareAPIController extends OCSController {
|
|||
$this->config = $config;
|
||||
$this->appManager = $appManager;
|
||||
$this->serverContainer = $serverContainer;
|
||||
$this->previewManager = $previewManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -201,6 +206,7 @@ class ShareAPIController extends OCSController {
|
|||
}
|
||||
|
||||
$result['mimetype'] = $node->getMimetype();
|
||||
$result['has_preview'] = $this->previewManager->isAvailable($node);
|
||||
$result['storage_id'] = $node->getStorage()->getId();
|
||||
$result['storage'] = $node->getStorage()->getCache()->getNumericStorageId();
|
||||
$result['item_source'] = $node->getId();
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ use OCP\AppFramework\OCS\OCSForbiddenException;
|
|||
use OCP\AppFramework\OCS\OCSNotFoundException;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\IPreview;
|
||||
use OCP\IRequest;
|
||||
use OCP\IServerContainer;
|
||||
use OCP\Share\IShare;
|
||||
|
|
@ -113,6 +114,7 @@ class ApiTest extends TestCase {
|
|||
$config = $this->createMock(IConfig::class);
|
||||
$appManager = $this->createMock(IAppManager::class);
|
||||
$serverContainer = $this->createMock(IServerContainer::class);
|
||||
$previewManager = $this->createMock(IPreview::class);
|
||||
|
||||
return new ShareAPIController(
|
||||
self::APP_NAME,
|
||||
|
|
@ -126,7 +128,8 @@ class ApiTest extends TestCase {
|
|||
$l,
|
||||
$config,
|
||||
$appManager,
|
||||
$serverContainer
|
||||
$serverContainer,
|
||||
$previewManager
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ use OCP\Files\Storage;
|
|||
use OCP\IConfig;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IL10N;
|
||||
use OCP\IPreview;
|
||||
use OCP\IRequest;
|
||||
use OCP\IServerContainer;
|
||||
use OCP\IURLGenerator;
|
||||
|
|
@ -104,6 +105,9 @@ class ShareAPIControllerTest extends TestCase {
|
|||
/** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $serverContainer;
|
||||
|
||||
/** @var IPreview|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $previewManager;
|
||||
|
||||
protected function setUp(): void {
|
||||
$this->shareManager = $this->createMock(IManager::class);
|
||||
$this->shareManager
|
||||
|
|
@ -128,6 +132,11 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->appManager = $this->createMock(IAppManager::class);
|
||||
$this->serverContainer = $this->createMock(IServerContainer::class);
|
||||
$this->previewManager = $this->createMock(IPreview::class);
|
||||
$this->previewManager->method('isAvailable')
|
||||
->willReturnCallback(function ($fileInfo) {
|
||||
return $fileInfo->getMimeType() === 'mimeWithPreview';
|
||||
});
|
||||
|
||||
$this->ocs = new ShareAPIController(
|
||||
$this->appName,
|
||||
|
|
@ -141,7 +150,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -162,7 +172,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
])->setMethods(['formatShare'])
|
||||
->getMock();
|
||||
}
|
||||
|
|
@ -585,6 +596,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'label' => '',
|
||||
'displayname_file_owner' => 'ownerDisplay',
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -633,6 +645,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'label' => '',
|
||||
'displayname_file_owner' => 'ownerDisplay',
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -688,6 +701,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'label' => 'first link share',
|
||||
'displayname_file_owner' => 'ownerDisplay',
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -715,7 +729,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
])->setMethods(['canAccessShare'])
|
||||
->getMock();
|
||||
|
||||
|
|
@ -1334,7 +1349,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
])->setMethods(['formatShare'])
|
||||
->getMock();
|
||||
|
||||
|
|
@ -1677,7 +1693,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
])->setMethods(['formatShare'])
|
||||
->getMock();
|
||||
|
||||
|
|
@ -1777,7 +1794,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
])->setMethods(['formatShare'])
|
||||
->getMock();
|
||||
|
||||
|
|
@ -2340,7 +2358,8 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$this->l,
|
||||
$this->config,
|
||||
$this->appManager,
|
||||
$this->serverContainer
|
||||
$this->serverContainer,
|
||||
$this->previewManager
|
||||
])->setMethods(['formatShare'])
|
||||
->getMock();
|
||||
|
||||
|
|
@ -3372,19 +3391,24 @@ class ShareAPIControllerTest extends TestCase {
|
|||
$file = $this->getMockBuilder(File::class)->getMock();
|
||||
$folder = $this->getMockBuilder(Folder::class)->getMock();
|
||||
$parent = $this->getMockBuilder(Folder::class)->getMock();
|
||||
$fileWithPreview = $this->getMockBuilder(File::class)->getMock();
|
||||
|
||||
$file->method('getMimeType')->willReturn('myMimeType');
|
||||
$folder->method('getMimeType')->willReturn('myFolderMimeType');
|
||||
$fileWithPreview->method('getMimeType')->willReturn('mimeWithPreview');
|
||||
|
||||
$file->method('getPath')->willReturn('file');
|
||||
$folder->method('getPath')->willReturn('folder');
|
||||
$fileWithPreview->method('getPath')->willReturn('fileWithPreview');
|
||||
|
||||
$parent->method('getId')->willReturn(1);
|
||||
$folder->method('getId')->willReturn(2);
|
||||
$file->method('getId')->willReturn(3);
|
||||
$fileWithPreview->method('getId')->willReturn(4);
|
||||
|
||||
$file->method('getParent')->willReturn($parent);
|
||||
$folder->method('getParent')->willReturn($parent);
|
||||
$fileWithPreview->method('getParent')->willReturn($parent);
|
||||
|
||||
$cache = $this->getMockBuilder('OCP\Files\Cache\ICache')->getMock();
|
||||
$cache->method('getNumericStorageId')->willReturn(100);
|
||||
|
|
@ -3394,6 +3418,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
|
||||
$file->method('getStorage')->willReturn($storage);
|
||||
$folder->method('getStorage')->willReturn($storage);
|
||||
$fileWithPreview->method('getStorage')->willReturn($storage);
|
||||
|
||||
$owner = $this->getMockBuilder(IUser::class)->getMock();
|
||||
$owner->method('getDisplayName')->willReturn('ownerDN');
|
||||
|
|
@ -3444,6 +3469,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'label' => null,
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3477,6 +3503,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'recipientDN',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3526,6 +3553,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'recipient',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3571,6 +3599,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'recipient',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => true,
|
||||
'can_delete' => true,
|
||||
|
|
@ -3618,6 +3647,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'recipientGroupDisplayName',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3663,6 +3693,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'recipientGroup2',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3714,6 +3745,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'mail_send' => 0,
|
||||
'url' => 'myLink',
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3766,6 +3798,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'mail_send' => 0,
|
||||
'url' => 'myLink',
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3811,6 +3844,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'foobar',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3859,6 +3893,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_avatar' => 'path/to/the/avatar',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3905,6 +3940,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_avatar' => '',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -3951,6 +3987,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_avatar' => '',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => false,
|
||||
'can_delete' => false,
|
||||
|
|
@ -4011,6 +4048,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'mail display name',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'password' => 'password',
|
||||
'send_password_by_talk' => false,
|
||||
'hide_download' => 0,
|
||||
|
|
@ -4059,6 +4097,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'mail display name',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myFolderMimeType',
|
||||
'has_preview' => false,
|
||||
'password' => 'password',
|
||||
'send_password_by_talk' => true,
|
||||
'hide_download' => 0,
|
||||
|
|
@ -4067,6 +4106,53 @@ class ShareAPIControllerTest extends TestCase {
|
|||
], $share, [], false
|
||||
];
|
||||
|
||||
// Preview is available
|
||||
$share = \OC::$server->getShareManager()->newShare();
|
||||
$share->setShareType(IShare::TYPE_USER)
|
||||
->setSharedWith('recipient')
|
||||
->setSharedBy('initiator')
|
||||
->setShareOwner('currentUser')
|
||||
->setPermissions(\OCP\Constants::PERMISSION_READ)
|
||||
->setNode($fileWithPreview)
|
||||
->setShareTime(new \DateTime('2000-01-01T00:01:02'))
|
||||
->setTarget('myTarget')
|
||||
->setNote('personal note')
|
||||
->setId(42);
|
||||
|
||||
$result[] = [
|
||||
[
|
||||
'id' => 42,
|
||||
'share_type' => IShare::TYPE_USER,
|
||||
'uid_owner' => 'initiator',
|
||||
'displayname_owner' => 'initiator',
|
||||
'permissions' => 1,
|
||||
'stime' => 946684862,
|
||||
'parent' => null,
|
||||
'expiration' => null,
|
||||
'token' => null,
|
||||
'uid_file_owner' => 'currentUser',
|
||||
'displayname_file_owner' => 'currentUser',
|
||||
'note' => 'personal note',
|
||||
'label' => null,
|
||||
'path' => 'fileWithPreview',
|
||||
'item_type' => 'file',
|
||||
'storage_id' => 'storageId',
|
||||
'storage' => 100,
|
||||
'item_source' => 4,
|
||||
'file_source' => 4,
|
||||
'file_parent' => 1,
|
||||
'file_target' => 'myTarget',
|
||||
'share_with' => 'recipient',
|
||||
'share_with_displayname' => 'recipient',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'mimeWithPreview',
|
||||
'has_preview' => true,
|
||||
'hide_download' => 0,
|
||||
'can_edit' => true,
|
||||
'can_delete' => true,
|
||||
], $share, [], false
|
||||
];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
|
@ -4203,6 +4289,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => '',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'label' => '',
|
||||
'can_edit' => false,
|
||||
|
|
@ -4248,6 +4335,7 @@ class ShareAPIControllerTest extends TestCase {
|
|||
'share_with_displayname' => 'recipientRoomName',
|
||||
'mail_send' => 0,
|
||||
'mimetype' => 'myMimeType',
|
||||
'has_preview' => false,
|
||||
'hide_download' => 0,
|
||||
'label' => '',
|
||||
'can_edit' => false,
|
||||
|
|
|
|||
Loading…
Reference in a new issue