public async Task InitializeAsync()
        {
            var settingsLoader = new SettingsLoader();

            VideosPerPage = int.Parse((await settingsLoader.GetSettingAsync(Setting.MAXVIDEOSPERPAGE))?.Value ?? "50");
            ThumpnailSize = int.Parse((await settingsLoader.GetSettingAsync(Setting.THUMPNAILSIZE))?.Value ?? "320");

            var videos = await _VideoProvider.GetVideos();

            videos = videos.OrderBy(x => x.Artist.Name).ThenBy(x => x.Name).ToList();
            foreach (var video in videos)
            {
                var vidVM = new VideoViewModel(video);
                Videos.Add(vidVM);
            }

            FilteredVideos = Videos.ToList();

            // Add all videos to CurrentPageVideos, page filtering is done via SourceCollectionView.Filter
            foreach (var video in Videos)
            {
                CurrentPageVideos.Add(video);
            }

            VideoCollectionView.MoveCurrentToFirst();

            MaxPage = Videos.Count / VideosPerPage;

            GroupAfterArtist(null);

            foreach (var video in Videos)
            {
                video.ThumbailBitmap = await video.GetThumbnailBitmap().ConfigureAwait(false);
            }
        }
        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);
        }
        public VideoPageViewModel(IVideoProvider videoProvider)
        {
            _VideoProvider            = videoProvider;
            videoProvider.VideoAdded += VideoProvider_VideoAdded;

            CurrentPage = 0;
            MaxPage     = 0;

            VideoSortOptions.Add(new VideoSortOptionViewModel
            {
                IconKind              = MahApps.Metro.IconPacks.PackIconBoxIconsKind.RegularUser,
                Name                  = "Artist",
                VideoSortOption       = VideoSortOptionViewModel.VideoSortOptionKind.Artist,
                SortedAscending       = true,
                ApplyVideoGroupOption = GroupAfterArtist
            });
            VideoSortOptions.Add(new VideoSortOptionViewModel
            {
                IconKind              = MahApps.Metro.IconPacks.PackIconBoxIconsKind.RegularCalendar,
                Name                  = "Date",
                VideoSortOption       = VideoSortOptionViewModel.VideoSortOptionKind.Date,
                ApplyVideoGroupOption = GroupAfterDate
            });
            VideoSortOptions.Add(new VideoSortOptionViewModel
            {
                IconKind              = MahApps.Metro.IconPacks.PackIconBoxIconsKind.RegularSortAZ,
                Name                  = "Alphabet",
                VideoSortOption       = VideoSortOptionViewModel.VideoSortOptionKind.Alphabet,
                ApplyVideoGroupOption = GroupAfterAlphabet
            });
            SelectedVideoSortOption = VideoSortOptions[0];

            RefreshVideosCommand        = new RelayCommand <int?>(RefreshVideos);
            NextPageCommand             = new RelayCommand <int?>(NextPage, CanGoToNextPage);
            LastPageCommand             = new RelayCommand <int?>(LastPage, CanGoToLastPage);
            SortAfterDateCommand        = new RelayCommand <int?>(GroupAfterDate);
            ToggleSortOrderCommand      = new RelayCommand <int?>(ToggleSortOrder);
            NextVideoCommand            = new RelayCommand <object>(NextVideo);
            PreviousVideoCommand        = new RelayCommand <object>(PreviousVideo);
            AutoSuggestSubmitCommand    = new RelayCommand <object>(FilterVideos);
            AutoSuggestTextInputCommand = new RelayCommand <string>(AutoSuggestTextInput);
            SetVideoFavoriteCommand     = new RelayCommand <object>(SaveIsFavoriteVideo);

            SelectedVideo = new VideoViewModel(new Video());

            VideoCollectionView = CollectionViewSource.GetDefaultView(CurrentPageVideos);
        }