Log more info for #926

This commit is contained in:
the-djmaze 2023-02-08 10:31:22 +01:00
parent 7da5e84a35
commit 4ef78c24e1

View file

@ -150,34 +150,41 @@ class PdoAddressBook
return false; return false;
} }
$time = \microtime(true) - $time; $time = \microtime(true) - $time;
\SnappyMail\HTTP\Stream::JSON(['messsage'=>"Fetched remote data in {$time} seconds"]); \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Received ".\count($aRemoteSyncData)." remote contacts in {$time} seconds"]);
\SnappyMail\Log::info('PdoAddressBook', \count($aRemoteSyncData) . ' remote contacts');
$aDatabaseSyncData = $this->prepareDatabaseSyncData(); $aLocalSyncData = $this->prepareDatabaseSyncData();
\SnappyMail\Log::info('PdoAddressBook', \count($aLocalSyncData) . ' local contacts');
// $this->oLogger->WriteDump($aRemoteSyncData); // $this->oLogger->WriteDump($aRemoteSyncData);
// $this->oLogger->WriteDump($aDatabaseSyncData); // $this->oLogger->WriteDump($aLocalSyncData);
$bReadWrite = $this->isDAVReadWrite(); $bReadWrite = $this->isDAVReadWrite();
// Delete remote when Mode = read + write // Delete remote when Mode = read + write
if ($bReadWrite) { if ($bReadWrite) {
\SnappyMail\Log::info('PdoAddressBook', 'Sync() is import and export'); \SnappyMail\Log::info('PdoAddressBook', 'Sync() is import and export');
foreach ($aDatabaseSyncData as $sKey => $aData) { $iCount = 0;
foreach ($aLocalSyncData as $sKey => $aData) {
if ($aData['deleted']) { if ($aData['deleted']) {
unset($aDatabaseSyncData[$sKey]); ++$iCount;
unset($aLocalSyncData[$sKey]);
if (isset($aRemoteSyncData[$sKey], $aRemoteSyncData[$sKey]['vcf'])) { if (isset($aRemoteSyncData[$sKey], $aRemoteSyncData[$sKey]['vcf'])) {
\SnappyMail\HTTP\Stream::JSON(['messsage'=>"Delete remote {$sKey}"]); \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Delete remote {$sKey}"]);
$this->davClientRequest($oClient, 'DELETE', $sPath.$aRemoteSyncData[$sKey]['vcf']); $this->davClientRequest($oClient, 'DELETE', $sPath.$aRemoteSyncData[$sKey]['vcf']);
} }
} }
} }
if ($iCount) {
\SnappyMail\Log::info('PdoAddressBook', $iCount . ' remote contacts removed');
}
} else { } else {
\SnappyMail\Log::info('PdoAddressBook', 'Sync() is import only'); \SnappyMail\Log::info('PdoAddressBook', 'Sync() is import only');
} }
// Delete from db // Delete local
$aIdsForDeletion = array(); $aIdsForDeletion = array();
foreach ($aDatabaseSyncData as $sKey => $aData) { foreach ($aLocalSyncData as $sKey => $aData) {
if (!empty($aData['etag']) && !isset($aRemoteSyncData[$sKey])) { if (!empty($aData['etag']) && !isset($aRemoteSyncData[$sKey])) {
$aIdsForDeletion[] = $aData['id_contact']; $aIdsForDeletion[] = $aData['id_contact'];
} }
@ -186,38 +193,30 @@ class PdoAddressBook
\SnappyMail\HTTP\Stream::JSON(['messsage'=>'Delete local ' . \implode(', ', $aIdsForDeletion)]); \SnappyMail\HTTP\Stream::JSON(['messsage'=>'Delete local ' . \implode(', ', $aIdsForDeletion)]);
$this->DeleteContacts($aIdsForDeletion); $this->DeleteContacts($aIdsForDeletion);
unset($aIdsForDeletion); unset($aIdsForDeletion);
\SnappyMail\Log::info('PdoAddressBook', \count($aIdsForDeletion) . ' local contacts removed');
} }
$this->flushDeletedContacts(); $this->flushDeletedContacts();
//+++new or newer (from db) // local is new or newer
foreach ($aDatabaseSyncData as $sKey => $aData) { if ($bReadWrite) {
if ((empty($aData['etag']) && !isset($aRemoteSyncData[$sKey])) // new foreach ($aLocalSyncData as $sKey => $aData) {
|| if ((empty($aData['etag']) && !isset($aRemoteSyncData[$sKey])) // new
(!empty($aData['etag']) && isset($aRemoteSyncData[$sKey]) && // newer // newer
$aRemoteSyncData[$sKey]['etag'] !== $aData['etag'] && || (!empty($aData['etag']) && isset($aRemoteSyncData[$sKey]) &&
$aRemoteSyncData[$sKey]['changed'] < $aData['changed'] $aRemoteSyncData[$sKey]['etag'] !== $aData['etag'] &&
) $aRemoteSyncData[$sKey]['changed'] < $aData['changed']
) { )
\SnappyMail\HTTP\Stream::JSON(['messsage'=>"Update remote {$sKey}"]); ) {
$mID = $aData['id_contact']; \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Update remote {$sKey}"]);
$oContact = $this->GetContactByID($mID); $mID = $aData['id_contact'];
if ($oContact) { $oContact = $this->GetContactByID($mID);
$sExsistensBody = ''; if ($oContact) {
$mExsistenRemoteID = isset($aRemoteSyncData[$sKey]['vcf']) && !empty($aData['etag']) ? $aRemoteSyncData[$sKey]['vcf'] : ''; $sRemoteID = isset($aRemoteSyncData[$sKey]['vcf']) && !empty($aData['etag'])
if (\strlen($mExsistenRemoteID)) { ? $aRemoteSyncData[$sKey]['vcf'] : '';
$oResponse = $this->davClientRequest($oClient, 'GET', $sPath.$mExsistenRemoteID); \SnappyMail\Log::info('PdoAddressBook', "Update contact {$sKey} in DAV");
if ($oResponse) {
$sExsistensBody = \trim($oResponse->body);
}
// $this->oLogger->WriteDump($sExsistensBody);
}
// Add remote when Mode = read + write
if ($sExsistensBody && $bReadWrite) {
$oResponse = $this->davClientRequest($oClient, 'PUT', $oResponse = $this->davClientRequest($oClient, 'PUT',
$sPath.(\strlen($mExsistenRemoteID) ? $mExsistenRemoteID : $oContact->IdContactStr.'.vcf'), $sPath . ($sRemoteID ?: $oContact->IdContactStr.'.vcf'),
$oContact->vCard->serialize() . "\r\n\r\n"); $oContact->vCard->serialize() . "\r\n\r\n");
if ($oResponse) { if ($oResponse) {
$sEtag = \trim(\trim($oResponse->getHeader('etag')), '"\''); $sEtag = \trim(\trim($oResponse->getHeader('etag')), '"\'');
@ -233,25 +232,26 @@ class PdoAddressBook
) )
); );
} }
} else {
\SnappyMail\Log::warning('PdoAddressBook', "Update/create remote failed");
} }
} else {
\SnappyMail\Log::warning('PdoAddressBook', "Local contact {$sKey} not found");
} }
unset($oContact);
} }
unset($oContact);
} }
} }
//---new
//+++new or newer (from carddav) // remote is new or newer
foreach ($aRemoteSyncData as $sKey => $aData) { foreach ($aRemoteSyncData as $sKey => $aData) {
if (!isset($aDatabaseSyncData[$sKey]) // new if (!isset($aLocalSyncData[$sKey]) // new
|| // newer
($aDatabaseSyncData[$sKey]['etag'] !== $aData['etag'] && // newer || ($aLocalSyncData[$sKey]['etag'] !== $aData['etag'] && $aLocalSyncData[$sKey]['changed'] < $aData['changed'])
$aDatabaseSyncData[$sKey]['changed'] < $aData['changed'])
) { ) {
\SnappyMail\HTTP\Stream::JSON(['messsage'=>"Update local {$sKey}"]); \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Update local {$sKey}"]);
$mExistingContactID = isset($aDatabaseSyncData[$sKey]['id_contact']) ?
$aDatabaseSyncData[$sKey]['id_contact'] : ''; $oVCard = null;
$oResponse = $this->davClientRequest($oClient, 'GET', $sPath.$aData['vcf']); $oResponse = $this->davClientRequest($oClient, 'GET', $sPath.$aData['vcf']);
if ($oResponse) { if ($oResponse) {
@ -263,42 +263,42 @@ class PdoAddressBook
} }
if (!empty($sBody)) { if (!empty($sBody)) {
$oVCard = null;
try { try {
$oVCard = \Sabre\VObject\Reader::read($sBody); $oVCard = \Sabre\VObject\Reader::read($sBody);
} } catch (\Throwable $oExc) {
catch (\Throwable $oExc) {
if ($this->oLogger) { if ($this->oLogger) {
$this->oLogger->WriteException($oExc); $this->oLogger->WriteException($oExc);
$this->oLogger->WriteDump($sBody); $this->oLogger->WriteDump($sBody);
} }
} }
if ($oVCard instanceof VCard) {
$oVCard->UID = $aData['uid'];
$oContact = null;
if ($mExistingContactID) {
$oContact = $this->GetContactByID($mExistingContactID);
}
if (!$oContact) {
$oContact = new Contact();
}
$oContact->setVCard($oVCard);
$sEtag = \trim($oResponse->getHeader('etag'), " \n\r\t\v\x00\"'");
if (!empty($sEtag)) {
$oContact->Etag = $sEtag;
}
$this->ContactSave($oContact);
unset($oContact);
// } else if ($this->oLogger) {
// $this->oLogger->WriteDump($sBody);
}
} }
} }
if ($oVCard instanceof VCard) {
$oVCard->UID = $aData['uid'];
$oContact = empty($aLocalSyncData[$sKey]['id_contact'])
? null
: $this->GetContactByID($aLocalSyncData[$sKey]['id_contact']);
if ($oContact) {
\SnappyMail\Log::info('PdoAddressBook', "Update local contact {$sKey}");
} else {
\SnappyMail\Log::info('PdoAddressBook', "Create local contact {$sKey}");
$oContact = new Contact();
}
$oContact->setVCard($oVCard);
$sEtag = \trim($oResponse->getHeader('etag'), " \n\r\t\v\x00\"'");
if (!empty($sEtag)) {
$oContact->Etag = $sEtag;
}
$this->ContactSave($oContact);
unset($oContact);
} else {
\SnappyMail\Log::error('PdoAddressBook', "Import remote contact {$sKey} failed");
}
} }
} }