From 271f7433d40a1e96d48edee077c5b4bc2050c234 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 18 Jul 2020 16:36:20 -0500 Subject: [PATCH] Use a table to look up TimelineItem position instead of spinning through the TimelineItems --- .../Shared/Timeline/TimelineModel.swift | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/Multiplatform/Shared/Timeline/TimelineModel.swift b/Multiplatform/Shared/Timeline/TimelineModel.swift index ab8d7604c..d293e2eb8 100644 --- a/Multiplatform/Shared/Timeline/TimelineModel.swift +++ b/Multiplatform/Shared/Timeline/TimelineModel.swift @@ -26,7 +26,6 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { weak var delegate: TimelineModelDelegate? @Published var nameForDisplay = "" - @Published var timelineItems = [TimelineItem]() @Published var selectedArticleIDs = Set() // Don't use directly. Use selectedArticles @Published var selectedArticleID: String? = .none // Don't use directly. Use selectedArticles @Published var selectedArticles = [Article]() @@ -38,6 +37,12 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { articleDictionaryNeedsUpdate = true } } + + @Published var timelineItems = [TimelineItem]() { + didSet { + timelineItemDictionaryNeedsUpdate = true + } + } var undoManager: UndoManager? var undoableCommands = [UndoableCommand]() @@ -58,6 +63,15 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { return _idToArticleDictionary } + private var timelineItemDictionaryNeedsUpdate = true + private var _idToTimelineItemDictionary = [String: Int]() + private var idToTimelineItemDictionary: [String: Int] { + if timelineItemDictionaryNeedsUpdate { + rebuildTimelineItemDictionaries() + } + return _idToTimelineItemDictionary + } + private var sortDirection = AppDefaults.shared.timelineSortDirection { didSet { if sortDirection != oldValue { @@ -79,9 +93,9 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { guard let self = self, let articleIDs = note.userInfo?[Account.UserInfoKey.articleIDs] as? Set else { return } - for i in 0..