Clear cache on vcard change/delete
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
34d97aa51c
commit
3ab53d000f
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue