Fix non-mention notifications showing in Mentions tab on Pleroma

e0d97cd2a8 introduced a regression on Pleroma, because specifying the
allowed types of notifications in the Masto API was only added in 3.5
This commit is contained in:
Shadowfacts 2022-12-22 14:41:56 -05:00
parent 9f86158bb7
commit 1cb0f1ae56
3 changed files with 25 additions and 6 deletions

View File

@ -306,6 +306,14 @@ public class Client {
return request
}
public static func getNotifications(excludedTypes: [Notification.Kind], range: RequestRange = .default) -> Request<[Notification]> {
var request = Request<[Notification]>(method: .get, path: "/api/v1/notifications", queryParameters:
"exclude_types" => excludedTypes.map { $0.rawValue }
)
request.range = range
return request
}
public static func clearNotifications() -> Request<Empty> {
return Request<Empty>(method: .post, path: "/api/v1/notifications/clear")
}

View File

@ -93,6 +93,10 @@ struct InstanceFeatures {
hasMastodonVersion(4, 0, 0)
}
var notificationsAllowedTypes: Bool {
hasMastodonVersion(3, 5, 0)
}
mutating func update(instance: Instance, nodeInfo: NodeInfo?) {
let ver = instance.version.lowercased()
if ver.contains("glitch") {

View File

@ -57,6 +57,16 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
tableView.register(UINib(nibName: "BasicTableViewCell", bundle: .main), forCellReuseIdentifier: unknownCell)
}
private func request(range: RequestRange) -> Request<[Pachyderm.Notification]> {
if mastodonController.instanceFeatures.notificationsAllowedTypes {
return Client.getNotifications(allowedTypes: allowedTypes, range: range)
} else {
var types = Set(Notification.Kind.allCases)
allowedTypes.forEach { types.remove($0) }
return Client.getNotifications(excludedTypes: Array(types), range: range)
}
}
// MARK: - DiffableTimelineLikeTableViewController
override func cellProvider(_ tableView: UITableView, _ indexPath: IndexPath, _ item: Item) -> UITableViewCell? {
@ -140,8 +150,7 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
}
override func loadInitialItems(completion: @escaping (LoadResult) -> Void) {
let request = Client.getNotifications(allowedTypes: allowedTypes)
mastodonController.run(request) { (response) in
mastodonController.run(request(range: .default)) { (response) in
switch response {
case let .failure(error):
completion(.failure(.client(error)))
@ -171,8 +180,7 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
return
}
let request = Client.getNotifications(allowedTypes: allowedTypes, range: older)
mastodonController.run(request) { (response) in
mastodonController.run(request(range: older)) { (response) in
switch response {
case let .failure(error):
completion(.failure(.client(error)))
@ -203,8 +211,7 @@ class NotificationsTableViewController: DiffableTimelineLikeTableViewController<
return
}
let request = Client.getNotifications(allowedTypes: allowedTypes, range: newer)
mastodonController.run(request) { (response) in
mastodonController.run(request(range: newer)) { (response) in
switch response {
case let .failure(error):
completion(.failure(.client(error)))