Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>tags/v12.0.0beta2
@@ -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); |
@@ -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); |
@@ -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(); | |||
} | |||
} |