Update Contact Size after removing photo

Signed-off-by: Georg Ehrke <developer@georgehrke.com>
This commit is contained in:
Georg Ehrke 2020-04-15 15:47:27 +02:00
parent 648c8df516
commit fe4527a8e2
No known key found for this signature in database
GPG Key ID: 9D98FD9380A1CB43
1 changed files with 38 additions and 6 deletions

View File

@ -501,7 +501,13 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$result = $query->execute();
while ($row = $result->fetch()) {
$row['etag'] = '"' . $row['etag'] . '"';
$row['carddata'] = $this->readBlob($row['carddata']);
$modified = false;
$row['carddata'] = $this->readBlob($row['carddata'], $modified);
if ($modified) {
$row['size'] = strlen($row['carddata']);
}
$cards[] = $row;
}
$result->closeCursor();
@ -535,7 +541,12 @@ class CardDavBackend implements BackendInterface, SyncSupport {
return false;
}
$row['etag'] = '"' . $row['etag'] . '"';
$row['carddata'] = $this->readBlob($row['carddata']);
$modified = false;
$row['carddata'] = $this->readBlob($row['carddata'], $modified);
if ($modified) {
$row['size'] = strlen($row['carddata']);
}
return $row;
}
@ -572,7 +583,13 @@ class CardDavBackend implements BackendInterface, SyncSupport {
while ($row = $result->fetch()) {
$row['etag'] = '"' . $row['etag'] . '"';
$row['carddata'] = $this->readBlob($row['carddata']);
$modified = false;
$row['carddata'] = $this->readBlob($row['carddata'], $modified);
if ($modified) {
$row['size'] = strlen($row['carddata']);
}
$cards[] = $row;
}
$result->closeCursor();
@ -872,7 +889,12 @@ class CardDavBackend implements BackendInterface, SyncSupport {
]);
}
private function readBlob($cardData) {
/**
* @param resource|string $cardData
* @param bool $modified
* @return string
*/
private function readBlob($cardData, &$modified=false) {
if (is_resource($cardData)) {
$cardData = stream_get_contents($cardData);
}
@ -886,6 +908,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
&& strpos($line, 'PHOTO:data:image/') !== 0) {
// Filter out PHOTO data of non-images
$removingPhoto = true;
$modified = true;
continue;
}
@ -952,7 +975,11 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$result->closeCursor();
return array_map(function ($array) {
$array['carddata'] = $this->readBlob($array['carddata']);
$modified = false;
$array['carddata'] = $this->readBlob($array['carddata'], $modified);
if ($modified) {
$array['size'] = strlen($array['carddata']);
}
return $array;
}, $cards);
}
@ -1017,8 +1044,13 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$queryResult->closeCursor();
if (is_array($contact)) {
$modified = false;
$contact['etag'] = '"' . $contact['etag'] . '"';
$contact['carddata'] = $this->readBlob($contact['carddata']);
$contact['carddata'] = $this->readBlob($contact['carddata'], $modified);
if ($modified) {
$contact['size'] = strlen($contact['carddata']);
}
$result = $contact;
}