41 lines
1.1 KiB
Swift
41 lines
1.1 KiB
Swift
//
|
|
/*
|
|
* SwiftFin is subject to the terms of the Mozilla Public
|
|
* License, v2.0. If a copy of the MPL was not distributed with this
|
|
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*
|
|
* Copyright 2021 Aiden Vigue & Jellyfin Contributors
|
|
*/
|
|
|
|
import UIKit
|
|
|
|
// A more general derivative of
|
|
// https://stackoverflow.com/questions/65812080/introspect-library-uirefreshcontrol-with-swiftui-not-working
|
|
final class RefreshHelper {
|
|
var refreshControl: UIRefreshControl?
|
|
var refreshAction: (() -> Void)?
|
|
private var lastAutomaticRefresh = Date()
|
|
|
|
@objc func didRefresh() {
|
|
guard let refreshControl = refreshControl else { return }
|
|
refreshAction?()
|
|
refreshControl.endRefreshing()
|
|
}
|
|
}
|
|
|
|
// MARK: - automatic refreshing
|
|
|
|
extension RefreshHelper {
|
|
private static let timeUntilStale = TimeInterval(60)
|
|
|
|
func refreshStaleData() {
|
|
guard isStale else { return }
|
|
lastAutomaticRefresh = .now
|
|
refreshAction?()
|
|
}
|
|
|
|
private var isStale: Bool {
|
|
lastAutomaticRefresh.addingTimeInterval(Self.timeUntilStale) < .now
|
|
}
|
|
}
|