示例#1
0
        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");
            }
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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]);
        }
示例#4
0
 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();
         }
     });
 }