Sync receiver of DM channel at init time for existing portal
This commit is contained in:
parent
60c47e5a20
commit
b59b8a68c3
@ -49,7 +49,7 @@ from ..types.request import (
|
|||||||
CommandResultDoneValue
|
CommandResultDoneValue
|
||||||
)
|
)
|
||||||
|
|
||||||
from .types import PortalChannelInfo
|
from .types import PortalChannelInfo, UserInfoUnion
|
||||||
|
|
||||||
from .errors import InvalidAccessToken
|
from .errors import InvalidAccessToken
|
||||||
from .error_helper import raise_unsuccessful_response
|
from .error_helper import raise_unsuccessful_response
|
||||||
@ -214,6 +214,13 @@ class Client:
|
|||||||
channel_id=channel_id.serialize()
|
channel_id=channel_id.serialize()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def get_participants(self, channel_id: Long) -> list[UserInfoUnion]:
|
||||||
|
return await self._api_user_request_result(
|
||||||
|
ResultListType(UserInfoUnion),
|
||||||
|
"get_participants",
|
||||||
|
channel_id=channel_id.serialize()
|
||||||
|
)
|
||||||
|
|
||||||
async def get_chats(self, channel_id: Long, sync_from: Long | None, limit: int | None) -> list[Chatlog]:
|
async def get_chats(self, channel_id: Long, sync_from: Long | None, limit: int | None) -> list[Chatlog]:
|
||||||
return await self._api_user_request_result(
|
return await self._api_user_request_result(
|
||||||
ResultListType(Chatlog),
|
ResultListType(Chatlog),
|
||||||
|
@ -397,7 +397,10 @@ class Portal(DBPortal, BasePortal):
|
|||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
async def _update_participants(self, source: u.User, participants: list[UserInfoUnion]) -> bool:
|
async def _update_participants(self, source: u.User, participants: list[UserInfoUnion] | None = None) -> bool:
|
||||||
|
if participants is None:
|
||||||
|
self.log.debug("Called _update_participants with no participants, fetching them now...")
|
||||||
|
participants = await source.client.get_participants(self.ktid)
|
||||||
changed = False
|
changed = False
|
||||||
if not self._main_intent:
|
if not self._main_intent:
|
||||||
assert self.is_direct, "_main_intent for non-direct chat portal should have been set already"
|
assert self.is_direct, "_main_intent for non-direct chat portal should have been set already"
|
||||||
@ -982,8 +985,14 @@ class Portal(DBPortal, BasePortal):
|
|||||||
self.by_mxid[self.mxid] = self
|
self.by_mxid[self.mxid] = self
|
||||||
if not self.is_direct:
|
if not self.is_direct:
|
||||||
self._main_intent = self.az.intent
|
self._main_intent = self.az.intent
|
||||||
|
elif self.mxid:
|
||||||
|
# TODO Save kt_sender in DB instead? Depends on if DM channels are shared...
|
||||||
|
user = await u.User.get_by_ktid(self.kt_receiver)
|
||||||
|
assert user, f"Found no user for this portal's receiver of {self.kt_receiver}"
|
||||||
|
# TODO Should this backfill? Useful for forgotten channels
|
||||||
|
await self._update_participants(user)
|
||||||
else:
|
else:
|
||||||
self.log.debug("Not setting _main_intent of direct chat until after checking participant list")
|
self.log.debug("Not setting _main_intent of new direct chat until after checking participant list")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@async_getter_lock
|
@async_getter_lock
|
||||||
|
@ -351,6 +351,17 @@ export default class PeerClient {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} req
|
||||||
|
* @param {string} req.mxid
|
||||||
|
* @param {Long} req.channel_id
|
||||||
|
*/
|
||||||
|
getParticipants = async (req) => {
|
||||||
|
const userClient = this.#getUser(req.mxid)
|
||||||
|
const talkChannel = userClient.getChannel(req.channel_id)
|
||||||
|
return await talkChannel.getAllLatestUserInfo()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Object} req
|
* @param {Object} req
|
||||||
* @param {string} req.mxid
|
* @param {string} req.mxid
|
||||||
@ -458,6 +469,7 @@ export default class PeerClient {
|
|||||||
get_own_profile: this.getOwnProfile,
|
get_own_profile: this.getOwnProfile,
|
||||||
get_profile: this.getProfile,
|
get_profile: this.getProfile,
|
||||||
get_portal_channel_info: this.getPortalChannelInfo,
|
get_portal_channel_info: this.getPortalChannelInfo,
|
||||||
|
get_participants: this.getParticipants,
|
||||||
get_chats: this.getChats,
|
get_chats: this.getChats,
|
||||||
send_message: this.sendMessage,
|
send_message: this.sendMessage,
|
||||||
}[req.command] || this.handleUnknownCommand
|
}[req.command] || this.handleUnknownCommand
|
||||||
|
Loading…
Reference in New Issue
Block a user