diff --git a/README.md b/README.md
index e5f0bac..51a0ff9 100644
--- a/README.md
+++ b/README.md
@@ -291,6 +291,48 @@ Notification payload:
eventType: 'OCA\\DAV\\Events\\CalendarObjectDeletedEvent'
}
```
+### Calendar Object Restore from Trash
+
+Fires whenever a calendar event is restored from Trashbin.
+
+Config name: `webhooks_calendar_object_restore_from_trash_url`
+
+Notification payload:
+```javascript
+{
+ calendarId: 30,
+ calendarData: {
+ id: '30',
+ uri: 'test',
+ principaluri: 'principals/users/admin',
+ // [...]
+ '{http://apple.com/ns/ical/}calendar-order': 0,
+ '{http://apple.com/ns/ical/}calendar-color': '#499AA2',
+ '{http://nextcloud.com/ns}deleted-at': null,
+ '{http://nextcloud.com/ns}owner-displayname': 'admin'
+ },
+ shares: [],
+ objectData: {
+ id: '118',
+ uri: 'E855AF90-4A9B-4223-95E1-1FE700C4BDC0-deleted.ics',
+ lastmodified: '1660572955',
+ etag: '"79c725344d04a73b9bad1addee500bcf"',
+ calendarid: '30',
+ size: 748,
+ calendardata: 'BEGIN:VCALENDAR\r\n' +
+ 'CALSCALE:GREGORIAN\r\n' +
+ 'VERSION:2.0\r\n' +
+ 'PRODID:-//IDN nextcloud.com//Calendar app 3.3.1//EN\r\n' +
+ 'BEGIN:VEVENT\r\n' +
+ // [...] more data in iCal format
+ 'END:VTIMEZONE\r\n' +
+ 'END:VCALENDAR',
+ component: 'vevent',
+ classification: 0
+ },
+ eventType: "OCA\\DAV\\Events\\CalendarObjectRestoredEvent"
+}
+```
### Login Failed
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 6013342..e8ffeb9 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -22,7 +22,7 @@ Outgoing webhooks can be triggered by either Nextcloud's internal events specifi
https://github.com/kffl/nextcloud-webhooks
https://raw.githubusercontent.com/kffl/nextcloud-webhooks/master/screenshots/admin.png
-
+
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php
index a694f23..7c87e9b 100644
--- a/lib/AppInfo/Application.php
+++ b/lib/AppInfo/Application.php
@@ -29,6 +29,7 @@
use OCA\Webhooks\Listeners\CalendarObjectUpdatedListener;
use OCA\Webhooks\Listeners\CalendarObjectDeletedListener;
use OCA\Webhooks\Listeners\CalendarObjectMovedToTrashListener;
+use OCA\Webhooks\Listeners\CalendarObjectRestoredFromTrashListener;
use OCA\Webhooks\Listeners\UserLiveStatusListener;
use OCA\Webhooks\Listeners\LoginFailedListener;
use OCA\Webhooks\Listeners\PasswordUpdatedListener;
@@ -42,6 +43,7 @@
use OCA\DAV\Events\CalendarObjectCreatedEvent;
use OCA\DAV\Events\CalendarObjectDeletedEvent;
use OCA\DAV\Events\CalendarObjectMovedToTrashEvent;
+use OCA\DAV\Events\CalendarObjectRestoredEvent;
use OCA\DAV\Events\CalendarObjectUpdatedEvent;
use OCA\Webhooks\Flow\RegisterFlowOperationsListener;
use OCP\Authentication\Events\LoginFailedEvent;
@@ -76,6 +78,7 @@ public function register(IRegistrationContext $context):void {
$context->registerEventListener(CalendarObjectUpdatedEvent::class, CalendarObjectUpdatedListener::class);
$context->registerEventListener(CalendarObjectDeletedEvent::class, CalendarObjectDeletedListener::class);
$context->registerEventListener(CalendarObjectMovedToTrashEvent::class, CalendarObjectMovedToTrashListener::class);
+ $context->registerEventListener(CalendarObjectRestoredEvent::class, CalendarObjectRestoredFromTrashListener::class);
$context->registerEventListener(LoginFailedEvent::class, LoginFailedListener::class);
$context->registerEventListener(PasswordUpdatedEvent::class, PasswordUpdatedListener::class);
$context->registerEventListener(ShareCreatedEvent::class, ShareCreatedListener::class);
@@ -97,6 +100,7 @@ public static function getAllConfigNames() {
"Calendar Object Updated" => CalendarObjectUpdatedListener::CONFIG_NAME,
"Calendar Object Deleted" => CalendarObjectDeletedListener::CONFIG_NAME,
"Calendar Object Moved to Trash" => CalendarObjectMovedToTrashListener::CONFIG_NAME,
+ "Calendar Object Restored from Trash" => CalendarObjectRestoredFromTrashListener::CONFIG_NAME,
"Login Failed" => LoginFailedListener::CONFIG_NAME,
"Password Updated" => PasswordUpdatedListener::CONFIG_NAME,
"Share Created" => ShareCreatedListener::CONFIG_NAME,
diff --git a/lib/Listeners/CalendarObjectRestroeFromTrashListener.php b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php
new file mode 100644
index 0000000..f75caee
--- /dev/null
+++ b/lib/Listeners/CalendarObjectRestroeFromTrashListener.php
@@ -0,0 +1,51 @@
+
+ *
+ * @author Sebastian Sternfeld
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ *
+ */
+namespace OCA\Webhooks\Listeners;
+
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
+use OCA\DAV\Events\CalendarObjectRestoredEvent;
+
+/**
+ * Class CalendarObjectUpdatedListener
+ *
+ * @package OCA\Webhooks\Listeners
+ */
+class CalendarObjectRestoredFromTrashListener extends AbstractListener implements IEventListener {
+
+ public const CONFIG_NAME = "webhooks_calendar_object_restore_from_trash_url";
+
+ public function handleIncomingEvent(Event $event) {
+ if (!($event instanceOf CalendarObjectRestoredEvent)) {
+ return;
+ }
+
+ return array(
+ "calendarId" => $event->getCalendarId(),
+ "calendarData" => $event->getCalendarData(),
+ "shares" => $event->getShares(),
+ "objectData" => $event->getObjectData(),
+ );
+ }
+}
\ No newline at end of file