public async Task AddNew(StopOperationToken stopToken) { IReadOnlyList <StorageFile> files = await GetStorageFolderFiles(); Song[] songs = Songs.ToArray(); IEnumerable <StorageFile> addFiles = files.Where(f => !songs.Any(s => s.Path == f.Path)); Song[] addSongs = (await GetSongsFromStoragefiles(addFiles, stopToken)).ToArray(); if (stopToken.IsStopped) { return; } if (addSongs.Length == 0) { return; } Songs.Change(null, addSongs); }
public async Task Update(StopOperationToken stopToken) { Song[] songs = Songs.ToArray(); IReadOnlyList <StorageFile> files = await GetStorageFolderFiles(); IEnumerable <StorageFile> addFiles = files.Where(f => songs.All(s => s.Path != f.Path)); Song[] addSongs = (await GetSongsFromStoragefiles(addFiles, stopToken)).ToArray(); Song[] removeSongs = songs.Where(s => files.All(f => f.Path != s.Path)).ToArray(); if (stopToken.IsStopped) { return; } if (Songs.Count + addSongs.Length - removeSongs.Length == 0) { Parent.Remove(this); return; } Songs.Change(removeSongs, addSongs); }