Fix deleted playlists resurrecting from iCloud after app restart

Pending deletes were lost across app restarts because
recoverPersistedPendingChanges() never reconstructed CKRecord.ID
objects from persisted record names. Additionally, incoming iCloud
records for deleted playlists were blindly applied, and orphaned
playlist items in CloudKit would recreate placeholder playlists.

- Rebuild pendingDeletes array from UserDefaults on recovery
- Guard applyRemoteRecord against records pending local deletion
- Skip deferred items whose parent playlist is pending deletion
- Queue all playlist item deletions when deleting a playlist
- Clean up placeholder playlists for pending-delete playlists
This commit is contained in:
Arkadiusz Fal
2026-02-13 18:05:30 +01:00
parent e51ebd7ab2
commit 3aadc9be70
2 changed files with 52 additions and 5 deletions

View File

@@ -40,12 +40,17 @@ extension DataManager {
/// Deletes a local playlist.
func deletePlaylist(_ playlist: LocalPlaylist) {
let playlistID = playlist.id
let itemIDs = playlist.sortedItems.map { $0.id }
modelContext.delete(playlist)
save()
// Queue for CloudKit deletion
// Queue playlist and all its items for CloudKit deletion
cloudKitSync?.queuePlaylistDelete(playlistID: playlistID)
for itemID in itemIDs {
cloudKitSync?.queuePlaylistItemDelete(itemID: itemID)
}
NotificationCenter.default.post(name: .playlistsDidChange, object: nil)
}