Exclude notifications that are missing statuses

It's still unclear why this ever happens, but crashing is untenable

See #274
This commit is contained in:
Shadowfacts 2023-04-16 13:59:38 -04:00
parent f89d2c1cca
commit ab8ccbb408
1 changed files with 18 additions and 13 deletions

View File

@ -165,8 +165,9 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
}
}
private func validateNotifications(_ notifications: [Pachyderm.Notification]) {
for notif in notifications where notif.status == nil && (notif.kind == .mention || notif.kind == .reblog || notif.kind == .favourite) {
private func validateNotifications(_ notifications: [Pachyderm.Notification]) -> [Pachyderm.Notification] {
return notifications.compactMap { notif in
if notif.status == nil && (notif.kind == .mention || notif.kind == .reblog || notif.kind == .favourite) {
let crumb = Breadcrumb(level: .fatal, category: "notifications")
crumb.data = [
"id": notif.id,
@ -175,6 +176,10 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
"account": notif.account.id,
]
SentrySDK.addBreadcrumb(crumb)
return nil
} else {
return notif
}
}
}
@ -185,7 +190,7 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
completion(.failure(.client(error)))
case let .success(notifications, _):
self.validateNotifications(notifications)
let notifications = self.validateNotifications(notifications)
let groups = NotificationGroup.createGroups(notifications: notifications, only: self.groupTypes)
if !notifications.isEmpty {
@ -215,7 +220,7 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
completion(.failure(.client(error)))
case let .success(newNotifications, _):
self.validateNotifications(newNotifications)
let newNotifications = self.validateNotifications(newNotifications)
if !newNotifications.isEmpty {
self.older = .before(id: newNotifications.last!.id, count: nil)
}
@ -246,7 +251,7 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
completion(.failure(.client(error)))
case let .success(newNotifications, _):
self.validateNotifications(newNotifications)
let newNotifications = self.validateNotifications(newNotifications)
guard !newNotifications.isEmpty else {
completion(.failure(.allCaughtUp))
return