[🐴] Handle errors, improve styling (#3937)

* Handle errors, improve styling

* Remove old UI
This commit is contained in:
Eric Bailey 2024-05-10 08:23:37 -05:00 committed by GitHub
parent 1821a992ab
commit 195c9f1045
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 96 additions and 78 deletions

View file

@ -401,7 +401,7 @@ export class Convo {
// throw new Error('UNCOMMENT TO TEST INIT FAILURE')
this.dispatch({event: ConvoDispatchEvent.Ready})
} catch (e: any) {
logger.error('Convo: setup() failed')
logger.error(e, {context: 'Convo: setup failed'})
this.dispatch({
event: ConvoDispatchEvent.Error,
@ -413,6 +413,7 @@ export class Convo {
},
},
})
this.commit()
}
}
@ -500,7 +501,7 @@ export class Convo {
this.sender = sender || this.sender
this.recipients = recipients || this.recipients
} catch (e: any) {
logger.error(`Convo: failed to refresh convo`)
logger.error(e, {context: `Convo: failed to refresh convo`})
this.footerItems.set(ConvoItemError.Network, {
type: 'error-recoverable',
@ -601,17 +602,17 @@ export class Convo {
}
onFirehoseConnect() {
this.footerItems.delete(ConvoItemError.PollFailed)
this.footerItems.delete(ConvoItemError.FirehoseFailed)
this.commit()
}
onFirehoseError(error?: MessagesEventBusError) {
this.footerItems.set(ConvoItemError.PollFailed, {
this.footerItems.set(ConvoItemError.FirehoseFailed, {
type: 'error-recoverable',
key: ConvoItemError.PollFailed,
code: ConvoItemError.PollFailed,
key: ConvoItemError.FirehoseFailed,
code: ConvoItemError.FirehoseFailed,
retry: () => {
this.footerItems.delete(ConvoItemError.PollFailed)
this.footerItems.delete(ConvoItemError.FirehoseFailed)
this.commit()
error?.retry()
},
@ -772,13 +773,21 @@ export class Convo {
await this.processPendingMessages()
this.commit()
} catch (e) {
this.footerItems.set('pending-retry', {
type: 'pending-retry',
key: 'pending-retry',
retry: this.batchRetryPendingMessages.bind(this),
} catch (e: any) {
logger.error(e, {context: `Convo: failed to send message`})
this.footerItems.set(ConvoItemError.PendingFailed, {
type: 'error-recoverable',
key: ConvoItemError.PendingFailed,
code: ConvoItemError.PendingFailed,
retry: () => {
this.footerItems.delete(ConvoItemError.PendingFailed)
this.commit()
this.batchRetryPendingMessages()
},
})
this.commit()
} finally {
this.isProcessingPendingMessages = false
}
}
@ -789,10 +798,8 @@ export class Convo {
logger.DebugContext.convo,
)
this.footerItems.delete('pending-retry')
this.commit()
try {
// throw new Error('UNCOMMENT TO TEST RETRY')
const messageArray = Array.from(this.pendingMessages.values())
const {data} = await networkRetry(2, () => {
return this.agent.api.chat.bsky.convo.sendMessageBatch(
@ -831,11 +838,23 @@ export class Convo {
}
this.commit()
} catch (e) {
this.footerItems.set('pending-retry', {
type: 'pending-retry',
key: 'pending-retry',
retry: this.batchRetryPendingMessages.bind(this),
logger.debug(
`Convo: sent ${this.pendingMessages.size} pending messages`,
{},
logger.DebugContext.convo,
)
} catch (e: any) {
logger.error(e, {context: `Convo: failed to batch retry messages`})
this.footerItems.set(ConvoItemError.PendingFailed, {
type: 'error-recoverable',
key: ConvoItemError.PendingFailed,
code: ConvoItemError.PendingFailed,
retry: () => {
this.footerItems.delete(ConvoItemError.PendingFailed)
this.commit()
this.batchRetryPendingMessages()
},
})
this.commit()
}
@ -862,7 +881,8 @@ export class Convo {
},
)
})
} catch (e) {
} catch (e: any) {
logger.error(e, {context: `Convo: failed to delete message`})
this.deletedMessages.delete(messageId)
this.commit()
throw e
@ -875,10 +895,6 @@ export class Convo {
getItems(): ConvoItem[] {
const items: ConvoItem[] = []
this.headerItems.forEach(item => {
items.push(item)
})
this.pastMessages.forEach(m => {
if (ChatBskyConvoDefs.isMessageView(m)) {
items.unshift({
@ -897,6 +913,10 @@ export class Convo {
}
})
this.headerItems.forEach(item => {
items.unshift(item)
})
this.newMessages.forEach(m => {
if (ChatBskyConvoDefs.isMessageView(m)) {
items.push({

View file

@ -24,9 +24,22 @@ export enum ConvoStatus {
}
export enum ConvoItemError {
HistoryFailed = 'historyFailed',
PollFailed = 'pollFailed',
/**
* Generic error
*/
Network = 'network',
/**
* Error connecting to event firehose
*/
FirehoseFailed = 'firehoseFailed',
/**
* Error fetching past messages
*/
HistoryFailed = 'historyFailed',
/**
* Error sending new message
*/
PendingFailed = 'pendingFailed',
}
export enum ConvoErrorCode {
@ -88,11 +101,6 @@ export type ConvoItem =
| ChatBskyConvoDefs.DeletedMessageView
| null
}
| {
type: 'pending-retry'
key: string
retry: () => void
}
| {
type: 'error-recoverable'
key: string