private void SetCurrentPage()
        {
            // Depends on beeing sorted
            var page = FilteredVideos.Skip(VideosPerPage * CurrentPage).Take(VideosPerPage);

            foreach (var video in page.Where(x => !CurrentPageVideos.Contains(x)).ToArray())
            {
                CurrentPageVideos.Add(video);
            }

            VideoCollectionView.Filter = x => page.Contains(x);

            if (!CurrentPageVideos.Contains(SelectedVideo))
            {
                VideoCollectionView.MoveCurrentToFirst();
                RequestScrollToFirstItem?.Invoke(this, null);
            }

            MaxPage = FilteredVideos.Count / VideosPerPage;

            if (CurrentPage > MaxPage)
            {
                CurrentPage = MaxPage;
            }
        }
        private void ApplySortOrder()
        {
            switch (SelectedVideoSortOption.VideoSortOption)
            {
            case VideoSortOptionViewModel.VideoSortOptionKind.Artist:
                if (SelectedVideoSortOption.SortedAscending)
                {
                    FilteredVideos = FilteredVideos.OrderBy(x => x.Artist.Name).ThenBy(x => x.Name).ToList();
                }
                else
                {
                    FilteredVideos = FilteredVideos.OrderByDescending(x => x.Artist.Name).ThenByDescending(x => x.Name).ToList();
                }

                VideoCollectionView.SortDescriptions.Clear();
                VideoCollectionView.SortDescriptions.Add(new SortDescription("Artist.Name", SelectedVideoSortOption.SortedAscending ? ListSortDirection.Ascending : ListSortDirection.Descending));
                VideoCollectionView.SortDescriptions.Add(new SortDescription("Name", SelectedVideoSortOption.SortedAscending ? ListSortDirection.Ascending : ListSortDirection.Descending));
                break;

            case VideoSortOptionViewModel.VideoSortOptionKind.Date:
                if (SelectedVideoSortOption.SortedAscending)
                {
                    FilteredVideos = FilteredVideos.OrderBy(x => x.FileCreated).ToList();
                }
                else
                {
                    FilteredVideos = FilteredVideos.OrderByDescending(x => x.FileCreated).ToList();
                }

                VideoCollectionView.SortDescriptions.Clear();
                VideoCollectionView.SortDescriptions.Add(new SortDescription("FileCreated", SelectedVideoSortOption.SortedAscending ? ListSortDirection.Ascending : ListSortDirection.Descending));
                break;

            case VideoSortOptionViewModel.VideoSortOptionKind.Alphabet:
                if (SelectedVideoSortOption.SortedAscending)
                {
                    FilteredVideos = FilteredVideos.OrderBy(x => x.Name).ToList();
                }
                else
                {
                    FilteredVideos = FilteredVideos.OrderByDescending(x => x.Name).ToList();
                }

                VideoCollectionView.SortDescriptions.Clear();
                VideoCollectionView.SortDescriptions.Add(new SortDescription("Name", SelectedVideoSortOption.SortedAscending ? ListSortDirection.Ascending : ListSortDirection.Descending));
                break;

            default:
                break;
            }

            SetCurrentPage();
        }
        private async void VideoProvider_VideoAdded(object sender, Video e)
        {
            if (Videos.Any(x => x.FilePath == e.FilePath))
            {
                return;
            }

            var videoVM = new VideoViewModel(e);

            Videos.Add(videoVM);
            FilteredVideos.Add(videoVM);

            SetCurrentPage();
            videoVM.ThumbailBitmap = await videoVM.GetThumbnailBitmap().ConfigureAwait(false);
        }
        private void FilterVideos(object o)
        {
            var  str             = AutoSuggestBoxInput;
            bool filterAfterText = !string.IsNullOrWhiteSpace(str);

            if (filterAfterText)
            {
                FilteredVideos = Videos.Where(x => x.Artist.Name.ToLower().Contains(str) || x.Name.ToLower().Contains(str)).ToList();
                AutoSuggestValues.Clear();
            }

            if (FavoriteFilterOn)
            {
                FilteredVideos = FilteredVideos.Where(x => x.IsFavorite).ToList();
            }

            if (!filterAfterText && !FavoriteFilterOn)
            {
                FilteredVideos = Videos.ToList();
            }

            ApplySortOrder();
        }