15 private array $dialogIds = [];
16 private array $chatsWithoutDialogIds = [];
20 $this->chats = $chats;
26 ->fillChatIds($restData)
27 ->loadFromFetchedChats($restData[
'chats'] ?? [])
28 ->loadFromNonPrivateChats()
29 ->loadFromPrivateChat()
35 private function fillChatIds($restData): self
37 foreach ($restData[
'messages'] as
$message)
39 $this->chatsWithoutDialogIds[(int)
$message[
'chat_id']] = (
int)
$message[
'chat_id'];
42 foreach ($restData[
'pinSync'][
'addedPins'] as $pin)
44 $this->chatsWithoutDialogIds[(int)$pin[
'chatId']] = (
int)$pin[
'chatId'];
47 foreach ($restData[
'chats'] as $chat)
49 $this->chatsWithoutDialogIds[(int)$chat[
'id']] = (
int)$chat[
'id'];
52 foreach ($this->chats->getShortInfoChatIds() as $chatId)
54 $this->chatsWithoutDialogIds[$chatId] = $chatId;
60 private function loadFromFetchedChats(
array $chats): self
62 if (!$this->needContinue())
67 foreach ($chats as $chat)
69 $this->add($chat[
'id'], $chat[
'dialogId']);
75 private function loadFromNonPrivateChats(): self
77 if (!$this->needContinue())
82 foreach ($this->chatsWithoutDialogIds as $chatId)
85 if ($chat instanceof Chat\NullChat)
87 unset($this->chatsWithoutDialogIds[$chatId]);
90 if ($chat->getType() !== Chat::IM_TYPE_PRIVATE)
92 $this->add($chat->getId(), $chat->getDialogId());
99 private function loadFromPrivateChat(): self
101 if (!$this->needContinue())
106 $result = RelationTable::query()
107 ->setSelect([
'CHAT_ID',
'USER_ID'])
108 ->whereIn(
'CHAT_ID', $this->chatsWithoutDialogIds)
109 ->where(
'MESSAGE_TYPE', Chat::IM_TYPE_PRIVATE)
110 ->whereNot(
'USER_ID', $this->
getContext()->getUserId())
116 $this->add((
int)$row[
'CHAT_ID'], $row[
'USER_ID']);
122 private function needContinue(): bool
124 return !empty($this->chatsWithoutDialogIds);
127 private function add(
int $chatId,
string $dialogId): void
129 if (isset($this->dialogIds[$chatId]))
134 $this->dialogIds[
$chatId] = $dialogId;
135 unset($this->chatsWithoutDialogIds[$chatId]);
145 return $this->dialogIds;