private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { Task.Run(async() => { try { var file = track.Source; var mp3FileAbs = new FileMp3Abstraction() { Name = file.Name, ReadStream = await file.OpenStreamForReadAsync(), WriteStream = await file.OpenStreamForWriteAsync(), }; using (var mp3File = TagLib.File.Create(mp3FileAbs)) { mp3File.Tag.AlbumArtists = new string[] { ArtistName }; mp3File.Tag.Album = AlbumName; mp3File.Tag.Title = TitleTrack; mp3File.Tag.Year = uint.Parse(YearAlbum); mp3File.Tag.Genres = new string[] { Genre }; mp3File.Save(); } } catch (Exception e) { await ContentDialogService.Show(new ExceptionDialog("Ошибка при сохранении данных о треке", "Music X не смог сохранить информацию. Возможно, трек недоступен или Вы использовали запрещенные символы", e)); } }); }
private async void PropertiesTrackContentDialog_OnLoading(FrameworkElement sender, object args) { try { var file = track.Source; var mp3FileAbs = new FileMp3Abstraction() { Name = file.Name, ReadStream = await file.OpenStreamForReadAsync(), WriteStream = await file.OpenStreamForWriteAsync(), }; using (var mp3File = TagLib.File.Create(mp3FileAbs)) { if (mp3File.Tag.AlbumArtists.Count() != 0) { ArtistName = mp3File.Tag.AlbumArtists[0]; } else { if (mp3File.Tag.Artists.Count() != 0) { ArtistName = mp3File.Tag.Artists[0]; } else { ArtistName = "Неизвестный исполнитель"; } } AlbumName = mp3File.Tag.Album; if (mp3File.Tag.Title != null) { TitleTrack = mp3File.Tag.Title; } else { TitleTrack = track.Source.DisplayName; } YearAlbum = mp3File.Tag.Year.ToString(); Genre = mp3File.Tag.FirstGenre; } OnPropertyChanged("ArtistName"); OnPropertyChanged("AlbumName"); OnPropertyChanged("TitleTrack"); OnPropertyChanged("YearAlbum"); OnPropertyChanged("Genre"); } catch (Exception e) { ArtistName = "Ошибка при получении информации"; AlbumName = "Ошибка при получении информации"; TitleTrack = "Ошибка при получении информации"; YearAlbum = "Ошибка при получении информации"; Genre = "Ошибка при получении информации"; OnPropertyChanged("ArtistName"); OnPropertyChanged("AlbumName"); OnPropertyChanged("TitleTrack"); OnPropertyChanged("YearAlbum"); OnPropertyChanged("Genre"); } }
private async void CheckProgress(object sender, object o) { if (CurrentDownloadOperation != null && CurrentDownloadTrack != null) { var a = CurrentDownloadOperation.Progress.BytesReceived; DownloadProgressChanged?.Invoke(this, a); if (CurrentDownloadOperation.Progress.Status == BackgroundTransferStatus.Completed && DownloadAccess) { DownloadAccess = false; var trackFile = currentFileAudio; var track = CurrentDownloadTrack; var mp3FileAbs = new FileMp3Abstraction() { Name = trackFile.Name, ReadStream = await trackFile.OpenStreamForReadAsync(), WriteStream = await trackFile.OpenStreamForWriteAsync(), }; var task = Task.Run(() => { using (var mp3File = TagLib.File.Create(mp3FileAbs)) { mp3File.Tag.AlbumArtists = new string[] { track.Artist }; mp3File.Tag.Title = track.Title; mp3File.Tag.Album = track.AlbumName; mp3File.Tag.Year = uint.Parse(track.AlbumYear); mp3File.Tag.Lyrics = "Загружено с ВКонтакте с помощью Music X Player (UWP)"; mp3File.Tag.Copyright = "Music X Player (UWP)"; mp3File.Tag.Conductor = "Music X Player"; mp3File.Tag.Comment = "Загружено с ВКонтакте с помощью Music X Player (UWP)"; mp3File.Save(); } }); var task2 = task.ContinueWith((b) => { var currentDownloadedTrack = new DownloadAudioFile() { AlbumName = CurrentDownloadTrack.AlbumName, FromAlbum = CurrentDownloadTrack.FromAlbum, AudioFile = CurrentDownloadTrack.AudioFile, AlbumYear = CurrentDownloadTrack.AlbumYear, Artist = CurrentDownloadTrack.Artist, Cover = CurrentDownloadTrack.Cover, Title = CurrentDownloadTrack.Title, Url = CurrentDownloadTrack.Url }; currentDownloadedTrack.AudioFile.SourceString = currentFileAudio.Path; currentDownloadedTrack.AudioFile.Source = currentFileAudio; currentDownloadedTrack.AudioFile.IsLocal = true; DispatcherHelper.CheckBeginInvokeOnUI(() => { DownloadComplete?.Invoke(this, currentDownloadedTrack); }); }); } else if (CurrentDownloadOperation.Progress.Status == BackgroundTransferStatus.Idle && DownloadAccess) { try { await CurrentDownloadOperation.StartAsync(); } catch { //ниче не делаем, операция уже запущена } } else if (CurrentDownloadOperation.Progress.Status == BackgroundTransferStatus.Error && DownloadAccess) { DownloadAccess = false; await ContentDialogService.Show(new ExceptionDialog("Возникла ошибка при загрузке трека", "Возможно, ссылка недоступна", new Exception("BackgroundTransferStatus.Error"))); DownloadComplete?.Invoke(this, CurrentDownloadTrack); } } }
public async static Task <AudioFile> ConvertToAudioFile(StorageFile file) { var mp3FileAbs = new FileMp3Abstraction() { Name = file.Name, ReadStream = await file.OpenStreamForReadAsync(), WriteStream = await file.OpenStreamForWriteAsync(), }; try { using (var mp3File = TagLib.File.Create(mp3FileAbs)) { AudioFile audio = new AudioFile(); if (mp3File.Tag.AlbumArtists.Count() != 0) { audio.Artist = mp3File.Tag.AlbumArtists[0]; } else { if (mp3File.Tag.Artists.Count() != 0) { audio.Artist = mp3File.Tag.Artists[0]; } else { audio.Artist = "Неизвестный исполнитель"; } } if (mp3File.Tag.Title != null) { audio.Title = mp3File.Tag.Title; } else { audio.Title = file.DisplayName; } audio.DurationSeconds = mp3File.Properties.Duration.TotalSeconds; audio.DurationMinutes = Converters.AudioTimeConverter.Convert(mp3File.Properties.Duration.TotalSeconds); audio.Duration = mp3File.Properties.Duration; audio.Id = (file.Name.GetHashCode() * 1); audio.InternalId = 0; audio.OwnerId = 0; audio.IsLocal = true; audio.PlaylistId = 0; if (mp3File.Tag.Pictures.Any()) { StorageFolder localFolder = ApplicationData.Current.LocalFolder; var alah = StaticContent.CoversFolder.TryGetItemAsync($"{audio.Id}.jpg"); System.IO.File.WriteAllBytes($"{localFolder.Path}/Covers/{audio.Id}.jpg", mp3File.Tag.Pictures[0].Data.Data); audio.Cover = $"{localFolder.Path}/Covers/{audio.Id}.jpg"; } else { audio.Cover = "ms-appx:///Assets/Images/placeholder.png"; } audio.Source = file; audio.SourceString = file.Path; var playlist = await Services.PlaylistsService.GetById(2); audio.IsFavorite = playlist.TracksFiles.Any(t => t.SourceString == audio.SourceString); audio.IsInLibrary = true; audio.IsDownload = true; return(audio); } } catch (CorruptFileException) { return(null); }catch (Exception e) { AudioFile audio = new AudioFile() { Artist = "Неизвестный исполнитель", Cover = "ms-appx:///Assets/Images/placeholder.png", Duration = TimeSpan.Zero, DurationMinutes = "00:00", DurationSeconds = 0, Id = 0, InternalId = 0, OwnerId = 0, PlaylistId = 0, Source = file, SourceString = "ms-appx:///Assets/Audio/song.mp3", Title = file.DisplayName }; await ContentDialogService.Show(new ExceptionDialog("Ошибка при обработке файла", $"Файл {file.Name} не может быть обработан по неизвестной причине", e)); return(audio); } }