private async Task SaveChangesAsync()

in Samples-NetCore/MusicManager/MusicManager.Applications/Controllers/MusicPropertiesController.cs [102:149]


        private async Task SaveChangesAsync(MusicFile musicFile)
        {
            if (musicFile == null)
            {
                return;
            }
            IReadOnlyCollection<MusicFile> allFilesToSave;
            if (musicFile.SharedMusicFiles.Any())
            {
                allFilesToSave = musicFile.SharedMusicFiles;
            }
            else
            {
                allFilesToSave = new[] { musicFile };
            }

            // Filter out the music file that is currently playing
            var playingMusicFile = PlaylistManager.CurrentItem?.MusicFile;
            var filesToSave = allFilesToSave.Except(new[] { playingMusicFile }).ToArray();
            foreach (var x in allFilesToSave.Intersect(new[] { playingMusicFile })) { musicFilesToSaveAfterPlaying.Add(x); }
            
            if (!filesToSave.Any())
            {
                return;
            }
            var tasks = filesToSave.Select(x => SaveChangesCoreAsync(x)).ToArray();

            try
            {
                await Task.WhenAll(tasks);
            }
            catch (Exception ex)
            {
                Log.Default.Error(ex, "SaveChangesAsync");
                if (filesToSave.Count() == 1)
                {
                    shellService.ShowError(ex, Resources.CouldNotSaveFile, filesToSave.First().FileName);
                }
                else
                {
                    shellService.ShowError(ex, Resources.CouldNotSaveFiles);
                }
            }
            finally
            {
                RemoveMusicFilesToSaveAfterPlaying(filesToSave);
            }
        }