From 8260a536ec02b0b69cc98e29cbd61e00f0cfd07d Mon Sep 17 00:00:00 2001 From: Hamza Mahjoubi Date: Mon, 20 Jan 2025 21:26:15 +0700 Subject: [PATCH] fixup! feat: add example contact on first login Signed-off-by: Hamza Mahjoubi --- .../composer/composer/autoload_classmap.php | 1 + .../dav/composer/composer/autoload_static.php | 1 + apps/dav/lib/Listener/AddressbookListener.php | 52 ++------------ .../dav/lib/Service/DefaultContactService.php | 70 +++++++++++++++++++ 4 files changed, 76 insertions(+), 48 deletions(-) create mode 100644 apps/dav/lib/Service/DefaultContactService.php diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index a70aba9f84218..924a49c912fa4 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -357,6 +357,7 @@ 'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php', 'OCA\\DAV\\ServerFactory' => $baseDir . '/../lib/ServerFactory.php', 'OCA\\DAV\\Service\\AbsenceService' => $baseDir . '/../lib/Service/AbsenceService.php', + 'OCA\\DAV\\Service\\DefaultContactService' => $baseDir . '/../lib/Service/DefaultContactService.php', 'OCA\\DAV\\Settings\\AvailabilitySettings' => $baseDir . '/../lib/Settings/AvailabilitySettings.php', 'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php', 'OCA\\DAV\\SetupChecks\\NeedsSystemAddressBookSync' => $baseDir . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index 2d00105b54892..c6ae90e45e488 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -372,6 +372,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php', 'OCA\\DAV\\ServerFactory' => __DIR__ . '/..' . '/../lib/ServerFactory.php', 'OCA\\DAV\\Service\\AbsenceService' => __DIR__ . '/..' . '/../lib/Service/AbsenceService.php', + 'OCA\\DAV\\Service\\DefaultContactService' => __DIR__ . '/..' . '/../lib/Service/DefaultContactService.php', 'OCA\\DAV\\Settings\\AvailabilitySettings' => __DIR__ . '/..' . '/../lib/Settings/AvailabilitySettings.php', 'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php', 'OCA\\DAV\\SetupChecks\\NeedsSystemAddressBookSync' => __DIR__ . '/..' . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php', diff --git a/apps/dav/lib/Listener/AddressbookListener.php b/apps/dav/lib/Listener/AddressbookListener.php index b090769abc833..6c75da69ce9e0 100644 --- a/apps/dav/lib/Listener/AddressbookListener.php +++ b/apps/dav/lib/Listener/AddressbookListener.php @@ -14,12 +14,10 @@ use OCA\DAV\Events\AddressBookDeletedEvent; use OCA\DAV\Events\AddressBookShareUpdatedEvent; use OCA\DAV\Events\AddressBookUpdatedEvent; -use OCP\App\IAppManager; +use OCA\DAV\Service\DefaultContactService; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; -use OCP\Files\AppData\IAppDataFactory; use Psr\Log\LoggerInterface; -use Symfony\Component\Uid\Factory\UlidFactory; use Throwable; use function sprintf; @@ -28,10 +26,7 @@ class AddressbookListener implements IEventListener { public function __construct( private ActivityBackend $activityBackend, private LoggerInterface $logger, - private CardDavBackend $cardDav, - private IAppManager $appManager, - private UlidFactory $Uidfactory, - private IAppDataFactory $appDataFactory, + private DefaultContactService $defaultContactService, ) { } @@ -41,47 +36,8 @@ public function handle(Event $event): void { $this->activityBackend->onAddressbookCreate( $event->getAddressBookData() ); - $this->logger->error('omek zabour: ', ['ab' => $event->getAddressBookData()]); - if ($event->getAddressBookData()['uri'] === 'contacts') { - $appData = $this->appDataFactory->get('contacts'); - try { - $folder = $appData->getFolder('defaultContact'); - $defaultContactFile = $folder->getFile('defaultContact.vcf'); - $vcard = $defaultContactFile->getContent(); - } catch (\Exception $e) { - $this->logger->error('Couldn\'t get default contact file', ['exception' => $e]); - return; - } - $newUid = $this->Uidfactory->create()->toRfc4122(); - $newRev = date('Ymd\THis\Z'); - - - $vcard = (strpos($vcard, 'UID:') !== false) ? preg_replace( - '/UID:.*?(\r\n|\n)/', - "UID:$newUid\n", - $vcard - ) : str_replace( - 'END:VCARD', - "UID:$newUid\nEND:VCARD", - $vcard - ); - - - // Add or update REV - $vcard = (strpos($vcard, 'REV:') !== false) ? preg_replace( - '/REV:.*?(\r\n|\n)/', - "REV:$newRev\n", - $vcard - ) : str_replace( - 'END:VCARD:', - "REV:$newRev\END:VCARD:", - $vcard - ); - try { - $this->cardDav->createCard($event->getAddressBookData()['id'], 'default', $vcard, false); - } catch (\Exception $e) { - \OC::$server->get(LoggerInterface::class)->error($e->getMessage(), ['exception' => $e]); - } + if ($event->getAddressBookData()['uri'] === CardDavBackend::PERSONAL_ADDRESSBOOK_URI) { + $this->defaultContactService->createDefaultContact((string)$event->getAddressBookId()); } $this->logger->debug( diff --git a/apps/dav/lib/Service/DefaultContactService.php b/apps/dav/lib/Service/DefaultContactService.php new file mode 100644 index 0000000000000..578f24d1bb9b3 --- /dev/null +++ b/apps/dav/lib/Service/DefaultContactService.php @@ -0,0 +1,70 @@ +appDataFactory->get('contacts'); + try { + $folder = $appData->getFolder('defaultContact'); + $defaultContactFile = $folder->getFile('defaultContact.vcf'); + $vcard = $defaultContactFile->getContent(); + } catch (\Exception $e) { + $this->logger->error('Couldn\'t get default contact file', ['exception' => $e]); + return; + } + + // Make sure the UId is unique + $newUid = Uuid::v4()->toRfc4122(); + $newRev = date('Ymd\THis\Z'); + + + $vcard = (strpos($vcard, 'UID:') !== false) ? preg_replace( + '/UID:.*?(\r\n|\n)/', + "UID:$newUid\n", + $vcard + ) : str_replace( + 'END:VCARD', + "UID:$newUid\nEND:VCARD", + $vcard + ); + + // Add or update REV + $vcard = (strpos($vcard, 'REV:') !== false) ? preg_replace( + '/REV:.*?(\r\n|\n)/', + "REV:$newRev\n", + $vcard + ) : str_replace( + 'END:VCARD:', + "REV:$newRev\END:VCARD:", + $vcard + ); + try { + $this->cardDav->createCard($addressBookId, 'default', $vcard, false); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + + } +}