Tweak notification grouping
Notifications that are of the same type but are separated by a groupable notification of a different type are now considered groupable. For example: favorite 1 (status 1) reblog 1 (status 1) favorite 2 (status 1) reblog 2 (status 1) mention 1 reblog 3 (status 1) will be grouped into: favorite 1, 2 (status 1) reblog 1, 2 (status 1) mention 1 reblog 3 (status 1)
This commit is contained in:
parent
d9bae42f81
commit
70bca052c4
|
@ -27,18 +27,24 @@ public class NotificationGroup {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func createGroups(notifications: [Notification], only allowedTypes: [Notification.Kind]) -> [NotificationGroup] {
|
public static func createGroups(notifications: [Notification], only allowedTypes: [Notification.Kind]) -> [NotificationGroup] {
|
||||||
return notifications.reduce(into: [[Notification]]()) { (groups, notification) in
|
var groups = [[Notification]]()
|
||||||
if allowedTypes.contains(notification.kind),
|
for notification in notifications {
|
||||||
let lastGroup = groups.last,
|
if allowedTypes.contains(notification.kind) {
|
||||||
let firstStatus = lastGroup.first,
|
if let lastGroup = groups.last, let firstNotification = lastGroup.first, firstNotification.kind == notification.kind, firstNotification.status?.id == notification.status?.id {
|
||||||
firstStatus.kind == notification.kind,
|
|
||||||
firstStatus.status?.id == notification.status?.id {
|
|
||||||
|
|
||||||
groups[groups.count - 1].append(notification)
|
groups[groups.count - 1].append(notification)
|
||||||
} else {
|
continue
|
||||||
|
} else if groups.count >= 2 {
|
||||||
|
let secondToLastGroup = groups[groups.count - 2]
|
||||||
|
if allowedTypes.contains(groups[groups.count - 1][0].kind), let firstNotification = secondToLastGroup.first, firstNotification.kind == notification.kind, firstNotification.status?.id == notification.status?.id {
|
||||||
|
groups[groups.count - 2].append(notification)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
groups.append([notification])
|
groups.append([notification])
|
||||||
}
|
}
|
||||||
}.map {
|
return groups.map {
|
||||||
NotificationGroup(notifications: $0)!
|
NotificationGroup(notifications: $0)!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue