From 5be76411fa9cb9b883ae6c0405b44b3b6bc855e7 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Wed, 16 Oct 2024 15:01:00 +0200 Subject: fix: dismiss notification only after transfer bg job created - do not create 'denied' notification if bg job exists Signed-off-by: Maksim Sukharev --- apps/files/lib/Controller/TransferOwnershipController.php | 10 +++++----- apps/files/lib/Notification/Notifier.php | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'apps/files/lib') diff --git a/apps/files/lib/Controller/TransferOwnershipController.php b/apps/files/lib/Controller/TransferOwnershipController.php index a71373baae4..3564b08ad6a 100644 --- a/apps/files/lib/Controller/TransferOwnershipController.php +++ b/apps/files/lib/Controller/TransferOwnershipController.php @@ -140,11 +140,6 @@ class TransferOwnershipController extends OCSController { return new DataResponse([], Http::STATUS_FORBIDDEN); } - $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()); @@ -156,6 +151,11 @@ class TransferOwnershipController extends OCSController { 'id' => $newTransferOwnership->getId(), ]); + $notification = $this->notificationManager->createNotification(); + $notification->setApp('files') + ->setObject('transfer', (string)$id); + $this->notificationManager->markProcessed($notification); + return new DataResponse([], Http::STATUS_OK); } diff --git a/apps/files/lib/Notification/Notifier.php b/apps/files/lib/Notification/Notifier.php index bae3a513df7..5a82499e36e 100644 --- a/apps/files/lib/Notification/Notifier.php +++ b/apps/files/lib/Notification/Notifier.php @@ -8,9 +8,11 @@ declare(strict_types=1); */ 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; @@ -259,6 +265,9 @@ class Notifier implements INotifier, IDismissableNotifier { 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 +276,12 @@ class Notifier implements INotifier, IDismissableNotifier { return; } + if ($this->jobList->has(TransferOwnership::class, [ + 'id' => $transferOwnership->getId(), + ])) { + return; + } + $notification = $this->notificationManager->createNotification(); $notification->setUser($transferOwnership->getSourceUser()) ->setApp('files') -- cgit v1.2.3 From 6e7c35d77eb85836a35b6b0c8d8ba24829350066 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Wed, 16 Oct 2024 15:03:29 +0200 Subject: fix: do not duplicate existing entity - this reverts 1e8048abee1745bab648dba5bf96f956c718e4e3 Signed-off-by: Maksim Sukharev --- apps/files/lib/Controller/TransferOwnershipController.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'apps/files/lib') diff --git a/apps/files/lib/Controller/TransferOwnershipController.php b/apps/files/lib/Controller/TransferOwnershipController.php index 3564b08ad6a..4ef6e392039 100644 --- a/apps/files/lib/Controller/TransferOwnershipController.php +++ b/apps/files/lib/Controller/TransferOwnershipController.php @@ -140,15 +140,8 @@ class TransferOwnershipController extends OCSController { return new DataResponse([], Http::STATUS_FORBIDDEN); } - $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(), + 'id' => $transferOwnership->getId(), ]); $notification = $this->notificationManager->createNotification(); -- cgit v1.2.3 From 73b34bba7b70d3296ce8eba633a4d9c61cf01904 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Wed, 16 Oct 2024 14:58:41 +0200 Subject: fix: add notification icon for transfer ownership Signed-off-by: Maksim Sukharev --- .reuse/dep5 | 2 +- apps/files/img/folder-move.svg | 1 + apps/files/lib/Notification/Notifier.php | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 apps/files/img/folder-move.svg (limited to 'apps/files/lib') diff --git a/.reuse/dep5 b/.reuse/dep5 index 07785032aee..5b1820e8236 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 00000000000..349106f4cd9 --- /dev/null +++ b/apps/files/img/folder-move.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/files/lib/Notification/Notifier.php b/apps/files/lib/Notification/Notifier.php index 5a82499e36e..89ddbb9b6ec 100644 --- a/apps/files/lib/Notification/Notifier.php +++ b/apps/files/lib/Notification/Notifier.php @@ -76,6 +76,10 @@ class Notifier implements INotifier, IDismissableNotifier { 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), -- cgit v1.2.3