diff options
Diffstat (limited to 'src/Controllers/SyncController.php')
| -rwxr-xr-x | src/Controllers/SyncController.php | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/src/Controllers/SyncController.php b/src/Controllers/SyncController.php deleted file mode 100755 index acebb11..0000000 --- a/src/Controllers/SyncController.php +++ /dev/null @@ -1,126 +0,0 @@ -<?php - -namespace App\Controllers; - -use App\Database; -use App\Models\RoomEvent; -use App\Models\User; -use Matrix\Data\AccountData; -use Matrix\Data\DeviceLists; -use Matrix\Data\Presence; -use Matrix\Data\Room\Ephemeral; -use Matrix\Data\Room\JoinedRoom; -use Matrix\Data\Room\RoomSummary; -use Matrix\Data\Room\Rooms; -use Matrix\Data\Room\State; -use Matrix\Data\Room\Timeline; -use Matrix\Data\Room\UnreadNotificationCounts; -use Matrix\Data\ToDevice; -use Matrix\Enums\MembershipState; -use Matrix\Enums\PresenceState; -use Matrix\Events\PresenceEvent; -use Matrix\Responses\ClientSyncGetResponse; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpFoundation\JsonResponse; - -class SyncController -{ - /** - * GET /_matrix/client/v3/sync - * - * @see https://spec.matrix.org/v1.15/client-server-api/#get_matrixclientv3sync - * @see https://spec.matrix.org/v1.15/client-server-api/#extensions-to-sync - */ - public function sync(Request $request): Response - { - $user = User::authenticateWithRequest($request); - - $filter = $request->query->get("filter", ""); - $syncFullState = $request->query->get("full_state", false); - $setPresence = PresenceState::tryFrom($request->query->get("set_presence") ?? "") ?? PresenceState::ONLINE; - $since = $request->query->get("since", ""); - $timeout = $request->query->get("timeout", 0); - $useStateAfter = $request->query->get("use_state_after", false); - - if (! empty($filter)) { - if (str_starts_with($filter, "{")) { - $filter = json_decode($filter, true); - } else { - $filter = Database::getInstance()->query("select * from filters where id=:id", ["id" => $filter])->fetch(); - } - } - - $rooms = Database::getInstance()->query(<<<SQL - select * from rooms - left join room_memberships - on rooms.id = room_memberships.room_id - where room_memberships.user_id = :user_id - SQL, [ - "user_id" => $user->getId(), - ])->fetchAll(); - - $invitedRooms = []; - $joinedRooms = []; - $knockedRooms = []; - $leftRooms = []; - - foreach ($rooms as $room) { - $events = Database::getInstance()->query(<<<SQL - select * from room_events - where room_id = :room_id - SQL, [ - "room_id" => $room["room_id"], - #"limit" => ($filter["room"]["timeline"]["limit"] ?? false) ? "limit " . $filter["room"]["timeline"]["limit"] : "", - ])->fetchAll(); - - if ($since === "" && MembershipState::tryFrom($room["state"]) === MembershipState::JOIN) { - $joinedRooms[$room["room_id"]] = new JoinedRoom( - accountData: new AccountData([]), - ephemeral: new Ephemeral([]), - state: new State([]), - summary: new RoomSummary( - heroes: [], - invitedMemberCount: 0, - joinedMemberCount: 1, - ), - timeline: new Timeline( - events: array_map([RoomEvent::class, "transformEvent"], $events), - limited: false,# $filter["room"]["timeline"]["limit"] ?? false, - previousBatch: null, - ), - unreadNotifications: new UnreadNotificationCounts(0, 0), - unreadThreadNotifications: [], - ); - } - } - - return new JsonResponse(new ClientSyncGetResponse( - nextBatch: "1", - - accountData: new AccountData([]), - - deviceLists: new DeviceLists([], []), - - deviceOneTimeKeysCount: [ - "signed_curve25519" => 10, - ], - - presence: new Presence([ - new PresenceEvent( - sender: $user->getId(), - presence: $setPresence, - ), - ]), - - rooms: new Rooms( - $invitedRooms, - $joinedRooms, - $knockedRooms, - $leftRooms, - ), - - toDevice: new ToDevice([]), - )); - } -} |
