Reimplement timeline anchoring (IOS-176)

This commit is contained in:
Marcus Kida 2023-11-27 13:44:26 +01:00
parent faac99cd10
commit 9c5e193673
No known key found for this signature in database
GPG Key ID: 19FF64E08013CA40
2 changed files with 27 additions and 65 deletions

View File

@ -6,9 +6,8 @@
// //
import UIKit import UIKit
import CoreData
import CoreDataStack
import MastodonUI import MastodonUI
import MastodonSDK
extension HomeTimelineViewModel { extension HomeTimelineViewModel {
@ -52,37 +51,19 @@ extension HomeTimelineViewModel {
snapshot.appendItems(newItems, toSection: .main) snapshot.appendItems(newItems, toSection: .main)
return snapshot return snapshot
}() }()
#warning("We probably need to replace the code below")
// let parentManagedObjectContext = self.context.managedObjectContext let anchors: [MastodonFeed] = records.filter { $0.hasMore == true }
// let managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) let itemIdentifiers = newSnapshot.itemIdentifiers
// managedObjectContext.parent = parentManagedObjectContext for (index, item) in itemIdentifiers.enumerated() {
// try? await managedObjectContext.perform { guard case let .feed(record) = item else { continue }
// let anchors: [Feed] = { guard anchors.contains(where: { feed in feed.id == record.id }) else { continue }
// let request = Feed.sortedFetchRequest let isLast = index + 1 == itemIdentifiers.count
// request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [ if isLast {
// Feed.hasMorePredicate(), newSnapshot.insertItems([.bottomLoader], afterItem: item)
// self.fetchedResultsController.predicate, } else {
// ]) newSnapshot.insertItems([.feedLoader(record: record)], afterItem: item)
// do { }
// return try managedObjectContext.fetch(request) }
// } catch {
// assertionFailure(error.localizedDescription)
// return []
// }
// }()
//
// let itemIdentifiers = newSnapshot.itemIdentifiers
// for (index, item) in itemIdentifiers.enumerated() {
// guard case let .feed(record) = item else { continue }
// guard anchors.contains(where: { feed in feed.objectID == record.objectID }) else { continue }
// let isLast = index + 1 == itemIdentifiers.count
// if isLast {
// newSnapshot.insertItems([.bottomLoader], afterItem: item)
// } else {
// newSnapshot.insertItems([.feedLoader(record: record)], afterItem: item)
// }
// }
// }
let hasChanges = newSnapshot.itemIdentifiers != oldSnapshot.itemIdentifiers let hasChanges = newSnapshot.itemIdentifiers != oldSnapshot.itemIdentifiers
if !hasChanges && !self.hasPendingStatusEditReload { if !hasChanges && !self.hasPendingStatusEditReload {

View File

@ -7,7 +7,7 @@
import UIKit import UIKit
import CoreData import CoreData
import CoreDataStack import MastodonSDK
extension NotificationTimelineViewModel { extension NotificationTimelineViewModel {
@ -48,37 +48,18 @@ extension NotificationTimelineViewModel {
return snapshot return snapshot
}() }()
#warning("Do we still need the code below?") let anchors: [MastodonFeed] = records.filter { $0.hasMore == true }
// let parentManagedObjectContext = self.context.managedObjectContext let itemIdentifiers = newSnapshot.itemIdentifiers
// let managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) for (index, item) in itemIdentifiers.enumerated() {
// managedObjectContext.parent = parentManagedObjectContext guard case let .feed(record) = item else { continue }
// try? await managedObjectContext.perform { guard anchors.contains(where: { feed in feed.id == record.id }) else { continue }
// let anchors: [Feed] = { let isLast = index + 1 == itemIdentifiers.count
// let request = Feed.sortedFetchRequest if isLast {
// request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [ newSnapshot.insertItems([.bottomLoader], afterItem: item)
// Feed.hasMorePredicate(), } else {
// self.feedFetchedResultsController.predicate, newSnapshot.insertItems([.feedLoader(record: record)], afterItem: item)
// ]) }
// do { }
// return try managedObjectContext.fetch(request)
// } catch {
// assertionFailure(error.localizedDescription)
// return []
// }
// }()
//
// let itemIdentifiers = newSnapshot.itemIdentifiers
// for (index, item) in itemIdentifiers.enumerated() {
// guard case let .feed(record) = item else { continue }
// guard anchors.contains(where: { feed in feed.objectID == record.objectID }) else { continue }
// let isLast = index + 1 == itemIdentifiers.count
// if isLast {
// newSnapshot.insertItems([.bottomLoader], afterItem: item)
// } else {
// newSnapshot.insertItems([.feedLoader(record: record)], afterItem: item)
// }
// }
// }
let hasChanges = newSnapshot.itemIdentifiers != oldSnapshot.itemIdentifiers let hasChanges = newSnapshot.itemIdentifiers != oldSnapshot.itemIdentifiers
if !hasChanges { if !hasChanges {