feat: 完善相册 AI 修图模板选择流程
This commit is contained in:
@@ -207,41 +207,18 @@ final class TravelAlbumDetailViewModel {
|
||||
}
|
||||
}
|
||||
|
||||
/// 重新拉取当前筛选、排序下已经加载的分页范围,供全屏预览刷新关联图片。
|
||||
func reloadLoadedMaterials(
|
||||
api: any TravelAlbumServing
|
||||
) async throws -> TravelAlbumListResponse<TravelAlbumMaterial> {
|
||||
let requestedPageCount = max(currentPage, 1)
|
||||
var refreshed: [TravelAlbumMaterial] = []
|
||||
var refreshedTotal = 0
|
||||
var loadedPageCount = 0
|
||||
|
||||
for page in 1 ... requestedPageCount {
|
||||
let response = try await api.materialList(
|
||||
userEquityTravelId: albumId,
|
||||
page: page,
|
||||
pageSize: pageSize,
|
||||
orderBy: sortOption.rawValue,
|
||||
isPurchased: selectedTab == .purchased ? 1 : nil
|
||||
)
|
||||
if page == 1 { refreshedTotal = response.total }
|
||||
refreshed.append(contentsOf: response.list)
|
||||
loadedPageCount = page
|
||||
if refreshed.count >= refreshedTotal || response.list.isEmpty { break }
|
||||
/// 定向刷新单个素材,并同步替换网格列表中的对应缓存。
|
||||
func refreshMaterial(id: Int, api: any TravelAlbumServing) async throws -> TravelAlbumMaterial {
|
||||
let material = try await api.materialInfo(
|
||||
userEquityTravelId: albumId,
|
||||
materialId: id
|
||||
)
|
||||
guard material.id == id else { throw APIError.invalidResponse }
|
||||
if let index = materials.firstIndex(where: { $0.id == id }) {
|
||||
materials[index] = material
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
var seen = Set<Int>()
|
||||
materials = refreshed.filter { seen.insert($0.id).inserted }
|
||||
currentPage = max(loadedPageCount, 1)
|
||||
canLoadMore = materials.count < refreshedTotal
|
||||
selectedMaterialIds.formIntersection(materials.map(\.id))
|
||||
if selectedTab == .all {
|
||||
allPhotoCount = refreshedTotal
|
||||
} else {
|
||||
purchasedPhotoCount = refreshedTotal
|
||||
}
|
||||
notifyStateChange()
|
||||
return TravelAlbumListResponse(total: refreshedTotal, list: materials)
|
||||
return material
|
||||
}
|
||||
|
||||
/// 切换选择模式。
|
||||
|
||||
Reference in New Issue
Block a user