diff --git a/dev/Stores/User/Contact.js b/dev/Stores/User/Contact.js index 1b171bdd6..f9db211ae 100644 --- a/dev/Stores/User/Contact.js +++ b/dev/Stores/User/Contact.js @@ -28,10 +28,19 @@ ContactUserStore.sync = fResultFunc => { && !ContactUserStore.syncing() ) { ContactUserStore.syncing(true); - Remote.request('ContactsSync', (iError, oData) => { - ContactUserStore.syncing(false); - fResultFunc && fResultFunc(iError, oData); - }, null, 200000); + Remote.streamPerLine(line => { + try { + line = JSON.parse(line); + if ('ContactsSync' === line.Action) { + ContactUserStore.syncing(false); + fResultFunc && fResultFunc(line.ErrorCode, line); + } + } catch (e) { + ContactUserStore.syncing(false); + console.error(e); + fResultFunc && fResultFunc(Notification.UnknownError); + } + }, 'ContactsSync'); } }; 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 fafd4144b..977a49d83 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 @@ -34,7 +34,13 @@ trait Contacts { $oAccount = $this->getAccountFromToken(); $oAddressBookProvider = $this->AddressBookProvider($oAccount); - if (!$oAddressBookProvider || !$oAddressBookProvider->Sync()) { + if (!$oAddressBookProvider) { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::ContactsSyncError); + } + \ignore_user_abort(true); + \SnappyMail\HTTP\Stream::start(/*$binary = false*/); + \SnappyMail\HTTP\Stream::JSON(['messsage'=>'start']); + if (!$oAddressBookProvider->Sync()) { throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::ContactsSyncError); } return $this->TrueResponse(__FUNCTION__); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php index 27ab534ec..e76d76a7b 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/AddressBook/PdoAddressBook.php @@ -172,6 +172,7 @@ class PdoAddressBook { if ($aData['deleted'] && isset($aRemoteSyncData[$sKey], $aRemoteSyncData[$sKey]['vcf'])) { + \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Delete remote {$sKey}"]); $this->davClientRequest($oClient, 'DELETE', $sPath.$aRemoteSyncData[$sKey]['vcf']); } } @@ -188,6 +189,7 @@ class PdoAddressBook } if (\count($aIdsForDeletedion)) { + \SnappyMail\HTTP\Stream::JSON(['messsage'=>'Delete local ' . \implode(', ', $aIdsForDeletedion)]); $this->DeleteContacts($aIdsForDeletedion, false); } @@ -205,6 +207,7 @@ class PdoAddressBook ) ) { + \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Update remote {$sKey}"]); $mID = $aData['id_contact']; $oContact = $this->GetContactByID($mID); if ($oContact) @@ -254,6 +257,7 @@ class PdoAddressBook $aDatabaseSyncData[$sKey]['changed'] < $aData['changed']) ) { + \SnappyMail\HTTP\Stream::JSON(['messsage'=>"Update local {$sKey}"]); $mExsistenContactID = isset($aDatabaseSyncData[$sKey]['id_contact']) ? $aDatabaseSyncData[$sKey]['id_contact'] : '';