diff --git a/PocketKit/Sources/PocketKit/Home/Models/HomeActions.swift b/PocketKit/Sources/PocketKit/Home/Models/HomeActions.swift index fdea3ade2..c1761f81d 100644 --- a/PocketKit/Sources/PocketKit/Home/Models/HomeActions.swift +++ b/PocketKit/Sources/PocketKit/Home/Models/HomeActions.swift @@ -102,16 +102,24 @@ extension HomeActions { } } - func trackSlateDetailImpression(info: SlateInfo) { + func trackSlateDetailImpression(_ slateID: String) { Task(priority: .background) { + let source = await Services.shared.source + guard let slate = source.fetchSlate(slateID) else { + return + } let tracker = await Services.shared.tracker + var sortIndex: Int? + if let index = slate.sortIndex { + sortIndex = Int(truncating: index) + } tracker.track( event: Events.ExpandedSlate.slateExpanded( - slateId: info.slateId, - slateRequestId: info.slateRequestId, - slateExperimentId: info.slateExperimentId, - slateIndex: info.slateIndex, - slateLineupId: info.slateLineupId + slateId: slateID, + slateRequestId: slate.requestID, + slateExperimentId: slate.experimentID, + slateIndex: sortIndex ?? 0, + slateLineupId: slate.slateLineup?.remoteID ?? "" ) ) } diff --git a/PocketKit/Sources/PocketKit/Home/Views/Detail views/SlateDetailView.swift b/PocketKit/Sources/PocketKit/Home/Views/Detail views/SlateDetailView.swift index 4cd8a0bd9..8f9d7401e 100644 --- a/PocketKit/Sources/PocketKit/Home/Views/Detail views/SlateDetailView.swift +++ b/PocketKit/Sources/PocketKit/Home/Views/Detail views/SlateDetailView.swift @@ -44,10 +44,7 @@ struct SlateDetailView: View { } } .onAppear { - guard let slateInfo = slateInfo(destination) else { - return - } - homeActions.trackSlateDetailImpression(info: slateInfo) + homeActions.trackSlateDetailImpression(destination.slateID) } .animation(.smooth, value: cards) .navigationTitle(destination.slateTitle ?? "") @@ -66,7 +63,7 @@ private extension SlateDetailView { type: .slateDetail, index: $0.offset, shareURL: item.shareURL, - domain: item.bestDomain, + domain: item.domain, timeToRead: item.timeToRead, isSyndicated: item.isSyndicated, recommendationID: item.recommendation?.analyticsID, @@ -83,23 +80,6 @@ private extension SlateDetailView { } } - /// Fetch analytics info for this slate - /// - Parameter destination: slate destination of this slate - /// - Returns: analytics info - func slateInfo(_ destination: SlateDestination) -> SlateInfo? { - guard let slate = fetchSlate(destination.slateID), - let lineup = fetchSlateLineup() else { - return nil - } - return SlateInfo( - slateId: slate.remoteID, - slateRequestId: slate.requestID, - slateExperimentId: slate.experimentID, - slateIndex: Int(slate.sortIndex ?? 0), - slateLineupId: lineup.remoteID - ) - } - /// Fetch an `Item` from the underlying `Recommendation` /// - Parameter recommendationID: `Recommendation` ID /// - Returns: the item, if it was found @@ -112,19 +92,6 @@ private extension SlateDetailView { return result.first } - /// Fetch the current slate from SwiftData - /// - Parameter remoteID: the remote id of this slate - /// - Returns: the slate, if it was found - @MainActor - func fetchSlate(_ remoteID: String) -> Slate? { - let predicate = #Predicate { $0.remoteID == remoteID } - var fetchDescriptor = FetchDescriptor(predicate: predicate) - fetchDescriptor.fetchLimit = 1 - - let result = (try? modelContext.fetch(fetchDescriptor)) ?? [] - return result.first - } - /// Fettch the current slate lineup /// - Returns: the slate lineup, if it was found func fetchSlateLineup() -> SlateLineup? { diff --git a/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecentSavesView.swift b/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecentSavesView.swift index fbcac39e2..53029ffe3 100644 --- a/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecentSavesView.swift +++ b/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecentSavesView.swift @@ -79,7 +79,7 @@ private extension RecentSavesView { type: .recentSave, index: $0.offset, shareURL: item.shareURL, - domain: item.bestDomain, + domain: item.domain, timeToRead: item.timeToRead, isSyndicated: item.isSyndicated == true, recommendationID: item.recommendation?.analyticsID, diff --git a/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecommendationsView.swift b/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecommendationsView.swift index 1ab3ef63b..4f52793cd 100644 --- a/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecommendationsView.swift +++ b/PocketKit/Sources/PocketKit/Home/Views/Top level views/RecommendationsView.swift @@ -139,10 +139,10 @@ private extension RecommendationsView { type: .recommendation, index: Int($0.sortIndex), shareURL: item.shareURL, - domain: item.bestDomain, + domain: item.domain, timeToRead: item.timeToRead, isSyndicated: item.isSyndicated, - recommendationID: item.recommendation?.analyticsID, + recommendationID: $0.analyticsID, bestTitle: item.bestTitle, slug: item.collectionSlug, excerpt: item.excerpt, diff --git a/PocketKit/Sources/Sync/PocketSource.swift b/PocketKit/Sources/Sync/PocketSource.swift index da9ffba30..36daa8e85 100644 --- a/PocketKit/Sources/Sync/PocketSource.swift +++ b/PocketKit/Sources/Sync/PocketSource.swift @@ -1036,6 +1036,10 @@ extension PocketSource { } return updatedItem } + + public func fetchSlate( _ slateID: String) -> CDSlate? { + try? space.fetchSlate(byRemoteID: slateID) + } } // MARK: - Collections diff --git a/PocketKit/Sources/Sync/Source.swift b/PocketKit/Sources/Sync/Source.swift index a5d072c1e..fd2b9f9a7 100644 --- a/PocketKit/Sources/Sync/Source.swift +++ b/PocketKit/Sources/Sync/Source.swift @@ -136,6 +136,8 @@ public protocol Source { func fetchSavedItem(_ url: String) -> CDSavedItem? + func fetchSlate( _ slateID: String) -> CDSlate? + /// Get the count of unread saves /// - Returns: Int of unread saves func unreadSaves() throws -> Int diff --git a/PocketKit/Tests/PocketKitTests/Support/MockSource.swift b/PocketKit/Tests/PocketKitTests/Support/MockSource.swift index 1da8500bf..0b75ee398 100644 --- a/PocketKit/Tests/PocketKitTests/Support/MockSource.swift +++ b/PocketKit/Tests/PocketKitTests/Support/MockSource.swift @@ -8,6 +8,10 @@ import CoreData import Combine class MockSource: Source { + func fetchSlate(_ slateID: String) -> Sync.CDSlate? { + nil + } + func makeNotesController() -> NSFetchedResultsController { NSFetchedResultsController() }