diff --git a/Reader.xcodeproj/xcshareddata/xcschemes/Reader.xcscheme b/Reader.xcodeproj/xcshareddata/xcschemes/Reader.xcscheme
index 262264b..f1a484a 100644
--- a/Reader.xcodeproj/xcshareddata/xcschemes/Reader.xcscheme
+++ b/Reader.xcodeproj/xcshareddata/xcschemes/Reader.xcscheme
@@ -77,7 +77,7 @@
+ isEnabled = "NO">
diff --git a/Reader/Screens/Home/HomeCollectionViewCell.swift b/Reader/Screens/Home/HomeCollectionViewCell.swift
index 2ac2b97..e19098c 100644
--- a/Reader/Screens/Home/HomeCollectionViewCell.swift
+++ b/Reader/Screens/Home/HomeCollectionViewCell.swift
@@ -14,7 +14,7 @@ private let signposter = OSSignposter(subsystem: "net.shadowfacts.Reader", categ
class HomeCollectionViewCell: UICollectionViewListCell {
- private var currentItemListType: ItemListType?
+ private var currentItemCountTask: Task?
private var itemCount: Int?
#if !targetEnvironment(macCatalyst)
@@ -31,12 +31,11 @@ class HomeCollectionViewCell: UICollectionViewListCell {
override func prepareForReuse() {
super.prepareForReuse()
+ currentItemCountTask?.cancel()
itemCount = nil
}
func updateUI(item: ItemListType, persistentContainer: PersistentContainer) {
- self.currentItemListType = item
-
var config = UIListContentConfiguration.valueCell()
config.text = item.title
if let itemCount {
@@ -45,10 +44,10 @@ class HomeCollectionViewCell: UICollectionViewListCell {
config.secondaryTextProperties.color = .tintColor
self.contentConfiguration = config
- Task(priority: .userInitiated) {
- let state = signposter.beginInterval("fetch count", id: signposter.makeSignpostID())
+ currentItemCountTask = Task(priority: .userInitiated) {
+ let state = signposter.beginInterval("fetch count", id: signposter.makeSignpostID(), "\(String(item.hashValue, radix: 16), privacy: .public)")
if let count = await fetchCount(item: item, in: persistentContainer),
- self.currentItemListType == item {
+ !Task.isCancelled {
self.itemCount = count
config.secondaryText = count.formatted(.number)
self.contentConfiguration = config
@@ -62,9 +61,12 @@ class HomeCollectionViewCell: UICollectionViewListCell {
return nil
}
return await withCheckedContinuation({ continuation in
- let context = persistentContainer.backgroundContext
- context.perform {
+ let state = signposter.beginInterval("waiting to perform", id: signposter.makeSignpostID(), "\(String(item.hashValue, radix: 16), privacy: .public)")
+ persistentContainer.performBackgroundTask { context in
+ signposter.endInterval("waiting to perform", state)
+ let state = signposter.beginInterval("count", id: signposter.makeSignpostID(), "\(String(item.hashValue, radix: 16), privacy: .public)")
let count = try? context.count(for: request)
+ signposter.endInterval("count", state)
continuation.resume(returning: count)
}
})