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(<< $user->getId(), ])->fetchAll(); $invitedRooms = []; $joinedRooms = []; $knockedRooms = []; $leftRooms = []; foreach ($rooms as $room) { $events = Database::getInstance()->query(<< $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([]), )); } }