diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php index 002a8f384..2805556df 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php @@ -253,15 +253,24 @@ trait Contacts private function importContactsFromVcfFile(\RainLoop\Model\Account $oAccount, /*resource*/ $rFile): int { + $iCount = 0; $oAddressBookProvider = $this->AddressBookProvider($oAccount); if (\is_resource($rFile) && $oAddressBookProvider && $oAddressBookProvider->IsActive()) { - $sFile = \stream_get_contents($rFile); - if (\is_string($sFile) && 5 < \strlen($sFile)) { + try + { $this->Logger()->Write('Import contacts from vcf'); - return $oAddressBookProvider->ImportVcfFile($sFile); + foreach (\RainLoop\Providers\AddressBook\Utils::VcfStreamToContacts($rFile) as $oContact) { + if ($oAddressBookProvider->ContactSave($oContact)) { + ++$iCount; + } + } + } + catch (\Throwable $oExc) + { + $this->Logger()->WriteException($oExc); } } - return 0; + return $iCount; } private function importContactsFromCsvFile(\RainLoop\Model\Account $oAccount, /*resource*/ $rFile, string $sFileStart): int @@ -269,13 +278,20 @@ trait Contacts $iCount = 0; $oAddressBookProvider = $this->AddressBookProvider($oAccount); if (\is_resource($rFile) && $oAddressBookProvider && $oAddressBookProvider->IsActive()) { - $this->oLogger->Write('Import contacts from csv'); - $sDelimiter = ((int)\strpos($sFileStart, ',') > (int)\strpos($sFileStart, ';')) ? ',' : ';'; - foreach (\RainLoop\Providers\AddressBook\Utils::CsvStreamToContacts($rFile, $sDelimiter) as $oContact) { - if ($oAddressBookProvider->ContactSave($oContact)) { - ++$iCount; + try + { + $this->Logger()->Write('Import contacts from csv'); + $sDelimiter = ((int)\strpos($sFileStart, ',') > (int)\strpos($sFileStart, ';')) ? ',' : ';'; + foreach (\RainLoop\Providers\AddressBook\Utils::CsvStreamToContacts($rFile, $sDelimiter) as $oContact) { + if ($oAddressBookProvider->ContactSave($oContact)) { + ++$iCount; + } } } + catch (\Throwable $oExc) + { + $this->Logger()->WriteException($oExc); + } } return $iCount; } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php index 6e2125724..affaecd99 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook.php @@ -82,24 +82,4 @@ class AddressBook extends AbstractProvider { return $this->IsActive() ? $this->oDriver->IncFrec($aEmails, $bCreateAuto) : false; } - - public function ImportVcfFile(string $sVcfData) : int - { - $iCount = 0; - if ($this->IsActive()) { - try - { - foreach (AddressBook\Utils::VcfFileToContacts($sVcfData) as $oContact) { - if ($this->ContactSave($oContact)) { - ++$iCount; - } - } - } - catch (\Throwable $oExc) - { - $this->Logger()->WriteException($oExc); - } - } - return $iCount; - } } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Utils.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Utils.php index 62b1250f9..709a729bb 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Utils.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/Utils.php @@ -198,13 +198,9 @@ class Utils )); } - public static function VcfFileToContacts(string $sVcfData) : iterable + public static function VcfStreamToContacts(/*resource*/ $rFile) : iterable { - $sVcfData = \trim($sVcfData); - if ("\xef\xbb\xbf" === \substr($sVcfData, 0, 3)) { - $sVcfData = \substr($sVcfData, 3); - } - $oVCardSplitter = new \Sabre\VObject\Splitter\VCard($sVcfData); + $oVCardSplitter = new \Sabre\VObject\Splitter\VCard($rFile); if ($oVCardSplitter) { while ($oVCard = $oVCardSplitter->getNext()) { if ($oVCard instanceof \Sabre\VObject\Component\VCard) {