Add blocks state to Convo

This commit is contained in:
Eric Bailey
2024-05-14 15:26:29 -05:00
parent 682674de54
commit 4c68e8157c
2 changed files with 32 additions and 25 deletions
+26 -25
View File
@@ -84,6 +84,7 @@ export class Convo {
sender: AppBskyActorDefs.ProfileViewBasic | undefined
recipients: AppBskyActorDefs.ProfileViewBasic[] | undefined = undefined
snapshot: ConvoState | undefined
blocks: AppBskyActorDefs.ProfileViewBasic[] = []
constructor(params: ConvoParams) {
this.id = nanoid(3)
@@ -145,6 +146,7 @@ export class Convo {
error: undefined,
sender: undefined,
recipients: undefined,
blocks: undefined,
isFetchingHistory: this.isFetchingHistory,
deleteMessage: undefined,
sendMessage: undefined,
@@ -162,6 +164,7 @@ export class Convo {
error: undefined,
sender: this.sender!,
recipients: this.recipients!,
blocks: this.blocks,
isFetchingHistory: this.isFetchingHistory,
deleteMessage: this.deleteMessage,
sendMessage: this.sendMessage,
@@ -177,6 +180,7 @@ export class Convo {
error: this.error,
sender: undefined,
recipients: undefined,
blocks: undefined,
isFetchingHistory: false,
deleteMessage: undefined,
sendMessage: undefined,
@@ -192,6 +196,7 @@ export class Convo {
error: undefined,
sender: undefined,
recipients: undefined,
blocks: undefined,
isFetchingHistory: false,
deleteMessage: undefined,
sendMessage: undefined,
@@ -366,6 +371,7 @@ export class Convo {
this.convo = undefined
this.sender = undefined
this.recipients = undefined
this.blocks = []
this.snapshot = undefined
this.status = ConvoStatus.Uninitialized
@@ -385,11 +391,12 @@ export class Convo {
private async setup() {
try {
const {convo, sender, recipients} = await this.fetchConvo()
const {convo, sender, recipients, blocks} = await this.fetchConvo()
this.convo = convo
this.sender = sender
this.recipients = recipients
this.blocks = blocks
/*
* Some validation prior to `Ready` status
@@ -457,6 +464,7 @@ export class Convo {
convo: ChatBskyConvoDefs.ConvoView
sender: AppBskyActorDefs.ProfileViewBasic | undefined
recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
}>
| undefined
async fetchConvo() {
@@ -466,6 +474,7 @@ export class Convo {
convo: ChatBskyConvoDefs.ConvoView
sender: AppBskyActorDefs.ProfileViewBasic | undefined
recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
}>(async (resolve, reject) => {
try {
const response = await networkRetry(2, () => {
@@ -483,6 +492,14 @@ export class Convo {
convo,
sender: convo.members.find(m => m.did === this.senderUserDid),
recipients: convo.members.filter(m => m.did !== this.senderUserDid),
blocks:
convo.members.filter(m =>
Boolean(
m.viewer?.blocking ||
m.viewer?.blockingByList ||
m.viewer?.blockedBy,
),
) || [],
})
} catch (e) {
reject(e)
@@ -494,41 +511,25 @@ export class Convo {
return this.pendingFetchConvo
}
private async refreshConvo() {
private async refreshConvo({commitResult = false} = {}) {
try {
const {convo, sender, recipients} = await this.fetchConvo()
const {convo, sender, recipients, blocks} = await this.fetchConvo()
// throw new Error('UNCOMMENT TO TEST REFRESH FAILURE')
this.convo = convo || this.convo
this.sender = sender || this.sender
this.recipients = recipients || this.recipients
this.blocks = blocks || this.blocks
if (commitResult) {
this.commit()
}
} catch (e: any) {
logger.error(e, {context: `Convo: failed to refresh convo`})
this.footerItems.set(ConvoItemError.Network, {
type: 'error-recoverable',
key: ConvoItemError.Network,
code: ConvoItemError.Network,
retry: () => {
this.footerItems.delete(ConvoItemError.Network)
this.resume()
},
})
this.commit()
}
}
async revalidateConvo() {
try {
const {convo, sender, recipients} = await this.fetchConvo()
// throw new Error('UNCOMMENT TO TEST REFRESH FAILURE')
this.convo = convo || this.convo
this.sender = sender || this.sender
this.recipients = recipients || this.recipients
} catch (e: any) {
logger.error(e, {context: `Convo: failed to revalidate convo`})
} finally {
this.commit()
}
this.refreshConvo({commitResult: true})
}
async fetchMessageHistory() {
+6
View File
@@ -120,6 +120,7 @@ export type ConvoStateUninitialized = {
error: undefined
sender: undefined
recipients: undefined
blocks: undefined
isFetchingHistory: false
deleteMessage: undefined
sendMessage: undefined
@@ -133,6 +134,7 @@ export type ConvoStateInitializing = {
error: undefined
sender: undefined
recipients: undefined
blocks: undefined
isFetchingHistory: boolean
deleteMessage: undefined
sendMessage: undefined
@@ -146,6 +148,7 @@ export type ConvoStateReady = {
error: undefined
sender: AppBskyActorDefs.ProfileViewBasic
recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
isFetchingHistory: boolean
deleteMessage: DeleteMessage
sendMessage: SendMessage
@@ -159,6 +162,7 @@ export type ConvoStateBackgrounded = {
error: undefined
sender: AppBskyActorDefs.ProfileViewBasic
recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
isFetchingHistory: boolean
deleteMessage: DeleteMessage
sendMessage: SendMessage
@@ -172,6 +176,7 @@ export type ConvoStateSuspended = {
error: undefined
sender: AppBskyActorDefs.ProfileViewBasic
recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
isFetchingHistory: boolean
deleteMessage: DeleteMessage
sendMessage: SendMessage
@@ -185,6 +190,7 @@ export type ConvoStateError = {
error: any
sender: undefined
recipients: undefined
blocks: undefined
isFetchingHistory: false
deleteMessage: undefined
sendMessage: undefined