private void ShowToastIfNeeded(DeckListViewModel deckListViewModel) { var settings = ApplicationData.Current.LocalSettings; bool isShown; if (settings.Values.ContainsKey("IsEnableNotifciation")) { isShown = (bool)settings.Values["IsEnableNotifciation"]; } else { settings.Values["IsEnableNotifciation"] = true; isShown = true; } if (!isShown) { return; } if (ToastHelper.IsAlreadyShown()) { return; } string message = String.Format("You have {0} new card(s) and {1} due card(s) to review today.", deckListViewModel.TotalNewCards, deckListViewModel.TotalDueCards); var toast = ToastHelper.CreateToast("Review", message); ToastHelper.PopToast(toast); ToastHelper.MarkAlreadyShown(); }
public void ResetFiltersTest001() { Mock <IDeckClassSelectorViewModel> classSelectorFullFilter = GetFullClassFilter(); Mock <IDeckTypeSelectorViewModel> typeSelectorFullFilter = GetFullTypeFilter(); Mock <ITracker> tracker = new Mock <ITracker>(); tracker.Setup(t => t.Decks).Returns(new ObservableCollection <Deck>()); Mock <IMessenger> messanger = new Mock <IMessenger>(); Mock <ISettings> settings = new Mock <ISettings>(); settings.Setup(s => s.DeckViewSortOrder).Returns(DeckViewSortOrder.LastUsed); Mock <ITrackerFactory> trackerFactory = new Mock <ITrackerFactory>(); trackerFactory.Setup(tf => tf.GetService <IMessenger>()).Returns(messanger.Object); trackerFactory.Setup(tf => tf.GetTracker()).Returns(tracker.Object); trackerFactory.Setup(tf => tf.GetService <ISettings>()).Returns(settings.Object); DeckListViewModel model = new DeckListViewModel(trackerFactory.Object); model.CommandResetFiltersExecute(null); //assure filter has been removed messanger.Verify(m => m.Send <DeckListResetFilters>(It.IsAny <DeckListResetFilters>(), It.Is <ControlMessangerContext>(c => c == ControlMessangerContext.DeckList_DeckFilterControl))); }
public async void Run(IBackgroundTaskInstance taskInstance) { deferral = taskInstance.GetDeferral(); await EnableCancelOfTask(taskInstance); try { using (var collection = await Storage.OpenCollection(Storage.AppLocalFolder, Constant.COLLECTION_NAME)) { var deckListViewModel = new DeckListViewModel(collection); deckListViewModel.GetAllDeckInformation(); await deckListViewModel.UpdateAllSecondaryTilesIfHas(); if (deckListViewModel.TotalNewCards + deckListViewModel.TotalDueCards > 0) { if (taskInstance.Task.Name.Equals(Shared.AnkiDeckBackgroundRegisterHelper.SYSTEM_TRIGGERED_TASK_NAME, StringComparison.OrdinalIgnoreCase)) { ShowToastIfNeeded(deckListViewModel); } } } } catch { } finally { deferral.Complete(); } }
public void FilterDeckListTest003_FilterByTwoAttributes() { List <DeckAttribute> filterAttrib = new List <DeckAttribute>() { DeckAttribute.Strength, DeckAttribute.Endurance }; DeckClass?selectedClass = null; var filteredClasses = new ObservableCollection <DeckClass>( Utils.ClassAttributesHelper.FindClassByAttribute(filterAttrib) ); Mock <IDeckTypeSelectorViewModel> typeSelector = GetFullTypeFilter(); int expectedCount = 0 + //none inrandom data 1; //one for every class DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( DeckBase, null, false, false, selectedClass, filteredClasses, null); Assert.AreEqual(expectedCount, result.Count()); Assert.IsTrue(result.All(r => { return(Utils.ClassAttributesHelper.Classes[r.Class.Value].Contains(filterAttrib[0])); })); }
public void FilterDeckListTest006_FilterByClassAndDeckType() { DeckClass classFilter = DeckClass.Mage; var filteredClasses = new ObservableCollection <DeckClass>(new List <DeckClass>() { classFilter }); List <DeckType> typeFilter = new List <DeckType>() { DeckType.SoloArena }; var filteredTypes = new ObservableCollection <DeckType>(typeFilter); int expectedCount = 2; DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( DeckBase, filteredTypes, false, false, classFilter, filteredClasses, null); Assert.AreEqual(expectedCount, result.Count()); Assert.AreEqual(classFilter, result.ToList()[0].Class); Assert.AreEqual(classFilter, result.ToList()[1].Class); Assert.AreEqual(typeFilter[0], result.ToList()[0].Type); Assert.AreEqual(typeFilter[0], result.ToList()[1].Type); }
public void FilterDeckListTest001_FilterByClass() { DeckClass selectedClass = DeckClass.Mage; var filteredClasses = new ObservableCollection <DeckClass>(new List <DeckClass>() { selectedClass }); int expectedCount = 3; DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( DeckBase, null, false, false, selectedClass, filteredClasses, null); Assert.AreEqual(expectedCount, result.Count()); Assert.AreEqual(selectedClass, result.ToList()[0].Class); Assert.AreEqual(selectedClass, result.ToList()[1].Class); Assert.AreEqual(selectedClass, result.ToList()[2].Class); }
public void FilterDeckListTest002_FilterByOneAttribute() { DeckAttribute filterAttrib = DeckAttribute.Strength; DeckClass? selectedClass = null; var filteredClasses = new ObservableCollection <DeckClass>( ClassAttributesHelper.FindClassByAttribute(filterAttrib) ); Mock <IDeckTypeSelectorViewModel> typeSelector = GetFullTypeFilter(); int expectedCount = 3 + //random data - archer i battlemage y strength 5; //one for every class DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( DeckBase, null, false, false, selectedClass, filteredClasses, null); Assert.AreEqual(expectedCount, result.Count()); Assert.IsTrue(result.All(r => { return(Utils.ClassAttributesHelper.Classes[r.Class.Value].Contains(filterAttrib)); })); }
public async void Run(IBackgroundTaskInstance taskInstance) { deferral = taskInstance.GetDeferral(); try { ToastHelper.PopToast("TEST TITLE", "content"); using (var collection = await Storage.OpenOrCreateCollection(Storage.AppLocalFolder, Constant.COLLECTION_NAME)) { var deckListViewModel = new DeckListViewModel(collection); deckListViewModel.GetAllDeckInformation(); await deckListViewModel.UpdateAllSecondaryTilesIfHas(); if (deckListViewModel.TotalNewCards + deckListViewModel.TotalDueCards > 0) { string message = String.Format("You have {0} new card(s) and {1} due card(s) to review.", deckListViewModel.TotalNewCards, deckListViewModel.TotalDueCards); ToastHelper.PopToast("Review cards", message); } } } catch { } finally { deferral.Complete(); } }
private void TextBox_LostFocus(object sender, RoutedEventArgs e) { DeckListViewModel model = ((DeckListViewModel)this.DataContext); if (String.IsNullOrWhiteSpace(model.DeckTextSearch)) { model.DeckTextSearchEntered = false; } }
public void FilterDeckListTest007_HideCompletedVersusArenaRuns() { DeckClass classFilter = DeckClass.Mage; var selectedClass = classFilter; var filteredClasses = new ObservableCollection <DeckClass>(new List <DeckClass>() { classFilter }); List <DeckType> typeFilter = new List <DeckType>() { DeckType.VersusArena }; var filteredTypes = new ObservableCollection <DeckType>(typeFilter); var showCompletedArenaRuns = false; Mock <ITracker> tracker = new Mock <ITracker>(); Mock <ITrackerFactory> trackerFactory = new Mock <ITrackerFactory>(); trackerFactory.Setup(tf => tf.GetNewGuid()).Returns(() => Guid.NewGuid()); trackerFactory.Setup(tf => tf.GetTracker()).Returns(tracker.Object); trackerFactory.Setup(tf => tf.GetService <IDeckService>()).Returns(new DeckService(trackerFactory.Object)); Deck deckToShow = new Deck(trackerFactory.Object) { Type = DeckType.VersusArena, Class = classFilter }; Deck deckToHide = new Deck(trackerFactory.Object) { Type = DeckType.VersusArena, Class = classFilter }; tracker.Setup(t => t.Games).Returns( new ObservableCollection <DataModel.Game>( GenerateGamesList(deckToShow, 2, 2).Union(GenerateGamesList(deckToHide, 7, 2)) )); int expectedCount = 1; DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( new Deck[] { deckToShow, deckToHide }, filteredTypes, showCompletedArenaRuns, false, selectedClass, filteredClasses, null); Assert.AreEqual(expectedCount, result.Count()); Assert.AreEqual(deckToShow.DeckId, result.First().DeckId); }
private async void OnMenuFlyoutCreateDeckTileClick(object sender, RoutedEventArgs e) { base.IsEnabled = false; var tileId = deckShowContextMenu.Id.ToString(); SecondaryTile tile = TilesHelper.GenerateSecondaryTile(tileId, deckShowContextMenu.BaseName); tile.VisualElements.ShowNameOnSquare150x150Logo = true; tile.VisualElements.ShowNameOnSquare310x310Logo = true; tile.VisualElements.ShowNameOnWide310x150Logo = true; tile.VisualElements.BackgroundColor = DeckListViewModel.GetColors(deckShowContextMenu); await tile.RequestCreateAsync(); base.IsEnabled = true; TilesHelper.SendSecondaryTileNotification(tileId, deckShowContextMenu.NewCards.ToString(), deckShowContextMenu.DueCards.ToString()); }
public void FilterDeckListTest004_ClearFilters() { DeckClass?selectedClass = null; var filteredClasses = new ObservableCollection <DeckClass>( Utils.ClassAttributesHelper.FindClassByAttribute(DeckAttribute.Neutral) ); Mock <IDeckTypeSelectorViewModel> typeSelector = GetFullTypeFilter(); int expectedCount = DeckBase.Count; DeckListViewModel model = new DeckListViewModel(); //do first filter - not intrested IEnumerable <Deck> result = model.FilterDeckList( DeckBase, null, false, false, selectedClass, filteredClasses, null); //model is norw filyred Assert.AreNotEqual(expectedCount, result.Count()); //reset filters - class selector returns all clases filteredClasses = new ObservableCollection <DeckClass>( Utils.ClassAttributesHelper.Classes.Keys ); result = model.FilterDeckList( DeckBase, null, false, true, selectedClass, filteredClasses, null); Assert.AreEqual(expectedCount, result.Count()); }
public DeckListViewModel ListDecks(int ResourceId, int NextPage, int ItemsPerPage, string OrderBy = null, string SearchText = "") { var selResource = this.repositoryWrapper.Resource.FindByCondition(r => r.ResourceId == ResourceId) .Include(r => r.Decks) .ThenInclude(d => d.Cards) .Include(r => r.Decks) .ThenInclude(d => d.Revisions) .First(); var deckViews = selResource.Decks .Where(d => d.Title.IndexOf(SearchText, StringComparison.OrdinalIgnoreCase) >= 0) .Select(d => new DeckViewDto { DeckId = d.DeckId, ResourceId = d.ResourceId, SubjectId = 0, ResourceTitle = d.Resource.Title, Title = d.Title, IsShared = d.IsShared, RevisionCount = d.RevisionCount, CardCount = d.CardCount, LastRevisionDateString = d.Revisions.OrderByDescending(r => r.EndTime).Select(r => r.EndTime.ToShortDateString()).FirstOrDefault() ?? "Never Revised", LastRevisionDateTime = d.Revisions.OrderByDescending(r => r.EndTime).Select(r => r.EndTime).FirstOrDefault() }) .OrderBy(dv => (OrderBy != null)? (dv.GetType().GetProperty(OrderBy).GetValue(dv)):(dv.Title)) .ToList(); var dList = new DeckListViewModel { ResourceId = ResourceId, ResourceTitle = selResource.Title, SubjectId = selResource.SubjectId, Decks = deckViews.Skip((NextPage - 1) * ItemsPerPage).Take(ItemsPerPage), Skip = (NextPage - 1) * ItemsPerPage, Take = ItemsPerPage, TotalDeckCount = deckViews.Count() }; return(dList); }
public void FilterDeckListTest010_FilterIncludeHiddenDecks() { List <DeckType> typeFilter = new List <DeckType>() { DeckType.Constructed }; var filteredTypes = new ObservableCollection <DeckType>(typeFilter); int expectedCount = 23; DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( DeckBase, filteredTypes, false, true, null, null, null); Assert.AreEqual(expectedCount, result.Count()); }
public void FilterDeckListTest005_FilterByDeckType() { List <DeckType> typeFilter = new List <DeckType>() { DeckType.SoloArena }; var filteredTypes = new ObservableCollection <DeckType>(typeFilter); int expectedCount = 3; //only in random data DeckListViewModel model = new DeckListViewModel(); IEnumerable <Deck> result = model.FilterDeckList( DeckBase, filteredTypes, false, false, null, Utils.ClassAttributesHelper.Classes.Keys, null); Assert.AreEqual(expectedCount, result.Count()); Assert.IsTrue(result.All(r => { return(typeFilter.Contains(r.Type)); })); }
private void ContentPage_Appearing(object sender, EventArgs e) { BindingContext = viewModel = new DeckListViewModel(); }
private void GetDecksInformation() { deckListViewModel = new DeckListViewModel(mainPage.Collection); deckListViewModel.GetAllDeckInformation(); }
private void TextBox_GotFocus(object sender, RoutedEventArgs e) { DeckListViewModel model = ((DeckListViewModel)this.DataContext); model.DeckTextSearchEntered = true; }