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();
        }
Пример #2
0
        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();
            }
        }
Пример #4
0
        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])); }));
        }
Пример #5
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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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;
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
        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());
        }
Пример #12
0
        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());
        }
Пример #13
0
        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);
        }
Пример #14
0
        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());
        }
Пример #15
0
        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)); }));
        }
Пример #16
0
 private void ContentPage_Appearing(object sender, EventArgs e)
 {
     BindingContext = viewModel = new DeckListViewModel();
 }
Пример #17
0
 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;
        }