Exemple #1
0
 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);
        }
Exemple #3
0
            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");
            }
Exemple #4
0
        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);
            }
        }