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 sender: AppBskyActorDefs.ProfileViewBasic | undefined
recipients: AppBskyActorDefs.ProfileViewBasic[] | undefined = undefined recipients: AppBskyActorDefs.ProfileViewBasic[] | undefined = undefined
snapshot: ConvoState | undefined snapshot: ConvoState | undefined
blocks: AppBskyActorDefs.ProfileViewBasic[] = []
constructor(params: ConvoParams) { constructor(params: ConvoParams) {
this.id = nanoid(3) this.id = nanoid(3)
@@ -145,6 +146,7 @@ export class Convo {
error: undefined, error: undefined,
sender: undefined, sender: undefined,
recipients: undefined, recipients: undefined,
blocks: undefined,
isFetchingHistory: this.isFetchingHistory, isFetchingHistory: this.isFetchingHistory,
deleteMessage: undefined, deleteMessage: undefined,
sendMessage: undefined, sendMessage: undefined,
@@ -162,6 +164,7 @@ export class Convo {
error: undefined, error: undefined,
sender: this.sender!, sender: this.sender!,
recipients: this.recipients!, recipients: this.recipients!,
blocks: this.blocks,
isFetchingHistory: this.isFetchingHistory, isFetchingHistory: this.isFetchingHistory,
deleteMessage: this.deleteMessage, deleteMessage: this.deleteMessage,
sendMessage: this.sendMessage, sendMessage: this.sendMessage,
@@ -177,6 +180,7 @@ export class Convo {
error: this.error, error: this.error,
sender: undefined, sender: undefined,
recipients: undefined, recipients: undefined,
blocks: undefined,
isFetchingHistory: false, isFetchingHistory: false,
deleteMessage: undefined, deleteMessage: undefined,
sendMessage: undefined, sendMessage: undefined,
@@ -192,6 +196,7 @@ export class Convo {
error: undefined, error: undefined,
sender: undefined, sender: undefined,
recipients: undefined, recipients: undefined,
blocks: undefined,
isFetchingHistory: false, isFetchingHistory: false,
deleteMessage: undefined, deleteMessage: undefined,
sendMessage: undefined, sendMessage: undefined,
@@ -366,6 +371,7 @@ export class Convo {
this.convo = undefined this.convo = undefined
this.sender = undefined this.sender = undefined
this.recipients = undefined this.recipients = undefined
this.blocks = []
this.snapshot = undefined this.snapshot = undefined
this.status = ConvoStatus.Uninitialized this.status = ConvoStatus.Uninitialized
@@ -385,11 +391,12 @@ export class Convo {
private async setup() { private async setup() {
try { try {
const {convo, sender, recipients} = await this.fetchConvo() const {convo, sender, recipients, blocks} = await this.fetchConvo()
this.convo = convo this.convo = convo
this.sender = sender this.sender = sender
this.recipients = recipients this.recipients = recipients
this.blocks = blocks
/* /*
* Some validation prior to `Ready` status * Some validation prior to `Ready` status
@@ -457,6 +464,7 @@ export class Convo {
convo: ChatBskyConvoDefs.ConvoView convo: ChatBskyConvoDefs.ConvoView
sender: AppBskyActorDefs.ProfileViewBasic | undefined sender: AppBskyActorDefs.ProfileViewBasic | undefined
recipients: AppBskyActorDefs.ProfileViewBasic[] recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
}> }>
| undefined | undefined
async fetchConvo() { async fetchConvo() {
@@ -466,6 +474,7 @@ export class Convo {
convo: ChatBskyConvoDefs.ConvoView convo: ChatBskyConvoDefs.ConvoView
sender: AppBskyActorDefs.ProfileViewBasic | undefined sender: AppBskyActorDefs.ProfileViewBasic | undefined
recipients: AppBskyActorDefs.ProfileViewBasic[] recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
}>(async (resolve, reject) => { }>(async (resolve, reject) => {
try { try {
const response = await networkRetry(2, () => { const response = await networkRetry(2, () => {
@@ -483,6 +492,14 @@ export class Convo {
convo, convo,
sender: convo.members.find(m => m.did === this.senderUserDid), sender: convo.members.find(m => m.did === this.senderUserDid),
recipients: convo.members.filter(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) { } catch (e) {
reject(e) reject(e)
@@ -494,41 +511,25 @@ export class Convo {
return this.pendingFetchConvo return this.pendingFetchConvo
} }
private async refreshConvo() { private async refreshConvo({commitResult = false} = {}) {
try { try {
const {convo, sender, recipients} = await this.fetchConvo() const {convo, sender, recipients, blocks} = await this.fetchConvo()
// throw new Error('UNCOMMENT TO TEST REFRESH FAILURE') // throw new Error('UNCOMMENT TO TEST REFRESH FAILURE')
this.convo = convo || this.convo this.convo = convo || this.convo
this.sender = sender || this.sender this.sender = sender || this.sender
this.recipients = recipients || this.recipients this.recipients = recipients || this.recipients
this.blocks = blocks || this.blocks
if (commitResult) {
this.commit()
}
} catch (e: any) { } catch (e: any) {
logger.error(e, {context: `Convo: failed to refresh convo`}) 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() { async revalidateConvo() {
try { this.refreshConvo({commitResult: true})
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()
}
} }
async fetchMessageHistory() { async fetchMessageHistory() {
+6
View File
@@ -120,6 +120,7 @@ export type ConvoStateUninitialized = {
error: undefined error: undefined
sender: undefined sender: undefined
recipients: undefined recipients: undefined
blocks: undefined
isFetchingHistory: false isFetchingHistory: false
deleteMessage: undefined deleteMessage: undefined
sendMessage: undefined sendMessage: undefined
@@ -133,6 +134,7 @@ export type ConvoStateInitializing = {
error: undefined error: undefined
sender: undefined sender: undefined
recipients: undefined recipients: undefined
blocks: undefined
isFetchingHistory: boolean isFetchingHistory: boolean
deleteMessage: undefined deleteMessage: undefined
sendMessage: undefined sendMessage: undefined
@@ -146,6 +148,7 @@ export type ConvoStateReady = {
error: undefined error: undefined
sender: AppBskyActorDefs.ProfileViewBasic sender: AppBskyActorDefs.ProfileViewBasic
recipients: AppBskyActorDefs.ProfileViewBasic[] recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
isFetchingHistory: boolean isFetchingHistory: boolean
deleteMessage: DeleteMessage deleteMessage: DeleteMessage
sendMessage: SendMessage sendMessage: SendMessage
@@ -159,6 +162,7 @@ export type ConvoStateBackgrounded = {
error: undefined error: undefined
sender: AppBskyActorDefs.ProfileViewBasic sender: AppBskyActorDefs.ProfileViewBasic
recipients: AppBskyActorDefs.ProfileViewBasic[] recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
isFetchingHistory: boolean isFetchingHistory: boolean
deleteMessage: DeleteMessage deleteMessage: DeleteMessage
sendMessage: SendMessage sendMessage: SendMessage
@@ -172,6 +176,7 @@ export type ConvoStateSuspended = {
error: undefined error: undefined
sender: AppBskyActorDefs.ProfileViewBasic sender: AppBskyActorDefs.ProfileViewBasic
recipients: AppBskyActorDefs.ProfileViewBasic[] recipients: AppBskyActorDefs.ProfileViewBasic[]
blocks: AppBskyActorDefs.ProfileViewBasic[]
isFetchingHistory: boolean isFetchingHistory: boolean
deleteMessage: DeleteMessage deleteMessage: DeleteMessage
sendMessage: SendMessage sendMessage: SendMessage
@@ -185,6 +190,7 @@ export type ConvoStateError = {
error: any error: any
sender: undefined sender: undefined
recipients: undefined recipients: undefined
blocks: undefined
isFetchingHistory: false isFetchingHistory: false
deleteMessage: undefined deleteMessage: undefined
sendMessage: undefined sendMessage: undefined