diff --git a/Packages/Timeline/Sources/Timeline/TimelineView.swift b/Packages/Timeline/Sources/Timeline/TimelineView.swift index 672534c9..3bb67cd8 100644 --- a/Packages/Timeline/Sources/Timeline/TimelineView.swift +++ b/Packages/Timeline/Sources/Timeline/TimelineView.swift @@ -7,6 +7,7 @@ import DesignSystem import Env public struct TimelineView: View { + @EnvironmentObject private var account: CurrentAccount @EnvironmentObject private var watcher: StreamWatcher @EnvironmentObject private var client: Client @StateObject private var viewModel = TimelineViewModel() @@ -56,7 +57,7 @@ public struct TimelineView: View { } .onChange(of: watcher.latestEvent?.id) { id in if let latestEvent = watcher.latestEvent { - viewModel.handleEvent(event: latestEvent) + viewModel.handleEvent(event: latestEvent, currentAccount: account) } } } diff --git a/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift b/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift index e8f226db..10fa7875 100644 --- a/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift +++ b/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift @@ -2,6 +2,7 @@ import SwiftUI import Network import Models import Status +import Env @MainActor class TimelineViewModel: ObservableObject, StatusesFetcher { @@ -85,10 +86,15 @@ class TimelineViewModel: ObservableObject, StatusesFetcher { } catch {} } - func handleEvent(event: any StreamEvent) { + func handleEvent(event: any StreamEvent, currentAccount: CurrentAccount) { guard timeline == .home else { return } if let event = event as? StreamEventUpdate { - pendingStatuses.insert(event.status, at: 0) + if event.status.account.id == currentAccount.account?.id { + statuses.insert(event.status, at: 0) + statusesState = .display(statuses: statuses, nextPageState: .hasNextPage) + } else { + pendingStatuses.insert(event.status, at: 0) + } } else if let event = event as? StreamEventDelete { statuses.removeAll(where: { $0.id == event.status }) statusesState = .display(statuses: statuses, nextPageState: .hasNextPage)