Merge pull request #5616 from nextcloud/feature/1576/allow-to-specify-meta-data-on-a-share

Allow to specify meta-data for sharing
This commit is contained in:
Joas Schilling 2021-05-31 16:44:09 +02:00 коммит произвёл GitHub
Родитель cc98dbdb6d 61aa4e33b5
Коммит 6e995e6a2b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 38 добавлений и 12 удалений

Просмотреть файл

@ -131,6 +131,28 @@ See [OCP\RichObjectStrings\Definitions](https://github.com/nextcloud/server/blob
- Data:
The full message array of the new message, as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation)
## Share a file to the chat
* Method: `POST`
* Endpoint: `ocs/v2.php/apps/files_sharing/api/v1/shares`
* Data:
field | type | Description
---|---|---
`shareType` | int | `10` means share to a conversation
`shareWith` | string | The token of the conversation to share the file to
`path` | string | The file path inside the user's root to share
`referenceId` | string | A reference string to be able to identify the generated chat message again in a "get messages" request, should be a random sha256 (only available with `chat-reference-id` capability)
`talkMetaData` | string | JSON encoded array of the meta data
* `talkMetaData` array:
field | type | Description
---|---|---
`messageType` | string | A message type to show the message in different styles. Currently known: `voice-message` and `comment`
* Response: [See official OCS Share API docs](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-share-api.html?highlight=sharing#create-a-new-share)
## Deleting a chat message
* Required capability: `delete-messages`

Просмотреть файл

@ -31,6 +31,7 @@ use OCA\Talk\Participant;
use OCA\Talk\Room;
use OCA\Talk\Share\RoomShareProvider;
use OCP\Comments\IComment;
use OCP\Files\InvalidPathException;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
@ -39,6 +40,7 @@ use OCP\IPreview as IPreviewManager;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
use OCP\Share\Exceptions\ShareNotFound;
class SystemMessage {
@ -324,7 +326,12 @@ class SystemMessage {
try {
$parsedParameters['file'] = $this->getFileFromShare($participant, $parameters['share']);
$parsedMessage = '{file}';
$metaData = $parameters['metaData'] ?? [];
if (isset($metaData['messageType']) && $metaData['messageType'] === 'voice-message') {
$chatMessage->setMessageType('voice-message');
} else {
$chatMessage->setMessageType('comment');
}
} catch (\Exception $e) {
$parsedMessage = $this->l->t('{actor} shared a file which is no longer available');
if ($currentUserIsActor) {
@ -423,9 +430,9 @@ class SystemMessage {
* @param Participant $participant
* @param string $shareId
* @return array
* @throws \OCP\Files\InvalidPathException
* @throws \OCP\Files\NotFoundException
* @throws \OCP\Share\Exceptions\ShareNotFound
* @throws InvalidPathException
* @throws NotFoundException
* @throws ShareNotFound
*/
protected function getFileFromShare(Participant $participant, string $shareId): array {
$share = $this->shareProvider->getShareById($shareId);

Просмотреть файл

@ -312,7 +312,10 @@ class Listener {
$manager = \OC::$server->query(Manager::class);
$room = $manager->getRoomByToken($share->getSharedWith());
$listener->sendSystemMessage($room, 'file_shared', ['share' => $share->getId()]);
$metaData = \OC::$server->getRequest()->getParam('talkMetaData') ?? '';
$metaData = json_decode($metaData, true);
$metaData = is_array($metaData) ? $metaData : [];
$listener->sendSystemMessage($room, 'file_shared', ['share' => $share->getId(), 'metaData' => $metaData]);
};
/**
* @psalm-suppress UndefinedClass

Просмотреть файл

@ -29,7 +29,7 @@
<code>$this-&gt;rootFolder</code>
<code>IRootFolder</code>
<code>IRootFolder</code>
<code>\OCP\Share\Exceptions\ShareNotFound</code>
<code>ShareNotFound</code>
</MissingDependency>
<UndefinedClass occurrences="1">
<code>\OC_Util</code>
@ -203,9 +203,6 @@
<code>IRootFolder</code>
<code>IRootFolder</code>
</MissingDependency>
<UndefinedClass occurrences="1">
<code>SharedStorage</code>
</UndefinedClass>
</file>
<file src="lib/Controller/SignalingController.php">
<UndefinedClass occurrences="1">
@ -237,9 +234,6 @@
<code>ShareNotFound</code>
<code>ShareNotFound</code>
</MissingDependency>
<UndefinedClass occurrences="1">
<code>GroupFolderStorage</code>
</UndefinedClass>
</file>
<file src="lib/Flow/Operation.php">
<InvalidArgument occurrences="1"/>