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);
                }
            }
        }
示例#4
0
        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);
            }
        }