Refactored refresh progress so that it doesn't crash on the mac anymore
This commit is contained in:
parent
f32b0bfdc3
commit
2b84469fb4
@ -26,8 +26,9 @@ struct MainApp: App {
|
|||||||
WindowGroup {
|
WindowGroup {
|
||||||
SceneNavigationView()
|
SceneNavigationView()
|
||||||
.frame(minWidth: 600, idealWidth: 1000, maxWidth: .infinity, minHeight: 600, idealHeight: 700, maxHeight: .infinity)
|
.frame(minWidth: 600, idealWidth: 1000, maxWidth: .infinity, minHeight: 600, idealHeight: 700, maxHeight: .infinity)
|
||||||
.environmentObject(defaults)
|
.onAppear { refreshProgress.startup() }
|
||||||
.environmentObject(refreshProgress)
|
.environmentObject(refreshProgress)
|
||||||
|
.environmentObject(defaults)
|
||||||
}
|
}
|
||||||
.windowToolbarStyle(UnifiedWindowToolbarStyle())
|
.windowToolbarStyle(UnifiedWindowToolbarStyle())
|
||||||
.commands {
|
.commands {
|
||||||
@ -86,8 +87,9 @@ struct MainApp: App {
|
|||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
WindowGroup {
|
WindowGroup {
|
||||||
SceneNavigationView()
|
SceneNavigationView()
|
||||||
.environmentObject(defaults)
|
.onAppear { refreshProgress.startup() }
|
||||||
.environmentObject(refreshProgress)
|
.environmentObject(refreshProgress)
|
||||||
|
.environmentObject(defaults)
|
||||||
.modifier(PreferredColorSchemeModifier(preferredColorScheme: defaults.userInterfaceColorPalette))
|
.modifier(PreferredColorSchemeModifier(preferredColorScheme: defaults.userInterfaceColorPalette))
|
||||||
}
|
}
|
||||||
.commands {
|
.commands {
|
||||||
|
@ -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])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -28,19 +28,11 @@ class RefreshProgressModel: ObservableObject {
|
|||||||
return formatter
|
return formatter
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private let lastRefreshDate: () -> Date?
|
|
||||||
private let combinedRefreshProgress: () -> CombinedRefreshProgress
|
|
||||||
|
|
||||||
private static let lastRefreshDateTextUpdateInterval = 60
|
private static let lastRefreshDateTextUpdateInterval = 60
|
||||||
private static let lastRefreshDateTextRelativeDateFormattingThreshold = 60.0
|
private static let lastRefreshDateTextRelativeDateFormattingThreshold = 60.0
|
||||||
|
|
||||||
init(lastRefreshDateProvider: @escaping () -> Date?,
|
func startup() {
|
||||||
combinedRefreshProgressProvider: @escaping () -> CombinedRefreshProgress) {
|
|
||||||
self.lastRefreshDate = lastRefreshDateProvider
|
|
||||||
self.combinedRefreshProgress = combinedRefreshProgressProvider
|
|
||||||
|
|
||||||
updateState()
|
updateState()
|
||||||
|
|
||||||
observeRefreshProgress()
|
observeRefreshProgress()
|
||||||
scheduleLastRefreshDateTextUpdate()
|
scheduleLastRefreshDateTextUpdate()
|
||||||
}
|
}
|
||||||
@ -54,12 +46,12 @@ class RefreshProgressModel: ObservableObject {
|
|||||||
// MARK: Refreshing state
|
// MARK: Refreshing state
|
||||||
|
|
||||||
@objc private func updateState() {
|
@objc private func updateState() {
|
||||||
let progress = combinedRefreshProgress()
|
let progress = AccountManager.shared.combinedRefreshProgress
|
||||||
|
|
||||||
if !progress.isComplete {
|
if !progress.isComplete {
|
||||||
let fractionCompleted = Float(progress.numberCompleted) / Float(progress.numberOfTasks)
|
let fractionCompleted = Float(progress.numberCompleted) / Float(progress.numberOfTasks)
|
||||||
self.state = .refreshProgress(fractionCompleted)
|
self.state = .refreshProgress(fractionCompleted)
|
||||||
} else if let lastRefreshDate = self.lastRefreshDate() {
|
} else if let lastRefreshDate = AccountManager.shared.lastArticleFetchEndTime {
|
||||||
let text = localizedLastRefreshText(lastRefreshDate: lastRefreshDate)
|
let text = localizedLastRefreshText(lastRefreshDate: lastRefreshDate)
|
||||||
self.state = .lastRefreshDateText(text)
|
self.state = .lastRefreshDateText(text)
|
||||||
} else {
|
} else {
|
||||||
@ -88,14 +80,3 @@ class RefreshProgressModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension RefreshProgressModel {
|
|
||||||
|
|
||||||
convenience init() {
|
|
||||||
self.init(
|
|
||||||
lastRefreshDateProvider: { AccountManager.shared.lastArticleFetchEndTime },
|
|
||||||
combinedRefreshProgressProvider: { AccountManager.shared.combinedRefreshProgress }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1095,8 +1095,6 @@
|
|||||||
FF64D0E824AF53EE0084080A /* RefreshProgressModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0C424AF53EE0084080A /* RefreshProgressModel.swift */; };
|
FF64D0E824AF53EE0084080A /* RefreshProgressModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0C424AF53EE0084080A /* RefreshProgressModel.swift */; };
|
||||||
FF64D0E924AF53EE0084080A /* RefreshProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */; };
|
FF64D0E924AF53EE0084080A /* RefreshProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */; };
|
||||||
FF64D0EA24AF53EE0084080A /* 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 */; };
|
FFD43E412340F488009E5CA3 /* MarkAsReadAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
@ -2338,7 +2336,6 @@
|
|||||||
FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorter.swift; sourceTree = "<group>"; };
|
FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorter.swift; sourceTree = "<group>"; };
|
||||||
FF64D0C424AF53EE0084080A /* RefreshProgressModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshProgressModel.swift; sourceTree = "<group>"; };
|
FF64D0C424AF53EE0084080A /* RefreshProgressModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshProgressModel.swift; sourceTree = "<group>"; };
|
||||||
FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshProgressView.swift; sourceTree = "<group>"; };
|
FF64D0E624AF53EE0084080A /* RefreshProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshProgressView.swift; sourceTree = "<group>"; };
|
||||||
FFA2BBD524AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PreviewProvider+RefreshProgressModel.swift"; sourceTree = "<group>"; };
|
|
||||||
FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkAsReadAlertController.swift; sourceTree = "<group>"; };
|
FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkAsReadAlertController.swift; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@ -2699,7 +2696,6 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
514E6BFE24AD255D00AC6F6E /* PreviewArticles.swift */,
|
514E6BFE24AD255D00AC6F6E /* PreviewArticles.swift */,
|
||||||
FFA2BBD524AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift */,
|
|
||||||
);
|
);
|
||||||
path = Previews;
|
path = Previews;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -5142,7 +5138,6 @@
|
|||||||
51B80EDF24BD298900C6C32D /* TitleActivityItemSource.swift in Sources */,
|
51B80EDF24BD298900C6C32D /* TitleActivityItemSource.swift in Sources */,
|
||||||
51E4991524A808FF00B667CB /* ArticleStringFormatter.swift in Sources */,
|
51E4991524A808FF00B667CB /* ArticleStringFormatter.swift in Sources */,
|
||||||
51919FEE24AB85E400541E64 /* TimelineContainerView.swift in Sources */,
|
51919FEE24AB85E400541E64 /* TimelineContainerView.swift in Sources */,
|
||||||
FFA2BBD624AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift in Sources */,
|
|
||||||
653A4E7924BCA5BB00EF2D7F /* SettingsCloudKitAccountView.swift in Sources */,
|
653A4E7924BCA5BB00EF2D7F /* SettingsCloudKitAccountView.swift in Sources */,
|
||||||
51E4995724A8734D00B667CB /* ExtensionPoint.swift in Sources */,
|
51E4995724A8734D00B667CB /* ExtensionPoint.swift in Sources */,
|
||||||
1776E88E24AC5F8A00E78166 /* AppDefaults.swift in Sources */,
|
1776E88E24AC5F8A00E78166 /* AppDefaults.swift in Sources */,
|
||||||
@ -5264,7 +5259,6 @@
|
|||||||
514E6C0024AD255D00AC6F6E /* PreviewArticles.swift in Sources */,
|
514E6C0024AD255D00AC6F6E /* PreviewArticles.swift in Sources */,
|
||||||
1729529524AA1CAA00D65E66 /* GeneralPreferencesView.swift in Sources */,
|
1729529524AA1CAA00D65E66 /* GeneralPreferencesView.swift in Sources */,
|
||||||
1729529424AA1CAA00D65E66 /* AdvancedPreferencesView.swift in Sources */,
|
1729529424AA1CAA00D65E66 /* AdvancedPreferencesView.swift in Sources */,
|
||||||
FFA2BBD724AF751100B3149D /* PreviewProvider+RefreshProgressModel.swift in Sources */,
|
|
||||||
5177470424B2657F00EB0F74 /* TimelineToolbarModifier.swift in Sources */,
|
5177470424B2657F00EB0F74 /* TimelineToolbarModifier.swift in Sources */,
|
||||||
51E4992D24A8676300B667CB /* FetchRequestOperation.swift in Sources */,
|
51E4992D24A8676300B667CB /* FetchRequestOperation.swift in Sources */,
|
||||||
51E4992424A8098400B667CB /* SmartFeedPasteboardWriter.swift in Sources */,
|
51E4992424A8098400B667CB /* SmartFeedPasteboardWriter.swift in Sources */,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user