fix: refresh travel albums after OTG return

This commit is contained in:
2026-08-14 16:46:05 +08:00
parent 83afcb6deb
commit 8e444f7434
3 changed files with 75 additions and 3 deletions
@@ -31,6 +31,7 @@ final class TravelAlbumDetailViewController: BaseViewController {
private let aiRetouchButton = UIButton(type: .system)
private let deleteSelectedButton = UIButton(type: .system)
private let uploadButton = UIButton(type: .system)
private var refreshState = TravelAlbumReturnRefreshState()
init(
albumId: Int,
@@ -262,6 +263,18 @@ final class TravelAlbumDetailViewController: BaseViewController {
Task { await viewModel.refreshAll(api: api) }
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
guard refreshState.beginRefreshIfNeeded() else { return }
Task {
await viewModel.refreshAll(api: api)
await MainActor.run {
self.applyViewModel()
self.refreshState.finishRefresh()
}
}
}
@MainActor
private func applyViewModel() {
if let album = viewModel.album {
@@ -306,7 +319,10 @@ final class TravelAlbumDetailViewController: BaseViewController {
if !snapshot.itemIdentifiers.isEmpty {
snapshot.reconfigureItems(snapshot.itemIdentifiers)
}
dataSource.apply(snapshot, animatingDifferences: true)
dataSource.apply(
snapshot,
animatingDifferences: !refreshState.suppressesSnapshotAnimations
)
if !viewModel.isRefreshing {
refreshControl.endRefreshing()
@@ -482,6 +498,7 @@ final class TravelAlbumDetailViewController: BaseViewController {
@objc private func uploadTapped() {
let album = viewModel.album
refreshState.markRefreshNeeded()
let controller = WiredCameraTransferViewController(
viewModel: WiredCameraTransferViewModel(
albumId: album?.id ?? viewModel.albumId,