diff --git a/Multiplatform/Shared/MainApp.swift b/Multiplatform/Shared/MainApp.swift index 2ac3f1505..8bc01dd22 100644 --- a/Multiplatform/Shared/MainApp.swift +++ b/Multiplatform/Shared/MainApp.swift @@ -26,8 +26,9 @@ struct MainApp: App { WindowGroup { SceneNavigationView() .frame(minWidth: 600, idealWidth: 1000, maxWidth: .infinity, minHeight: 600, idealHeight: 700, maxHeight: .infinity) - .environmentObject(defaults) + .onAppear { refreshProgress.startup() } .environmentObject(refreshProgress) + .environmentObject(defaults) } .windowToolbarStyle(UnifiedWindowToolbarStyle()) .commands { @@ -86,8 +87,9 @@ struct MainApp: App { #if os(iOS) WindowGroup { SceneNavigationView() - .environmentObject(defaults) + .onAppear { refreshProgress.startup() } .environmentObject(refreshProgress) + .environmentObject(defaults) .modifier(PreferredColorSchemeModifier(preferredColorScheme: defaults.userInterfaceColorPalette)) } .commands { diff --git a/Multiplatform/Shared/Previews/PreviewProvider+RefreshProgressModel.swift b/Multiplatform/Shared/Previews/PreviewProvider+RefreshProgressModel.swift deleted file mode 100644 index 8538f7c8b..000000000 --- a/Multiplatform/Shared/Previews/PreviewProvider+RefreshProgressModel.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// PreviewProvider+RefreshProgressModel.swift -// NetNewsWire -// -// Created by Phil Viso on 7/3/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import Account -import Foundation -import RSWeb -import SwiftUI - -extension PreviewProvider { - - static func refreshProgressModel(lastRefreshDate: Date?, - tasksCompleted: Int, - totalTasks: Int) -> RefreshProgressModel { - return RefreshProgressModel { () -> Date? in - return lastRefreshDate - } combinedRefreshProgressProvider: { () -> CombinedRefreshProgress in - let progress = DownloadProgress(numberOfTasks: totalTasks) - progress.numberRemaining = totalTasks - tasksCompleted - - return CombinedRefreshProgress(downloadProgressArray: [progress]) - } - } - -} diff --git a/Multiplatform/Shared/RefreshProgressModel.swift b/Multiplatform/Shared/RefreshProgressModel.swift index 0c662d6c6..cdf2f5747 100644 --- a/Multiplatform/Shared/RefreshProgressModel.swift +++ b/Multiplatform/Shared/RefreshProgressModel.swift @@ -28,19 +28,11 @@ class RefreshProgressModel: ObservableObject { return formatter }() - private let lastRefreshDate: () -> Date? - private let combinedRefreshProgress: () -> CombinedRefreshProgress - private static let lastRefreshDateTextUpdateInterval = 60 private static let lastRefreshDateTextRelativeDateFormattingThreshold = 60.0 - init(lastRefreshDateProvider: @escaping () -> Date?, - combinedRefreshProgressProvider: @escaping () -> CombinedRefreshProgress) { - self.lastRefreshDate = lastRefreshDateProvider - self.combinedRefreshProgress = combinedRefreshProgressProvider - + func startup() { updateState() - observeRefreshProgress() scheduleLastRefreshDateTextUpdate() } @@ -54,12 +46,12 @@ class RefreshProgressModel: ObservableObject { // MARK: Refreshing state @objc private func updateState() { - let progress = combinedRefreshProgress() + let progress = AccountManager.shared.combinedRefreshProgress if !progress.isComplete { let fractionCompleted = Float(progress.numberCompleted) / Float(progress.numberOfTasks) self.state = .refreshProgress(fractionCompleted) - } else if let lastRefreshDate = self.lastRefreshDate() { + } else if let lastRefreshDate = AccountManager.shared.lastArticleFetchEndTime { let text = localizedLastRefreshText(lastRefreshDate: lastRefreshDate) self.state = .lastRefreshDateText(text) } else { @@ -88,14 +80,3 @@ class RefreshProgressModel: ObservableObject { } } - -extension RefreshProgressModel { - - convenience init() { - self.init( - lastRefreshDateProvider: { AccountManager.shared.lastArticleFetchEndTime }, - combinedRefreshProgressProvider: { AccountManager.shared.combinedRefreshProgress } - ) - } - -} diff --git a/Multiplatform/Shared/Sidebar/RefreshProgressView.swift b/Multiplatform/Shared/Sidebar/RefreshProgressView.swift index 6e8aea6e0..fe090cba4 100644 --- a/Multiplatform/Shared/Sidebar/RefreshProgressView.swift +++ b/Multiplatform/Shared/Sidebar/RefreshProgressView.swift @@ -38,18 +38,3 @@ struct RefreshProgressView: View { } } - -struct RefreshProgressView_Previews: PreviewProvider { - static var previews: some View { - Group { - RefreshProgressView() - .environmentObject(refreshProgressModel(lastRefreshDate: nil, tasksCompleted: 1, totalTasks: 2)) - .previewDisplayName("Refresh in progress") - - RefreshProgressView() - .environmentObject(refreshProgressModel(lastRefreshDate: Date(timeIntervalSinceNow: -120.0), tasksCompleted: 0, totalTasks: 0)) - .previewDisplayName("Last refreshed with date") - } - .previewLayout(.sizeThatFits) - } -} diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 94fb0777e..fe9fe0e41 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -1095,8 +1095,6 @@ FF64D0E824AF53EE0084080A /* RefreshProgressModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0C424AF53EE0084080A /* RefreshProgressModel.swift */; }; FF64D0E924AF53EE0084080A /* RefreshProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */; }; FF64D0EA24AF53EE0084080A /* RefreshProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */; }; - FFA2BBD624AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFA2BBD524AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift */; }; - FFA2BBD724AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFA2BBD524AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift */; }; FFD43E412340F488009E5CA3 /* MarkAsReadAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */; }; /* End PBXBuildFile section */ @@ -2338,7 +2336,6 @@ FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorter.swift; sourceTree = ""; }; FF64D0C424AF53EE0084080A /* RefreshProgressModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshProgressModel.swift; sourceTree = ""; }; FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshProgressView.swift; sourceTree = ""; }; - FFA2BBD524AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PreviewProvider+RefreshProgressModel.swift"; sourceTree = ""; }; FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkAsReadAlertController.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -2699,7 +2696,6 @@ isa = PBXGroup; children = ( 514E6BFE24AD255D00AC6F6E /* PreviewArticles.swift */, - FFA2BBD524AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift */, ); path = Previews; sourceTree = ""; @@ -5142,7 +5138,6 @@ 51B80EDF24BD298900C6C32D /* TitleActivityItemSource.swift in Sources */, 51E4991524A808FF00B667CB /* ArticleStringFormatter.swift in Sources */, 51919FEE24AB85E400541E64 /* TimelineContainerView.swift in Sources */, - FFA2BBD624AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift in Sources */, 653A4E7924BCA5BB00EF2D7F /* SettingsCloudKitAccountView.swift in Sources */, 51E4995724A8734D00B667CB /* ExtensionPoint.swift in Sources */, 1776E88E24AC5F8A00E78166 /* AppDefaults.swift in Sources */, @@ -5264,7 +5259,6 @@ 514E6C0024AD255D00AC6F6E /* PreviewArticles.swift in Sources */, 1729529524AA1CAA00D65E66 /* GeneralPreferencesView.swift in Sources */, 1729529424AA1CAA00D65E66 /* AdvancedPreferencesView.swift in Sources */, - FFA2BBD724AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift in Sources */, 5177470424B2657F00EB0F74 /* TimelineToolbarModifier.swift in Sources */, 51E4992D24A8676300B667CB /* FetchRequestOperation.swift in Sources */, 51E4992424A8098400B667CB /* SmartFeedPasteboardWriter.swift in Sources */,