public void Update(AudiobookFile file) { if (Title != file.Title) { Title = file.Title; } if (Author != file.Author) { Author = file.Author; } if (Album != file.Album) { Album = file.Album; } if (Disc != file.Disc) { Disc = file.Disc; } if (Track != file.Track) { Track = file.Track; } if (Image != file.Image) { Image = file.Image; } }
public AudiobookFile Create(string filename) { AudiobookFile audiobookFile; try { var tfile = TagLib.File.Create(filename); audiobookFile = new AudiobookFile { Title = tfile.Tag.Title, Album = tfile.Tag.Album, Author = tfile.Tag.FirstPerformer, Disc = (int)tfile.Tag.Disc, Track = (int)tfile.Tag.Track, Filename = filename.Replace(_settings.Directory, ""), Image = GetImage(tfile.Tag.Pictures) }; } catch { audiobookFile = new AudiobookFile { Title = Path.GetFileName(filename), Filename = filename.Replace(_settings.Directory, ""), }; } return(audiobookFile); }
protected override async Task Handle(RefreshLibraryRequest request, CancellationToken token) { _logger.LogInformation("Starting refresh"); _notificationService.Notify(false); await _ctx.Database.EnsureCreatedAsync(token); var directory = new DirectoryInfo(_settings.Directory); var files = GetFilesForDirectory(directory); var items = await _ctx.AudiobookFiles.ToListAsync(token); int processed = 0; _notificationService.Notify(files.Count, processed); foreach (var file in files) { AudiobookFile audiobookFile = _audiobookFileFactory.Create(file); var item = items.FirstOrDefault(f => f.Filename == audiobookFile.Filename); if (item == null) { _ctx.AudiobookFiles.Add(audiobookFile); } else { item.Update(audiobookFile); items.Remove(item); } processed++; _notificationService.Notify(files.Count, processed); } items.ForEach(f => _ctx.Remove(f)); await _ctx.SaveChangesAsync(token); _notificationService.Notify(true); _logger.LogInformation("Ending refresh"); }
private void RefreshFileList() { AudiobookFiles.Clear(); foreach (string album in AudiobookTitlesListBox.SelectedItems) { var filePaths = Directory.EnumerateFiles(album); foreach (var filePath in filePaths) { if (Path.GetExtension(filePath)?.Contains("mp3", StringComparison.InvariantCulture) == false) { WriteOutput($"Skipping {Path.GetFileNameWithoutExtension(filePath)} (only MP3s allowed)...", OutputMessageLevel.Warning); continue; } var audiobookFile = new AudiobookFile { FilePath = filePath }; var fileName = System.IO.Path.GetFileName(filePath); if (!string.IsNullOrEmpty(fileName)) { audiobookFile.FileName = fileName; } var tagLibFile = TagLib.File.Create(filePath); if (tagLibFile?.Tag != null) { audiobookFile.Title = tagLibFile.Tag.Title; audiobookFile.Album = tagLibFile.Tag.Album; try { audiobookFile.Artist = tagLibFile.Tag.Artists?.FirstOrDefault(); } catch { } audiobookFile.Performer = tagLibFile.Tag.Performers?.FirstOrDefault(); } tagLibFile?.Dispose(); AudiobookFiles.Add(audiobookFile); } } if (AudiobookTitlesListBox.SelectedItems.Count == 0) { WriteOutput("Selections cleared.", OutputMessageLevel.Warning); } else if (AudiobookTitlesListBox.SelectedItems.Count == 1) { WriteOutput($"{Path.GetFileName(openFolderDialog.FileName)} selected ({AudiobookFiles.Count} files).", OutputMessageLevel.Informational); } else { WriteOutput($"{AudiobookTitlesListBox.SelectedItems.Count} selected ({AudiobookFiles.Count} total files).", OutputMessageLevel.Informational); } }