forked from shadowfacts/Tusker
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] {
|
||||
return notifications.reduce(into: [[Notification]]()) { (groups, notification) in
|
||||
if allowedTypes.contains(notification.kind),
|
||||
let lastGroup = groups.last,
|
||||
let firstStatus = lastGroup.first,
|
||||
firstStatus.kind == notification.kind,
|
||||
firstStatus.status?.id == notification.status?.id {
|
||||
|
||||
var groups = [[Notification]]()
|
||||
for notification in notifications {
|
||||
if allowedTypes.contains(notification.kind) {
|
||||
if let lastGroup = groups.last, let firstNotification = lastGroup.first, firstNotification.kind == notification.kind, firstNotification.status?.id == notification.status?.id {
|
||||
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])
|
||||
}
|
||||
}.map {
|
||||
return groups.map {
|
||||
NotificationGroup(notifications: $0)!
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue