Tweak iCloud timeline sync

This commit is contained in:
Shadowfacts 2022-12-25 09:59:35 -05:00
parent 3cba0bce34
commit 967bff063b
1 changed files with 23 additions and 23 deletions

View File

@ -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,