public void DeleteFoldersInternal(UserAccount userAccount, int[] ids) { var folders = dataContext.SubscriptionFolders.AsQueryable() .Where(x => x.UserId == userAccount.Id) .Where(x => ids.Contains(x.Id)) .ToArray(); foreach (var folder in folders) { var subsToDelete = dataContext.GetSubscriptionsRecursive(folder); DeleteInternal(userAccount, subsToDelete); } var foldersToDelete = folders.SelectMany(dataContext.GetFoldersRecursive).ToArray(); dataContext.SubscriptionFolders.RemoveRange(foldersToDelete); dataContext.SaveChanges(); FoldersDeleted?.Invoke(this, new SubscriptionFoldersDeletedEventArgs() { User = userAccount, FolderIds = foldersToDelete.Select(x => x.Id).ToArray() }); }
public async Task DeleteFolders(UserAccount userAccount, int[] ids, bool recursive, bool deleteFiles) { if (recursive) { if (deleteFiles) { await DeleteSubscriptionFolderFilesJob.Schedule(scheduler, ids, true); } else { DeleteFoldersInternal(userAccount, ids); } } else { // Reparent subscriptions and folders (move them to the parent) var folders = dataContext.SubscriptionFolders.AsQueryable() .Where(x => x.UserId == userAccount.Id) .Where(x => ids.Contains(x.Id)) .ToArray(); foreach (var folder in folders) { dataContext.SubscriptionFolders.AsQueryable() .Where(x => x.ParentId.HasValue && x.ParentId.Value == folder.Id) .ForEach(x => { x.ParentId = folder.ParentId; FolderUpdated?.Invoke(this, new SubscriptionFolderUpdatedEventArgs() { User = userAccount, Folder = x }); }); dataContext.Subscriptions.AsQueryable() .Where(x => x.ParentFolderId.HasValue && x.ParentFolderId.Value == folder.Id) .ForEach(x => { x.ParentFolderId = folder.ParentId; SubscriptionUpdated?.Invoke(this, new SubscriptionUpdatedEventArgs() { User = userAccount, Subscription = x }); }); } // Delete folders var foldersToDelete = dataContext.SubscriptionFolders.AsQueryable() .Where(x => ids.Contains(x.Id)); dataContext.SubscriptionFolders.RemoveRange(foldersToDelete); dataContext.SaveChanges(); FoldersDeleted?.Invoke(this, new SubscriptionFoldersDeletedEventArgs() { User = userAccount, FolderIds = ids }); } }