Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
pull/352/head
Maxence Lange 2019-01-18 15:55:10 -01:00
rodzic 898993a67d
commit 524c7aa141
4 zmienionych plików z 62 dodań i 5 usunięć

Wyświetl plik

@ -66,6 +66,29 @@ class CacheDocumentsRequest extends CacheDocumentsRequestBuilder {
}
/**
* insert cache about an Actor in database.
*
* @param Document $document
*/
public function update(Document $document) {
$qb = $this->getCacheDocumentsInsertSql();
$qb->set('type', $qb->createNamedParameter($document->getType()))
->set('url', $qb->createNamedParameter($document->getUrl()))
->set('media_type', $qb->createNamedParameter($document->getMediaType()))
->set('mime_type', $qb->createNamedParameter($document->getMimeType()))
->set('error', $qb->createNamedParameter($document->getError()))
->set('local_copy', $qb->createNamedParameter($document->getLocalCopy()))
->set('parent_id', $qb->createNamedParameter($document->getParentId()))
->set('public', $qb->createNamedParameter(($document->isPublic()) ? '1' : '0'))
->set(
'creation',
$qb->createNamedParameter(new DateTime('now'), IQueryBuilder::PARAM_DATE)
);
$qb->execute();
}
/**
* @param Document $document
*/
@ -99,7 +122,7 @@ class CacheDocumentsRequest extends CacheDocumentsRequestBuilder {
* @return Document
* @throws CacheDocumentDoesNotExistException
*/
public function getBySource(string $url) {
public function getByUrl(string $url) {
$qb = $this->getCacheDocumentsSelectSql();
$this->limitToUrl($qb, $url);
@ -143,6 +166,24 @@ class CacheDocumentsRequest extends CacheDocumentsRequestBuilder {
}
/**
* @param Document $item
*
* @return bool
*/
public function isDuplicate(Document $item): bool {
$qb = $this->getCacheDocumentsSelectSql();
$this->limitToUrl($qb, $item->getUrl());
$this->limitToParentId($qb, $item->getParentId());
$cursor = $qb->execute();
$data = $cursor->fetch();
$cursor->closeCursor();
return ($data !== false);
}
/**
* @return Document[]
* @throws Exception
@ -185,5 +226,6 @@ class CacheDocumentsRequest extends CacheDocumentsRequestBuilder {
$qb->execute();
}
}

Wyświetl plik

@ -63,7 +63,7 @@ class CoreRequestBuilder {
const TABLE_CACHE_ACTORS = 'social_cache_actors';
const TABLE_CACHE_DOCUMENTS = 'social_cache_documents';
/** @var IDBConnection */
protected $dbConnection;
@ -346,6 +346,17 @@ class CoreRequestBuilder {
}
/**
* Limit the request to the parent_id
*
* @param IQueryBuilder $qb
* @param string $parentId
*/
protected function limitToParentId(IQueryBuilder &$qb, string $parentId) {
$this->limitToDBField($qb, 'parent_id', $parentId);
}
/**
* @param IQueryBuilder $qb
* @param int $since

Wyświetl plik

@ -33,6 +33,7 @@ namespace OCA\Social\Model\ActivityPub\Object;
use DateTime;
use JsonSerializable;
use OCA\Social\Exceptions\InvalidOriginException;
use OCA\Social\Exceptions\UrlCloudException;
use OCA\Social\Model\ActivityPub\ACore;
@ -218,6 +219,7 @@ class Document extends ACore implements JsonSerializable {
* @param array $data
*
* @throws UrlCloudException
* @throws InvalidOriginException
*/
public function import(array $data) {
parent::import($data);
@ -226,6 +228,8 @@ class Document extends ACore implements JsonSerializable {
if ($this->getId() === '') {
$this->generateUniqueId('/documents/g');
} else {
$this->checkOrigin($this->getId());
}
}

Wyświetl plik

@ -238,14 +238,14 @@ class DocumentService {
$icon->setMediaType('');
$icon->setLocalCopy('avatar');
$this->cacheDocumentsRequest->deleteByUrl($icon->getUrl());
$this->cacheDocumentsRequest->save($icon);
$interface = AP::$activityPub->getInterfaceFromType(Image::TYPE);
$interface->save($icon);
$actor->setAvatarVersion($versionCurrent);
$this->actorRequest->update($actor);
} else {
try {
$icon = $this->cacheDocumentsRequest->getBySource($url);
$icon = $this->cacheDocumentsRequest->getByUrl($url);
} catch (CacheDocumentDoesNotExistException $e) {
return '';
}