Tweak iCloud timeline sync
This commit is contained in:
parent
3cba0bce34
commit
967bff063b
|
@ -134,7 +134,7 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
}
|
||||
.debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
|
||||
.sink { [unowned self] _ in
|
||||
_ = promptToSyncPositionIfNecessary()
|
||||
_ = syncPositionIfNecessary(alwaysPrompt: true)
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
@ -225,11 +225,7 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if promptToSyncPositionIfNecessary() {
|
||||
// no-op
|
||||
} else {
|
||||
checkPresentIfEnoughTimeElapsed()
|
||||
}
|
||||
syncAndCheckPresentIfEnoughTimeElapsed()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -448,11 +444,7 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
view.window?.windowScene == scene else {
|
||||
return
|
||||
}
|
||||
if promptToSyncPositionIfNecessary() {
|
||||
// no-op
|
||||
} else {
|
||||
checkPresentIfEnoughTimeElapsed()
|
||||
}
|
||||
syncAndCheckPresentIfEnoughTimeElapsed()
|
||||
}
|
||||
|
||||
@objc private func sceneDidEnterBackground(_ notification: Foundation.Notification) {
|
||||
|
@ -465,7 +457,7 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
saveState()
|
||||
}
|
||||
|
||||
private func promptToSyncPositionIfNecessary() -> Bool {
|
||||
private func syncPositionIfNecessary(alwaysPrompt: Bool) -> Bool {
|
||||
guard persistsState,
|
||||
let timelinePosition = mastodonController.persistentContainer.getTimelinePosition(timeline: timeline) else {
|
||||
return false
|
||||
|
@ -491,6 +483,9 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
guard timelinePosition.centerStatusID != centerVisibleStatusID else {
|
||||
return false
|
||||
}
|
||||
if !alwaysPrompt {
|
||||
_ = self.restoreState()
|
||||
} else {
|
||||
var config = ToastConfiguration(title: "Sync Position")
|
||||
config.edge = .top
|
||||
config.dismissAutomaticallyAfter = 5
|
||||
|
@ -501,6 +496,7 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
}
|
||||
showToast(configuration: config, animated: true)
|
||||
UIAccessibility.post(notification: .announcement, argument: "Synced Position Updated")
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -529,16 +525,20 @@ class TimelineViewController: UIViewController, TimelineLikeCollectionViewContro
|
|||
}
|
||||
}
|
||||
|
||||
private func checkPresentIfEnoughTimeElapsed() {
|
||||
private func syncAndCheckPresentIfEnoughTimeElapsed() {
|
||||
guard let disappearedAt,
|
||||
-disappearedAt.timeIntervalSinceNow > 60 * 60 /* 1 hour */ else {
|
||||
return
|
||||
}
|
||||
self.disappearedAt = nil
|
||||
if syncPositionIfNecessary(alwaysPrompt: false) {
|
||||
// no-op
|
||||
} else {
|
||||
Task {
|
||||
await checkPresent(jumpImmediately: false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func checkPresent(jumpImmediately: Bool) async {
|
||||
if case .idle = controller.state,
|
||||
|
|
Loading…
Reference in New Issue