public async Task <List <Id3Tag> > GetFilesFromFolder() { var tagList = new List <Id3Tag>(); var folderPicker = new FolderPicker { SuggestedStartLocation = PickerLocationId.Desktop, ViewMode = PickerViewMode.List }; folderPicker.FileTypeFilter.Add(".mp3"); var selectedFolder = await folderPicker.PickSingleFolderAsync(); if (selectedFolder != null) { StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickerFolderToken", selectedFolder); await Task.Run(async() => { var files = await selectedFolder.GetFilesAsync(); foreach (var mediaFile in files) { var file = new Mp3File(mediaFile.Path, Mp3Permissions.ReadWrite); tagList.Add(file.HasTagOfFamily(Id3TagFamily.Version2x) ? file.GetTag(Id3TagFamily.Version2x) : file.GetTag(Id3TagFamily.Version1x)); file.Dispose(); } }); } return(tagList); }
// Used to remove records that no longer have existing files public int syncMusicFiles() { // Directories to add List<String> directories = new List<String>(); directories.Add(@"D:\Music"); directories.Add(@"D:\mp3s"); // Get all files List<String> files = new List<String>(); foreach (String directory in directories) { List<String> items = Directory.GetFiles(directory, "*.mp3", SearchOption.AllDirectories).ToList<String>(); foreach(String item in items) { files.Add(item); } } Debug.WriteLine("Found: " + files.Count + " Files"); // Get ALL records in database List<MusicFile> rows = gdc.MusicFiles.ToList<MusicFile>(); Debug.WriteLine(rows.Count()); // Mark items for deletion foreach (MusicFile row in rows) { // If the physical file doesn't exist, remove it from the database if (!files.Contains(row.Filename)) { Debug.WriteLine("Deleting File: '" + row.Filename + "'"); gdc.MusicFiles.Remove(row); } } // Process deletion gdc.SaveChanges(); // Edit existing records foreach (MusicFile row in rows) { // Skip files that don't already exist if (!files.Contains(row.Filename)) { continue; } // Get ID3 tag information Mp3File mp3 = new Mp3File(row.Filename); Id3Tag tag = mp3.GetTag(Id3TagFamily.FileStartTag); try { // Set ID3 tag information row.Title = tag.Title.Value; row.Album = tag.Album.Value; row.Artists = tag.Artists.Value; row.Genres = tag.Genre.Value; //row.Duration = mp3.Audio.Duration.ToString("g"); // Dispose object? mp3.Dispose(); Debug.WriteLine("Editing file: '" + row.Filename + "'"); Debug.WriteLine("File Duration: '" + mp3.Audio.Duration.ToString("g") + "'"); } catch (NullReferenceException e) { // Remove problematic files gdc.MusicFiles.Remove(row); } } // Get all filenames currently in the data set var existingFilenames = from row in rows select row.Filename; // Add new records foreach (String file in files) { // Skip adding items that already exist if(existingFilenames.Contains(file)) { continue; } try { // Get ID3 tag information Mp3File mp3 = new Mp3File(file); Id3Tag tag = mp3.GetTag(Id3TagFamily.FileStartTag); // Set ID3 tag information MusicFile mf = gdc.MusicFiles.Create(); mf.Id = Guid.NewGuid(); mf.Filename = file; mf.Title = tag.Title.Value; mf.Album = tag.Album.Value; mf.Artists = tag.Artists.Value; mf.Genres = tag.Genre.Value; //mf.Duration = mp3.Audio.Duration.ToString("g"); // Dispose object? mp3.Dispose(); // Add the new record gdc.MusicFiles.Add(mf); Debug.WriteLine("Adding file: '" + file + "'"); } catch (Exception e) { Debug.WriteLine("Unable to add file: '" + file + "'"); } } // Write changes to database return gdc.SaveChanges(); }