Пример #1
0
        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);
        }
Пример #2
0
        // 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();
        }