aboutsummaryrefslogtreecommitdiffstats
path: root/apps/dav
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dav')
-rw-r--r--apps/dav/lib/AppInfo/Application.php13
-rw-r--r--apps/dav/lib/CardDAV/ImageExportPlugin.php4
-rw-r--r--apps/dav/lib/CardDAV/PhotoCache.php22
3 files changed, 31 insertions, 8 deletions
diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index d13f24d369a..5d89324d4a9 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -112,6 +112,19 @@ class Application extends App {
}
});
+ $clearPhotoCache = function($event) {
+ if ($event instanceof GenericEvent) {
+ /** @var PhotoCache $p */
+ $p = $this->getContainer()->query(PhotoCache::class);
+ $p->delete(
+ $event->getArgument('addressBookId'),
+ $event->getArgument('cardUri')
+ );
+ }
+ };
+ $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $clearPhotoCache);
+ $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', $clearPhotoCache);
+
$dispatcher->addListener('OC\AccountManager::userUpdated', function(GenericEvent $event) {
$user = $event->getSubject();
$syncService = $this->getContainer()->query(SyncService::class);
diff --git a/apps/dav/lib/CardDAV/ImageExportPlugin.php b/apps/dav/lib/CardDAV/ImageExportPlugin.php
index 9d5eba453fb..fd9223c855b 100644
--- a/apps/dav/lib/CardDAV/ImageExportPlugin.php
+++ b/apps/dav/lib/CardDAV/ImageExportPlugin.php
@@ -103,14 +103,12 @@ class ImageExportPlugin extends ServerPlugin {
/** @var AddressBook $addressbook */
$addressbook = $this->server->tree->getNodeForPath($addressbookpath);
- $hash = md5($addressbook->getResourceId() . $node->getName());
-
$response->setHeader('Cache-Control', 'private, max-age=3600, must-revalidate');
$response->setHeader('Etag', $node->getETag() );
$response->setHeader('Pragma', 'public');
try {
- $file = $this->cache->get($hash, $size, $node);
+ $file = $this->cache->get($addressbook->getResourceId(), $node->getName(), $size, $node);
$response->setHeader('Content-Type', $file->getMimeType());
$response->setHeader('Content-Disposition', 'inline');
$response->setStatus(200);
diff --git a/apps/dav/lib/CardDAV/PhotoCache.php b/apps/dav/lib/CardDAV/PhotoCache.php
index 29c45debdef..c9625914263 100644
--- a/apps/dav/lib/CardDAV/PhotoCache.php
+++ b/apps/dav/lib/CardDAV/PhotoCache.php
@@ -26,15 +26,16 @@ class PhotoCache {
}
/**
- * @param string $hash
+ * @param int $addressBookId
+ * @param string $cardUri
* @param int $size
* @param Card $card
*
* @return ISimpleFile
* @throws NotFoundException
*/
- public function get($hash, $size, Card $card) {
- $folder = $this->getFolder($hash);
+ public function get($addressBookId, $cardUri, $size, Card $card) {
+ $folder = $this->getFolder($addressBookId, $cardUri);
if ($this->isEmpty($folder)) {
$this->init($folder, $card);
@@ -132,10 +133,12 @@ class PhotoCache {
/**
- * @param $hash
+ * @param int $addressBookId
+ * @param string $cardUri
* @return ISimpleFolder
*/
- private function getFolder($hash) {
+ private function getFolder($addressBookId, $cardUri) {
+ $hash = md5($addressBookId . ' ' . $cardUri);
try {
return $this->appData->getFolder($hash);
} catch (NotFoundException $e) {
@@ -231,4 +234,13 @@ class PhotoCache {
}
return '';
}
+
+ /**
+ * @param int $addressBookId
+ * @param string $cardUri
+ */
+ public function delete($addressBookId, $cardUri) {
+ $folder = $this->getFolder($addressBookId, $cardUri);
+ $folder->delete();
+ }
}