diff --git a/.reuse/dep5 b/.reuse/dep5 index 80b9ea8097fad..bc28bbf0d0014 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -163,7 +163,7 @@ Files: vendor-bin/*/composer.json vendor-bin/*/composer.lock Copyright: 2021 Nextcloud GmbH and Nextcloud contributors License: AGPL-3.0-or-later -Files: apps/encryption/img/app.svg apps/federation/img/app.svg apps/files/img/add-color.png apps/files/img/add-color.svg apps/files/img/app-dark.svg apps/files/img/app.svg apps/files/img/change.png apps/files/img/change.svg apps/files/img/delete-color.png apps/files/img/delete-color.svg apps/files/img/folder.svg apps/files_external/img/app-dark.svg apps/files_external/img/app.svg apps/user_ldap/img/app-dark.svg apps/user_ldap/img/app.svg apps/comments/img/comments-dark.svg apps/comments/img/comments.svg apps/files_reminders/img/alarm.svg apps/files_reminders/img/app-dark.svg apps/files_reminders/img/app.svg apps/files_versions/img/app-dark.svg apps/files_versions/img/app.svg apps/files_trashbin/img/app-dark.svg apps/files_trashbin/img/app.svg apps/theming/img/accessibility-dark.svg apps/testing/img/app.svg apps/sharebymail/img/app.svg apps/systemtags/img/app.svg apps/provisioning_api/img/app.svg apps/settings/img/apps.svg apps/settings/img/change.svg apps/settings/img/help.svg apps/settings/img/password.svg apps/settings/img/personal.png apps/settings/img/personal.svg apps/settings/img/share.svg apps/settings/img/users-white.svg apps/settings/img/users.svg apps/files_sharing/img/app.svg apps/settings/img/admin.svg apps/settings/img/settings.svg apps/settings/img/settings_apps.svg apps/settings/img/toggle-filelist.svg apps/webhook_listeners/img/app-dark.svg apps/webhook_listeners/img/app.svg core/img/filetypes/application-pdf.svg core/img/breadcrumb.svg core/img/filetypes/application.svg core/img/filetypes/audio.svg core/img/filetypes/file.svg core/img/filetypes/folder-drag-accept.svg core/img/filetypes/folder-encrypted.svg core/img/filetypes/folder-external.svg core/img/filetypes/folder-public.svg core/img/filetypes/folder-shared.svg core/img/filetypes/folder-starred.svg core/img/filetypes/folder.svg core/img/filetypes/image.svg core/img/filetypes/link.svg core/img/filetypes/location.svg core/img/filetypes/mindmap.svg core/img/filetypes/text-calendar.svg core/img/filetypes/text-code.svg core/img/filetypes/text-vcard.svg core/img/filetypes/text.svg core/img/filetypes/video.svg core/img/filetypes/x-office-document.svg core/img/filetypes/x-office-drawing.svg core/img/filetypes/x-office-form-template.svg core/img/filetypes/x-office-form.svg core/img/filetypes/x-office-presentation.svg core/img/filetypes/x-office-spreadsheet.svg core/img/places/calendar-dark.png core/img/places/calendar.png core/img/places/calendar.svg core/img/places/contacts-dark.png core/img/places/contacts.svg core/img/places/default-app-icon.svg core/img/places/files.svg core/img/places/home.svg core/img/places/link.svg core/img/places/music.svg core/img/places/picture.svg core/img/rating/s0.svg core/img/rating/s1.svg core/img/rating/s10.svg core/img/rating/s2.svg core/img/rating/s3.svg core/img/rating/s4.svg core/img/rating/s5.svg core/img/rating/s6.svg core/img/rating/s7.svg core/img/rating/s8.svg core/img/rating/s9.svg core/img/mail.svg core/img/rss.svg core/img/clients/desktop.svg core/img/clients/phone.svg core/img/clients/tablet.svg core/img/categories/auth.svg core/img/categories/bundles.svg core/img/categories/customization.svg core/img/categories/files.svg core/img/categories/games.svg core/img/categories/integration.svg core/img/categories/monitoring.svg core/img/categories/multimedia.svg core/img/categories/office.svg core/img/categories/organization.svg core/img/categories/social.svg core/img/categories/workflow.svg core/img/apps/circles.svg core/img/apps/notes.svg core/img/apps/richdocuments.svg core/img/caldav/attendees.png core/img/caldav/attendees.svg core/img/caldav/description.png core/img/caldav/description.svg core/img/caldav/link.png core/img/caldav/link.svg core/img/caldav/location.png core/img/caldav/location.svg core/img/caldav/organizer.png core/img/caldav/organizer.svg core/img/caldav/time.png core/img/caldav/time.svg core/img/caldav/title.png core/img/caldav/title.svg core/img/actions/add-folder-description.svg core/img/actions/add.svg core/img/actions/address.png core/img/actions/address.svg core/img/actions/alert-outline.svg core/img/actions/arrow-left.svg core/img/actions/arrow-right.svg core/img/actions/audio-off.svg core/img/actions/audio.svg core/img/actions/caret-white.svg core/img/actions/caret.svg core/img/actions/change.svg core/img/actions/clippy.svg core/img/actions/close.svg core/img/actions/comment.png core/img/actions/comment.svg core/img/actions/confirm-fade.svg core/img/actions/confirm-white.svg core/img/actions/confirm.svg core/img/actions/delete.png core/img/actions/delete.svg core/img/actions/details.svg core/img/actions/disabled-user.svg core/img/actions/disabled-users.svg core/img/actions/download.png core/img/actions/download.svg core/img/actions/edit.svg core/img/actions/error-white.svg core/img/actions/error.svg core/img/actions/external.svg core/img/actions/filter.svg core/img/actions/fullscreen.svg core/img/actions/group.svg core/img/actions/history.png core/img/actions/history.svg core/img/actions/info-white.svg core/img/actions/info.png core/img/actions/info.svg core/img/actions/logout.svg core/img/actions/mail.svg core/img/actions/menu-sidebar.svg core/img/actions/menu.svg core/img/actions/more-white.svg core/img/actions/more.png core/img/actions/more.svg core/img/actions/password-white.svg core/img/actions/password.png core/img/actions/password.svg core/img/actions/pause.svg core/img/actions/phone.svg core/img/actions/play-add.svg core/img/actions/play-next.svg core/img/actions/play-previous.svg core/img/actions/play.svg core/img/actions/profile.svg core/img/actions/projects.svg core/img/actions/public-white.svg core/img/actions/public.svg core/img/actions/quota.svg core/img/actions/recent.svg core/img/actions/rename.svg core/img/actions/screen-off.svg core/img/actions/screen.svg core/img/actions/search.svg core/img/actions/settings-dark.svg core/img/actions/settings.svg core/img/actions/share.png core/img/actions/share.svg core/img/actions/shared.svg core/img/actions/sound-off.svg core/img/actions/sound.svg core/img/actions/star-dark.svg core/img/actions/star.png core/img/actions/star.svg core/img/actions/starred.png core/img/actions/starred.svg core/img/actions/tag.png core/img/actions/tag.svg core/img/actions/template-add.svg core/img/actions/timezone.svg core/img/actions/toggle-background.svg core/img/actions/toggle-filelist.svg core/img/actions/toggle-pictures.svg core/img/actions/toggle.svg core/img/actions/triangle-e.svg core/img/actions/triangle-n.svg core/img/actions/triangle-s.svg core/img/actions/unshare.svg core/img/actions/upload.svg core/img/actions/user-admin.svg core/img/actions/user.svg core/img/actions/verified.svg core/img/actions/verify.svg core/img/actions/verifying.svg core/img/actions/video-off.svg core/img/actions/video-switch.svg core/img/actions/video.svg core/img/actions/view-close.svg core/img/actions/view-download.svg core/img/actions/view-next.svg core/img/actions/view-pause.svg core/img/actions/view-play.svg core/img/actions/view-previous.svg core/img/places/contacts-dark.png core/img/places/contacts.svg apps/user_status/img/app-dark.svg apps/user_status/img/app.svg apps/theming/img/app-dark.svg apps/theming/img/app.svg apps/updatenotification/img/app.svg apps/weather_status/img/app-dark.svg apps/weather_status/img/app.svg apps/updatenotification/img/notification.svg +Files: apps/encryption/img/app.svg apps/federation/img/app.svg apps/files/img/add-color.png apps/files/img/add-color.svg apps/files/img/app-dark.svg apps/files/img/app.svg apps/files/img/change.png apps/files/img/change.svg apps/files/img/delete-color.png apps/files/img/delete-color.svg apps/files/img/folder.svg apps/files/img/folder-move.svg apps/files_external/img/app-dark.svg apps/files_external/img/app.svg apps/user_ldap/img/app-dark.svg apps/user_ldap/img/app.svg apps/comments/img/comments-dark.svg apps/comments/img/comments.svg apps/files_reminders/img/alarm.svg apps/files_reminders/img/app-dark.svg apps/files_reminders/img/app.svg apps/files_versions/img/app-dark.svg apps/files_versions/img/app.svg apps/files_trashbin/img/app-dark.svg apps/files_trashbin/img/app.svg apps/theming/img/accessibility-dark.svg apps/testing/img/app.svg apps/sharebymail/img/app.svg apps/systemtags/img/app.svg apps/provisioning_api/img/app.svg apps/settings/img/apps.svg apps/settings/img/change.svg apps/settings/img/help.svg apps/settings/img/password.svg apps/settings/img/personal.png apps/settings/img/personal.svg apps/settings/img/share.svg apps/settings/img/users-white.svg apps/settings/img/users.svg apps/files_sharing/img/app.svg apps/settings/img/admin.svg apps/settings/img/settings.svg apps/settings/img/settings_apps.svg apps/settings/img/toggle-filelist.svg apps/webhook_listeners/img/app-dark.svg apps/webhook_listeners/img/app.svg core/img/filetypes/application-pdf.svg core/img/breadcrumb.svg core/img/filetypes/application.svg core/img/filetypes/audio.svg core/img/filetypes/file.svg core/img/filetypes/folder-drag-accept.svg core/img/filetypes/folder-encrypted.svg core/img/filetypes/folder-external.svg core/img/filetypes/folder-public.svg core/img/filetypes/folder-shared.svg core/img/filetypes/folder-starred.svg core/img/filetypes/folder.svg core/img/filetypes/image.svg core/img/filetypes/link.svg core/img/filetypes/location.svg core/img/filetypes/mindmap.svg core/img/filetypes/text-calendar.svg core/img/filetypes/text-code.svg core/img/filetypes/text-vcard.svg core/img/filetypes/text.svg core/img/filetypes/video.svg core/img/filetypes/x-office-document.svg core/img/filetypes/x-office-drawing.svg core/img/filetypes/x-office-form-template.svg core/img/filetypes/x-office-form.svg core/img/filetypes/x-office-presentation.svg core/img/filetypes/x-office-spreadsheet.svg core/img/places/calendar-dark.png core/img/places/calendar.png core/img/places/calendar.svg core/img/places/contacts-dark.png core/img/places/contacts.svg core/img/places/default-app-icon.svg core/img/places/files.svg core/img/places/home.svg core/img/places/link.svg core/img/places/music.svg core/img/places/picture.svg core/img/rating/s0.svg core/img/rating/s1.svg core/img/rating/s10.svg core/img/rating/s2.svg core/img/rating/s3.svg core/img/rating/s4.svg core/img/rating/s5.svg core/img/rating/s6.svg core/img/rating/s7.svg core/img/rating/s8.svg core/img/rating/s9.svg core/img/mail.svg core/img/rss.svg core/img/clients/desktop.svg core/img/clients/phone.svg core/img/clients/tablet.svg core/img/categories/auth.svg core/img/categories/bundles.svg core/img/categories/customization.svg core/img/categories/files.svg core/img/categories/games.svg core/img/categories/integration.svg core/img/categories/monitoring.svg core/img/categories/multimedia.svg core/img/categories/office.svg core/img/categories/organization.svg core/img/categories/social.svg core/img/categories/workflow.svg core/img/apps/circles.svg core/img/apps/notes.svg core/img/apps/richdocuments.svg core/img/caldav/attendees.png core/img/caldav/attendees.svg core/img/caldav/description.png core/img/caldav/description.svg core/img/caldav/link.png core/img/caldav/link.svg core/img/caldav/location.png core/img/caldav/location.svg core/img/caldav/organizer.png core/img/caldav/organizer.svg core/img/caldav/time.png core/img/caldav/time.svg core/img/caldav/title.png core/img/caldav/title.svg core/img/actions/add-folder-description.svg core/img/actions/add.svg core/img/actions/address.png core/img/actions/address.svg core/img/actions/alert-outline.svg core/img/actions/arrow-left.svg core/img/actions/arrow-right.svg core/img/actions/audio-off.svg core/img/actions/audio.svg core/img/actions/caret-white.svg core/img/actions/caret.svg core/img/actions/change.svg core/img/actions/clippy.svg core/img/actions/close.svg core/img/actions/comment.png core/img/actions/comment.svg core/img/actions/confirm-fade.svg core/img/actions/confirm-white.svg core/img/actions/confirm.svg core/img/actions/delete.png core/img/actions/delete.svg core/img/actions/details.svg core/img/actions/disabled-user.svg core/img/actions/disabled-users.svg core/img/actions/download.png core/img/actions/download.svg core/img/actions/edit.svg core/img/actions/error-white.svg core/img/actions/error.svg core/img/actions/external.svg core/img/actions/filter.svg core/img/actions/fullscreen.svg core/img/actions/group.svg core/img/actions/history.png core/img/actions/history.svg core/img/actions/info-white.svg core/img/actions/info.png core/img/actions/info.svg core/img/actions/logout.svg core/img/actions/mail.svg core/img/actions/menu-sidebar.svg core/img/actions/menu.svg core/img/actions/more-white.svg core/img/actions/more.png core/img/actions/more.svg core/img/actions/password-white.svg core/img/actions/password.png core/img/actions/password.svg core/img/actions/pause.svg core/img/actions/phone.svg core/img/actions/play-add.svg core/img/actions/play-next.svg core/img/actions/play-previous.svg core/img/actions/play.svg core/img/actions/profile.svg core/img/actions/projects.svg core/img/actions/public-white.svg core/img/actions/public.svg core/img/actions/quota.svg core/img/actions/recent.svg core/img/actions/rename.svg core/img/actions/screen-off.svg core/img/actions/screen.svg core/img/actions/search.svg core/img/actions/settings-dark.svg core/img/actions/settings.svg core/img/actions/share.png core/img/actions/share.svg core/img/actions/shared.svg core/img/actions/sound-off.svg core/img/actions/sound.svg core/img/actions/star-dark.svg core/img/actions/star.png core/img/actions/star.svg core/img/actions/starred.png core/img/actions/starred.svg core/img/actions/tag.png core/img/actions/tag.svg core/img/actions/template-add.svg core/img/actions/timezone.svg core/img/actions/toggle-background.svg core/img/actions/toggle-filelist.svg core/img/actions/toggle-pictures.svg core/img/actions/toggle.svg core/img/actions/triangle-e.svg core/img/actions/triangle-n.svg core/img/actions/triangle-s.svg core/img/actions/unshare.svg core/img/actions/upload.svg core/img/actions/user-admin.svg core/img/actions/user.svg core/img/actions/verified.svg core/img/actions/verify.svg core/img/actions/verifying.svg core/img/actions/video-off.svg core/img/actions/video-switch.svg core/img/actions/video.svg core/img/actions/view-close.svg core/img/actions/view-download.svg core/img/actions/view-next.svg core/img/actions/view-pause.svg core/img/actions/view-play.svg core/img/actions/view-previous.svg core/img/places/contacts-dark.png core/img/places/contacts.svg apps/user_status/img/app-dark.svg apps/user_status/img/app.svg apps/theming/img/app-dark.svg apps/theming/img/app.svg apps/updatenotification/img/app.svg apps/weather_status/img/app-dark.svg apps/weather_status/img/app.svg apps/updatenotification/img/notification.svg Copyright: 2018-2024 Google LLC License: Apache-2.0 diff --git a/apps/files/img/folder-move.svg b/apps/files/img/folder-move.svg new file mode 100644 index 0000000000000..349106f4cd927 --- /dev/null +++ b/apps/files/img/folder-move.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/files/lib/Controller/TransferOwnershipController.php b/apps/files/lib/Controller/TransferOwnershipController.php index a71373baae4e8..4ef6e392039b5 100644 --- a/apps/files/lib/Controller/TransferOwnershipController.php +++ b/apps/files/lib/Controller/TransferOwnershipController.php @@ -140,22 +140,15 @@ public function accept(int $id): DataResponse { return new DataResponse([], Http::STATUS_FORBIDDEN); } + $this->jobList->add(TransferOwnership::class, [ + 'id' => $transferOwnership->getId(), + ]); + $notification = $this->notificationManager->createNotification(); $notification->setApp('files') ->setObject('transfer', (string)$id); $this->notificationManager->markProcessed($notification); - $newTransferOwnership = new TransferOwnershipEntity(); - $newTransferOwnership->setNodeName($transferOwnership->getNodeName()); - $newTransferOwnership->setFileId($transferOwnership->getFileId()); - $newTransferOwnership->setSourceUser($transferOwnership->getSourceUser()); - $newTransferOwnership->setTargetUser($transferOwnership->getTargetUser()); - $this->mapper->insert($newTransferOwnership); - - $this->jobList->add(TransferOwnership::class, [ - 'id' => $newTransferOwnership->getId(), - ]); - return new DataResponse([], Http::STATUS_OK); } diff --git a/apps/files/lib/Notification/Notifier.php b/apps/files/lib/Notification/Notifier.php index bae3a513df745..89ddbb9b6ecdb 100644 --- a/apps/files/lib/Notification/Notifier.php +++ b/apps/files/lib/Notification/Notifier.php @@ -8,9 +8,11 @@ */ namespace OCA\Files\Notification; +use OCA\Files\BackgroundJob\TransferOwnership; use OCA\Files\Db\TransferOwnershipMapper; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; @@ -36,15 +38,19 @@ class Notifier implements INotifier, IDismissableNotifier { private $userManager; /** @var ITimeFactory */ private $timeFactory; + /** @var IJobList */ + private $jobList; public function __construct(IFactory $l10nFactory, IURLGenerator $urlGenerator, TransferOwnershipMapper $mapper, IManager $notificationManager, IUserManager $userManager, + IJobList $jobList, ITimeFactory $timeFactory) { $this->l10nFactory = $l10nFactory; $this->urlGenerator = $urlGenerator; + $this->jobList = $jobList; $this->mapper = $mapper; $this->notificationManager = $notificationManager; $this->userManager = $userManager; @@ -70,6 +76,10 @@ public function prepare(INotification $notification, string $languageCode): INot throw new UnknownNotificationException('Unhandled app'); } + $imagePath = $this->urlGenerator->imagePath('files', 'folder-move.svg'); + $iconUrl = $this->urlGenerator->getAbsoluteURL($imagePath); + $notification->setIcon($iconUrl); + return match($notification->getSubject()) { 'transferownershipRequest' => $this->handleTransferownershipRequest($notification, $languageCode), 'transferownershipRequestDenied' => $this->handleTransferOwnershipRequestDenied($notification, $languageCode), @@ -259,6 +269,9 @@ public function dismissNotification(INotification $notification): void { if ($notification->getApp() !== 'files') { throw new UnknownNotificationException('Unhandled app'); } + if ($notification->getSubject() !== 'transferownershipRequest') { + throw new UnknownNotificationException('Unhandled notification type'); + } // TODO: This should all be moved to a service that also the transferownershipController uses. try { @@ -267,6 +280,12 @@ public function dismissNotification(INotification $notification): void { return; } + if ($this->jobList->has(TransferOwnership::class, [ + 'id' => $transferOwnership->getId(), + ])) { + return; + } + $notification = $this->notificationManager->createNotification(); $notification->setUser($transferOwnership->getSourceUser()) ->setApp('files')