private void ScrollEvent(object sender, ScrollChangedEventArgs e) { MainWindow window = Application.Current.MainWindow as MainWindow; List <OfflineTrack> tracks; using (var db = new TrackDbContext()) { tracks = db.Tracks.ToList(); } try { if (e.VerticalOffset / 3 > _audioDelta) { AudioList.Items.Add(new MusicListBoxControl(tracks[AudioList.Items.Count])); Debug.WriteLine($"Loaded {AudioList.Items.Count} items."); } if (e.VerticalOffset / 3 > _audioDelta) { _audioDelta = Convert.ToInt32(e.VerticalOffset / 3); } } catch (IndexOutOfRangeException) { Debug.WriteLine("End of audiolist"); } catch (ArgumentOutOfRangeException) { Debug.WriteLine("Argument is out of range"); } }
private async Task DrawAudioList() { Debug.Print("Drawing"); MainWindow window = Application.Current.MainWindow as MainWindow; await window.background.UpdateAudioList(); List <OfflineTrack> tracks; await using (var db = new TrackDbContext()) { tracks = db.Tracks.ToList(); } var i = 0; while (i < 10) { try { AudioList.Items.Add(new MusicListBoxControl(tracks[i])); i++; } catch (ArgumentOutOfRangeException) { break; } catch (IndexOutOfRangeException) { break; } } }
private void OnNextTrack(object sender, ElapsedEventArgs e) //Метод запуска следующей записи по концу предыдущей { //запускается таймером using var db = new TrackDbContext(); var tracks = db.Tracks.ToList(); var nextTrack = tracks.FindIndex(x => x.Id == CurrentTrack.Id) + 1; //делает из бд лист и ищет в нем номер закончившегося трека (.IndexOf() не работает) if (db.Tracks.Count() < nextTrack + 1) { nextTrack = 0; //прибавляет к его индексу еденицу и запускает следующий трек } Debug.WriteLine($"Next is \"{tracks[nextTrack].Title}\""); PlayMusic(tracks[nextTrack]); }
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(); } }); }