Browse Source
Implement ctag and etag in ContactsInteraction
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
pull/20860/head
Georg Ehrke
6 years ago
No known key found for this signature in database
GPG Key ID: 9D98FD9380A1CB43
3 changed files with
28 additions and
3 deletions
-
apps/contactsinteraction/lib/AddressBook.php
-
apps/contactsinteraction/lib/Card.php
-
apps/contactsinteraction/lib/Db/RecentContactMapper.php
|
|
|
@ -130,8 +130,8 @@ class AddressBook extends ExternalAddressBook implements IACL { |
|
|
|
/** |
|
|
|
* @inheritDoc |
|
|
|
*/ |
|
|
|
public function getLastModified() { |
|
|
|
throw new NotImplemented(); |
|
|
|
public function getLastModified(): ?int { |
|
|
|
return $this->mapper->findLastUpdatedForUserId($this->getUid()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -149,6 +149,7 @@ class AddressBook extends ExternalAddressBook implements IACL { |
|
|
|
'principaluri' => $this->principalUri, |
|
|
|
'{DAV:}displayname' => $this->l10n->t('Recently contacted'), |
|
|
|
'{' . Plugin::NS_OWNCLOUD . '}read-only' => true, |
|
|
|
'{' . \OCA\DAV\CalDAV\Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($this->getLastModified() ?? 0), |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -95,7 +95,7 @@ class Card implements ICard, IACL { |
|
|
|
* @inheritDoc |
|
|
|
*/ |
|
|
|
public function getETag(): ?string { |
|
|
|
return null; |
|
|
|
return '"' . md5((string) $this->getLastModified()) . '"'; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
@ -104,6 +104,30 @@ class RecentContactMapper extends QBMapper { |
|
|
|
return $this->findEntities($select); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @param string $uid |
|
|
|
* @return int|null |
|
|
|
*/ |
|
|
|
public function findLastUpdatedForUserId(string $uid):?int { |
|
|
|
$qb = $this->db->getQueryBuilder(); |
|
|
|
|
|
|
|
$select = $qb |
|
|
|
->select('last_contact') |
|
|
|
->from($this->getTableName()) |
|
|
|
->where($qb->expr()->eq('actor_uid', $qb->createNamedParameter($uid))) |
|
|
|
->orderBy('last_contact', 'DESC') |
|
|
|
->setMaxResults(1); |
|
|
|
|
|
|
|
$cursor = $select->execute(); |
|
|
|
$row = $cursor->fetch(); |
|
|
|
|
|
|
|
if ($row === false) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
return (int)$row['last_contact']; |
|
|
|
} |
|
|
|
|
|
|
|
public function cleanUp(int $olderThan): void { |
|
|
|
$qb = $this->db->getQueryBuilder(); |
|
|
|
|
|
|
|
|