Update chat presentation (#10197)
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
This commit is contained in:
@@ -222,7 +222,7 @@ export class Convo {
|
||||
switch (action.event) {
|
||||
case ConvoDispatchEvent.Init: {
|
||||
this.status = ConvoStatus.Initializing
|
||||
this.setup()
|
||||
void this.setup()
|
||||
this.setupFirehose()
|
||||
this.requestPollInterval(ACTIVE_POLL_INTERVAL)
|
||||
break
|
||||
@@ -234,12 +234,12 @@ export class Convo {
|
||||
switch (action.event) {
|
||||
case ConvoDispatchEvent.Ready: {
|
||||
this.status = ConvoStatus.Ready
|
||||
this.fetchMessageHistory()
|
||||
void this.fetchMessageHistory()
|
||||
break
|
||||
}
|
||||
case ConvoDispatchEvent.Background: {
|
||||
this.status = ConvoStatus.Backgrounded
|
||||
this.fetchMessageHistory()
|
||||
void this.fetchMessageHistory()
|
||||
this.requestPollInterval(BACKGROUND_POLL_INTERVAL)
|
||||
break
|
||||
}
|
||||
@@ -258,7 +258,7 @@ export class Convo {
|
||||
}
|
||||
case ConvoDispatchEvent.Disable: {
|
||||
this.status = ConvoStatus.Disabled
|
||||
this.fetchMessageHistory() // finish init
|
||||
void this.fetchMessageHistory() // finish init
|
||||
this.cleanupFirehoseConnection?.()
|
||||
this.withdrawRequestedPollInterval()
|
||||
break
|
||||
@@ -269,7 +269,7 @@ export class Convo {
|
||||
case ConvoStatus.Ready: {
|
||||
switch (action.event) {
|
||||
case ConvoDispatchEvent.Resume: {
|
||||
this.refreshConvo()
|
||||
void this.refreshConvo()
|
||||
this.requestPollInterval(ACTIVE_POLL_INTERVAL)
|
||||
break
|
||||
}
|
||||
@@ -308,11 +308,11 @@ export class Convo {
|
||||
} else {
|
||||
if (this.convo) {
|
||||
this.status = ConvoStatus.Ready
|
||||
this.refreshConvo()
|
||||
void this.refreshConvo()
|
||||
this.maybeRecoverFromNetworkError()
|
||||
} else {
|
||||
this.status = ConvoStatus.Initializing
|
||||
this.setup()
|
||||
void this.setup()
|
||||
}
|
||||
this.requestPollInterval(ACTIVE_POLL_INTERVAL)
|
||||
}
|
||||
@@ -435,7 +435,7 @@ export class Convo {
|
||||
this.firehoseError = undefined
|
||||
this.commit()
|
||||
} else {
|
||||
this.batchRetryPendingMessages()
|
||||
void this.batchRetryPendingMessages()
|
||||
}
|
||||
|
||||
if (this.fetchMessageHistoryError) {
|
||||
@@ -487,7 +487,8 @@ export class Convo {
|
||||
} else {
|
||||
this.dispatch({event: ConvoDispatchEvent.Ready})
|
||||
}
|
||||
} catch (e: any) {
|
||||
} catch (err) {
|
||||
const e = err as Error
|
||||
if (!isNetworkError(e) && !isErrorMaybeAppPasswordPermissions(e)) {
|
||||
logger.error('setup failed', {
|
||||
safeMessage: e.message,
|
||||
@@ -557,11 +558,7 @@ export class Convo {
|
||||
async fetchConvo() {
|
||||
if (this.pendingFetchConvo) return this.pendingFetchConvo
|
||||
|
||||
this.pendingFetchConvo = new Promise<{
|
||||
convo: ChatBskyConvoDefs.ConvoView
|
||||
sender: ChatBskyActorDefs.ProfileViewBasic | undefined
|
||||
recipients: ChatBskyActorDefs.ProfileViewBasic[]
|
||||
}>(async (resolve, reject) => {
|
||||
this.pendingFetchConvo = (async () => {
|
||||
try {
|
||||
const response = await networkRetry(2, () => {
|
||||
return this.agent.api.chat.bsky.convo.getConvo(
|
||||
@@ -574,17 +571,15 @@ export class Convo {
|
||||
|
||||
const convo = response.data.convo
|
||||
|
||||
resolve({
|
||||
return {
|
||||
convo,
|
||||
sender: convo.members.find(m => m.did === this.senderUserDid),
|
||||
recipients: convo.members.filter(m => m.did !== this.senderUserDid),
|
||||
})
|
||||
} catch (e) {
|
||||
reject(e)
|
||||
}
|
||||
} finally {
|
||||
this.pendingFetchConvo = undefined
|
||||
}
|
||||
})
|
||||
})()
|
||||
|
||||
return this.pendingFetchConvo
|
||||
}
|
||||
@@ -596,7 +591,8 @@ export class Convo {
|
||||
this.convo = convo || this.convo
|
||||
this.sender = sender || this.sender
|
||||
this.recipients = recipients || this.recipients
|
||||
} catch (e: any) {
|
||||
} catch (err) {
|
||||
const e = err as Error
|
||||
if (!isNetworkError(e) && !isErrorMaybeAppPasswordPermissions(e)) {
|
||||
logger.error(`failed to refresh convo`, {
|
||||
safeMessage: e.message,
|
||||
@@ -664,7 +660,8 @@ export class Convo {
|
||||
this.pastMessages.set(message.id, message)
|
||||
}
|
||||
}
|
||||
} catch (e: any) {
|
||||
} catch (err) {
|
||||
const e = err as Error
|
||||
if (!isNetworkError(e) && !isErrorMaybeAppPasswordPermissions(e)) {
|
||||
logger.error('failed to fetch message history', {
|
||||
safeMessage: e.message,
|
||||
@@ -673,7 +670,7 @@ export class Convo {
|
||||
|
||||
this.fetchMessageHistoryError = {
|
||||
retry: () => {
|
||||
this.fetchMessageHistory()
|
||||
void this.fetchMessageHistory()
|
||||
},
|
||||
}
|
||||
} finally {
|
||||
@@ -716,7 +713,7 @@ export class Convo {
|
||||
|
||||
onFirehoseConnect() {
|
||||
this.firehoseError = undefined
|
||||
this.batchRetryPendingMessages()
|
||||
void this.batchRetryPendingMessages()
|
||||
this.commit()
|
||||
}
|
||||
|
||||
@@ -761,8 +758,8 @@ export class Convo {
|
||||
/**
|
||||
* If this message is already in new messages, it was added by our
|
||||
* sending logic, and is based on client-ordering. When we receive
|
||||
* the "commited" event from the log, we should replace this
|
||||
* reference and re-insert in order to respect the order we receied
|
||||
* the "committed" event from the log, we should replace this
|
||||
* reference and re-insert in order to respect the order we received
|
||||
* from the log.
|
||||
*/
|
||||
if (this.newMessages.has(ev.message.id)) {
|
||||
@@ -836,7 +833,7 @@ export class Convo {
|
||||
this.commit()
|
||||
|
||||
if (!this.isProcessingPendingMessages && !this.pendingMessageFailure) {
|
||||
this.processPendingMessages()
|
||||
void this.processPendingMessages()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -912,7 +909,7 @@ export class Convo {
|
||||
}
|
||||
}
|
||||
|
||||
private handleSendMessageFailure(e: any) {
|
||||
private handleSendMessageFailure(e: Error | XRPCError) {
|
||||
if (e instanceof XRPCError) {
|
||||
if (NETWORK_FAILURE_STATUSES.includes(e.status)) {
|
||||
this.pendingMessageFailure = 'recoverable'
|
||||
@@ -1026,7 +1023,8 @@ export class Convo {
|
||||
{encoding: 'application/json', headers: DM_SERVICE_HEADERS},
|
||||
)
|
||||
})
|
||||
} catch (e: any) {
|
||||
} catch (err) {
|
||||
const e = err as Error
|
||||
if (!isNetworkError(e) && !isErrorMaybeAppPasswordPermissions(e)) {
|
||||
logger.error(`failed to delete message`, {
|
||||
safeMessage: e.message,
|
||||
|
||||
Reference in New Issue
Block a user