mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Refactored refresh progress so that it doesn't crash on the mac anymore
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}()
|
||||
|
||||
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 }
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user