sync more data on GS

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2021-04-22 12:33:35 -01:00
parent cab81e3476
commit 7c0e514d04
4 changed files with 41 additions and 9 deletions

View file

@ -281,7 +281,7 @@ class CircleRequest extends CircleRequestBuilder {
* @throws CircleNotFoundException
* @throws RequestBuilderException
*/
public function searchCircle(Circle $circle): Circle {
public function searchCircle(Circle $circle, ?IFederatedUser $initiator = null): Circle {
$qb = $this->getCircleSelectSql();
$qb->leftJoinOwner(CoreRequestBuilder::CIRCLE);
@ -300,6 +300,11 @@ class CircleRequest extends CircleRequestBuilder {
$qb->filterDirectMembership($aliasOwner, $circle->getOwner());
}
if (!is_null($initiator)) {
$qb->setOptions([CoreRequestBuilder::CIRCLE], ['getData' => true]);
$qb->limitToInitiator(CoreRequestBuilder::CIRCLE, $initiator);
}
return $this->getItemFromRequest($qb);
}

View file

@ -839,6 +839,7 @@ class FederatedUserService {
* @throws RemoteResourceNotFoundException
* @throws SingleCircleNotFoundException
* @throws UnknownRemoteException
* @throws RequestBuilderException
*/
public function getGroupCircle(string $groupId): Circle {
$group = $this->groupManager->get($groupId);
@ -865,7 +866,7 @@ class FederatedUserService {
->setInitiator($member);
try {
return $this->circleRequest->searchCircle($circle);
return $this->circleRequest->searchCircle($circle, $owner);
} catch (CircleNotFoundException $e) {
}

View file

@ -44,6 +44,7 @@ use OCA\Circles\Exceptions\FederatedItemException;
use OCA\Circles\Exceptions\InitiatorNotConfirmedException;
use OCA\Circles\Exceptions\MemberNotFoundException;
use OCA\Circles\Exceptions\OwnerNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Model\Federated\FederatedEvent;
@ -206,11 +207,13 @@ class RemoteDownstreamService {
*
* @return bool
* @throws OwnerNotFoundException
* @throws RequestBuilderException
*/
private function verifyCircle(FederatedEvent $event): bool {
$circle = $event->getCircle();
try {
$localCircle = $this->circleRequest->getCircle($circle->getSingleId());
$localCircle = $this->circleRequest->getCircle($circle->getSingleId(), null, null, 0);
} catch (CircleNotFoundException $e) {
return false;
}

View file

@ -53,7 +53,9 @@ use OCA\Circles\Exceptions\RemoteResourceNotFoundException;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\SingleCircleNotFoundException;
use OCA\Circles\Exceptions\UnknownRemoteException;
use OCA\Circles\FederatedItems\SingleMemberAdd;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\Federated\FederatedEvent;
use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\ManagedModel;
use OCA\Circles\Model\Member;
@ -87,6 +89,9 @@ class SyncService {
/** @var FederatedUserService */
private $federatedUserService;
/** @var federatedEventService */
private $federatedEventService;
/** @var MemberService */
private $memberService;
@ -102,8 +107,10 @@ class SyncService {
*
* @param IUserManager $userManager
* @param IGroupManager $groupManager
* @param CircleRequest $circleRequest
* @param MemberRequest $memberRequest
* @param FederatedUserService $federatedUserService
* @param federatedEventService $federatedEventService
* @param MemberService $memberService
* @param MembershipService $membershipService
* @param ConfigService $configService
@ -114,6 +121,7 @@ class SyncService {
CircleRequest $circleRequest,
MemberRequest $memberRequest,
FederatedUserService $federatedUserService,
federatedEventService $federatedEventService,
MemberService $memberService,
MembershipService $membershipService,
ConfigService $configService
@ -123,6 +131,7 @@ class SyncService {
$this->circleRequest = $circleRequest;
$this->memberRequest = $memberRequest;
$this->federatedUserService = $federatedUserService;
$this->federatedEventService = $federatedEventService;
$this->memberService = $memberService;
$this->membershipService = $membershipService;
$this->configService = $configService;
@ -154,12 +163,15 @@ class SyncService {
}
/**
* @return void
*/
public function syncAll(): void {
$this->syncNextcloudUsers();
$this->syncNextcloudGroups();
$this->syncContacts();
$this->syncGlobalScale();
$this->syncRemote();
$this->syncNextcloudGroups();
$this->syncContacts();
}
@ -226,10 +238,15 @@ class SyncService {
$group = $this->groupManager->get($groupId);
foreach ($group->getUsers() as $user) {
$member = $this->generateGroupMember($circle, $user->getUID());
$this->memberRequest->insertOrUpdate($member);
$event = new FederatedEvent(SingleMemberAdd::class);
$event->setCircle($circle);
$event->setMember($member);
$this->federatedEventService->newEvent($event);
// $this->memberRequest->insertOrUpdate($member);
}
$this->membershipService->onUpdate($circle->getSingleId());
// $this->membershipService->onUpdate($circle->getSingleId());
return $circle;
}
@ -336,9 +353,15 @@ class SyncService {
public function groupMemberAdded(string $groupId, string $userId): void {
$circle = $this->federatedUserService->getGroupCircle($groupId);
$member = $this->generateGroupMember($circle, $userId);
$this->memberRequest->insertOrUpdate($member);
$this->membershipService->onUpdate($member->getSingleId());
$event = new FederatedEvent(SingleMemberAdd::class);
$event->setCircle($circle);
$event->setMember($member);
$this->federatedEventService->newEvent($event);
// $this->memberRequest->insertOrUpdate($member);
// $this->membershipService->onUpdate($member->getSingleId());
}