update cache in stream

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
pull/632/head
Maxence Lange 2019-07-11 22:43:51 -01:00
rodzic 623facfb04
commit b8f3525600
6 zmienionych plików z 70 dodań i 9 usunięć

Wyświetl plik

@ -109,6 +109,9 @@ class QueueProcess extends Base {
} }
/**
* @param OutputInterface $output
*/
private function processRequestQueue(OutputInterface $output) { private function processRequestQueue(OutputInterface $output) {
$total = 0; $total = 0;
$requests = $this->requestQueueService->getRequestStandby($total); $requests = $this->requestQueueService->getRequestStandby($total);

Wyświetl plik

@ -380,6 +380,7 @@ class LocalController extends Controller {
/** /**
* @NoAdminRequired * @NoAdminRequired
* @NoCSRFRequired
* *
* @param int $since * @param int $since
* @param int $limit * @param int $limit

Wyświetl plik

@ -76,8 +76,8 @@ class CacheDocumentsRequestBuilder extends CoreRequestBuilder {
/** @noinspection PhpMethodParametersCountMismatchInspection */ /** @noinspection PhpMethodParametersCountMismatchInspection */
$qb->select( $qb->select(
'cd.id', 'cd.type', 'cd.media_type', 'cd.mime_type', 'cd.url', 'cd.local_copy', 'cd.id', 'cd.type', 'cd.parent_id', 'cd.media_type', 'cd.mime_type', 'cd.url',
'cd.public', 'cd.error', 'cd.creation', 'cd.caching' 'cd.local_copy', 'cd.public', 'cd.error', 'cd.creation', 'cd.caching'
) )
->from(self::TABLE_CACHE_DOCUMENTS, 'cd'); ->from(self::TABLE_CACHE_DOCUMENTS, 'cd');

Wyświetl plik

@ -43,6 +43,7 @@ use OCA\Social\Exceptions\StreamNotFoundException;
use OCA\Social\Model\ActivityPub\ACore; use OCA\Social\Model\ActivityPub\ACore;
use OCA\Social\Model\ActivityPub\Actor\Person; use OCA\Social\Model\ActivityPub\Actor\Person;
use OCA\Social\Model\ActivityPub\Internal\SocialAppNotification; use OCA\Social\Model\ActivityPub\Internal\SocialAppNotification;
use OCA\Social\Model\ActivityPub\Object\Document;
use OCA\Social\Model\ActivityPub\Object\Note; use OCA\Social\Model\ActivityPub\Object\Note;
use OCA\Social\Model\ActivityPub\Stream; use OCA\Social\Model\ActivityPub\Stream;
use OCA\Social\Service\ConfigService; use OCA\Social\Service\ConfigService;
@ -131,6 +132,54 @@ class StreamRequest extends StreamRequestBuilder {
} }
/**
* @param Document $document
*/
public function updateAttachments(Document $document) {
$qb = $this->getStreamSelectSql();
$this->limitToIdString($qb, $document->getParentId());
$cursor = $qb->execute();
$data = $cursor->fetch();
$cursor->closeCursor();
if ($data === false) {
return;
}
$new = $this->updateAttachmentInList($document, $this->getArray('attachments', $data, []));
$qb = $this->getStreamUpdateSql();
$qb->set(
'attachments', $qb->createNamedParameter(json_encode($new, JSON_UNESCAPED_SLASHES))
);
$this->limitToIdString($qb, $document->getParentId());
$qb->execute();
}
/**
* @param Document $document
* @param array $attachments
*
* @return array
*/
private function updateAttachmentInList(Document $document, array $attachments): array {
$new = [];
foreach ($attachments as $attachment) {
$tmp = new Document();
$tmp->importFromDatabase($attachment);
if ($tmp->getId() === $document->getId()) {
$new[] = $document;
} else {
$new[] = $tmp;
}
}
return $new;
}
/** /**
* @param string $itemId * @param string $itemId
* @param string $to * @param string $to
@ -223,7 +272,8 @@ class StreamRequest extends StreamRequestBuilder {
* @throws SocialAppConfigException * @throws SocialAppConfigException
* @throws StreamNotFoundException * @throws StreamNotFoundException
*/ */
public function getStreamByObjectId(string $objectId, string $type, string $subType = ''): Stream { public function getStreamByObjectId(string $objectId, string $type, string $subType = ''
): Stream {
if ($objectId === '') { if ($objectId === '') {
throw new StreamNotFoundException('missing objectId'); throw new StreamNotFoundException('missing objectId');
}; };
@ -702,6 +752,5 @@ class StreamRequest extends StreamRequestBuilder {
$qb->andWhere($filter); $qb->andWhere($filter);
} }
} }

Wyświetl plik

@ -502,8 +502,8 @@ class CurlService {
$this->parseRequestResultCurl($curl, $request); $this->parseRequestResultCurl($curl, $request);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE); $type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
$request->setContentType(($contentType === null) ? '' : $contentType); $request->setContentType((is_null($type) || is_bool($type)) ? '' : $type);
$request->setResultCode($code); $request->setResultCode($code);
$this->parseRequestResultCode301($code, $request); $this->parseRequestResultCode301($code, $request);

Wyświetl plik

@ -36,9 +36,11 @@ use Exception;
use OCA\Social\AP; use OCA\Social\AP;
use OCA\Social\Db\ActorsRequest; use OCA\Social\Db\ActorsRequest;
use OCA\Social\Db\CacheDocumentsRequest; use OCA\Social\Db\CacheDocumentsRequest;
use OCA\Social\Db\StreamRequest;
use OCA\Social\Exceptions\CacheContentException; use OCA\Social\Exceptions\CacheContentException;
use OCA\Social\Exceptions\CacheContentMimeTypeException; use OCA\Social\Exceptions\CacheContentMimeTypeException;
use OCA\Social\Exceptions\CacheDocumentDoesNotExistException; use OCA\Social\Exceptions\CacheDocumentDoesNotExistException;
use OCA\Social\Exceptions\ItemAlreadyExistsException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RequestContentException; use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use OCA\Social\Exceptions\RequestNetworkException;
@ -74,6 +76,8 @@ class DocumentService {
/** @var ActorsRequest */ /** @var ActorsRequest */
private $actorRequest; private $actorRequest;
/** @var StreamRequest */
private $streamRequest;
/** @var CacheDocumentService */ /** @var CacheDocumentService */
private $cacheService; private $cacheService;
@ -91,19 +95,20 @@ class DocumentService {
* @param IUrlGenerator $urlGenerator * @param IUrlGenerator $urlGenerator
* @param CacheDocumentsRequest $cacheDocumentsRequest * @param CacheDocumentsRequest $cacheDocumentsRequest
* @param ActorsRequest $actorRequest * @param ActorsRequest $actorRequest
* @param StreamRequest $streamRequest
* @param CacheDocumentService $cacheService * @param CacheDocumentService $cacheService
* @param ConfigService $configService * @param ConfigService $configService
* @param MiscService $miscService * @param MiscService $miscService
*/ */
public function __construct( public function __construct(
IUrlGenerator $urlGenerator, CacheDocumentsRequest $cacheDocumentsRequest, IUrlGenerator $urlGenerator, CacheDocumentsRequest $cacheDocumentsRequest,
ActorsRequest $actorRequest, ActorsRequest $actorRequest, StreamRequest $streamRequest,
CacheDocumentService $cacheService, CacheDocumentService $cacheService, ConfigService $configService, MiscService $miscService
ConfigService $configService, MiscService $miscService
) { ) {
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->cacheDocumentsRequest = $cacheDocumentsRequest; $this->cacheDocumentsRequest = $cacheDocumentsRequest;
$this->actorRequest = $actorRequest; $this->actorRequest = $actorRequest;
$this->streamRequest = $streamRequest;
$this->configService = $configService; $this->configService = $configService;
$this->cacheService = $cacheService; $this->cacheService = $cacheService;
$this->miscService = $miscService; $this->miscService = $miscService;
@ -143,6 +148,8 @@ class DocumentService {
$document->setLocalCopy($localCopy); $document->setLocalCopy($localCopy);
$this->cacheDocumentsRequest->endCaching($document); $this->cacheDocumentsRequest->endCaching($document);
$this->streamRequest->updateAttachments($document);
return $document; return $document;
} catch (CacheContentMimeTypeException $e) { } catch (CacheContentMimeTypeException $e) {
$this->miscService->log( $this->miscService->log(
@ -234,6 +241,7 @@ class DocumentService {
* @throws SocialAppConfigException * @throws SocialAppConfigException
* @throws UrlCloudException * @throws UrlCloudException
* @throws ItemUnknownException * @throws ItemUnknownException
* @throws ItemAlreadyExistsException
*/ */
public function cacheLocalAvatarByUsername(Person $actor): string { public function cacheLocalAvatarByUsername(Person $actor): string {
$url = $this->urlGenerator->linkToRouteAbsolute( $url = $this->urlGenerator->linkToRouteAbsolute(