public MusicListBoxControl(OfflineTrack audio) { InitializeComponent(); Track = audio; if (!Track.IsCached & !StaticFunctions.CheckForInternetConnection()) { Play.IsEnabled = false; } TRACK_NAME.Text = Track.Title; TRACK_AUTHOR.Text = Track.Artist; if (Track.IsHq ?? false) { IsHQ.Visibility = Visibility.Hidden; } var trackDuration = Track.Duration % 60 < 10 ? $"{Track.Duration / 60}:0{Track.Duration % 60}" : $"{Track.Duration / 60}:{Track.Duration % 60}"; TRACK_DURATION.Text = trackDuration; }
public async Task UpdateAudioList() //метод обновления бд с записями { await Task.Run(async() => //Для того, чтобы не задерживать обновление экрана, задача запускается в таске. { await using var db = new TrackDbContext(); if (StaticFunctions.CheckForInternetConnection()) //в случае отсутствия интернет-соединения база данных не обновляется { var tracks = await Api.Audio.GetAsync(new AudioGetParams { OwnerId = Api.Users.Get(new List <long>()).FirstOrDefault()?.Id, //так как мы можем войти через токен VkApi.token может не содержать userid, это обход }); foreach (var track in db.Tracks) { db.Tracks.Remove(track); //очищаем бд перед записью, записываем и созраняем } await db.Tracks.AddRangeAsync(OfflineTrack.ToOffline(tracks).ToList()); await db.SaveChangesAsync(); } }); }
public async Task PlayMusic(OfflineTrack track) { await Task.Run(() => { Debug.WriteLine($"Starting {track.Title}--{track.Id}"); _waveOut?.Stop(); if (track.IsCached) { Debug.WriteLine("Track already exists"); try { var reader = new Mp3FileReader(track.Cache(Api)); _waveOut = new WaveOutEvent(); _waveOut.Init(reader); _waveOut.Play(); } catch (Exception ex) { Debug.WriteLine($"{track.Title} cannot be loaded"); Debug.WriteLine($"{ex.Message}"); Debug.WriteLine($"{ex.StackTrace}"); return; //TODO: обработчик исключений } } else if (StaticFunctions.CheckForInternetConnection()) { var reader = new Mp3FileReader(track.Cache(Api)); _waveOut = new WaveOutEvent(); _waveOut.Init(reader); _waveOut.Play(); } }); Debug.WriteLine("Starting timer"); CurrentTrack = track; _nextTrackTimer.Interval = track.Duration * 1000 + 1; _nextTrackTimer.Start(); Debug.WriteLine("Timer started"); }