Ejemplo n.º 1
0
        public QuizPage(URLHttpParams httpParams)
        {
            InitializeComponent();
            viewModel           = new QuizViewModel(httpParams);
            this.BindingContext = viewModel;

            MessagingCenter.Subscribe <QuizViewModel>(this, "QuizesLoaded", (sender) => {
                if (sender.Quizes == null || sender.Quizes.Count < 1)
                {
                    return;
                }
                count     = sender.Quizes.Count;
                possition = 1;
            });
        }
Ejemplo n.º 2
0
 public QuizViewModel(URLHttpParams httpParams)
 {
     PageType        = ItemType.QuizAnswer;
     Answers         = new ObservableCollection <QuizAnswerViewModel>();
     LoadPageCommand = new Command(async() => await ExcuteLoadPageCommand(httpParams));
     MessagingCenter.Subscribe <ItemsViewModel>(this, "ItemsLoaded", (sender) => {
         Item i = Items.Where(x => ((QuizAnswer)x).IsRight == 0).First();
         foreach (var item in Items)
         {
             var quizAnswer = new QuizAnswerViewModel(item as QuizAnswer);
             Answers.Add(quizAnswer);
         }
         RightAnswer = i.Id;
     });
 }
Ejemplo n.º 3
0
        public ItemsViewModel(URLHttpParams httpParams = null)
        {
            Title            = "Mani kursi";
            Items            = new ObservableCollection <Item>();
            LoadItemsCommand = new Command(async(args) => {
                httpParams = (URLHttpParams)args ?? httpParams;
                await ExecuteLoadItemsCommand(httpParams);
            });

            MessagingCenter.Subscribe <NewItemPage, Item>(this, "AddItem", async(obj, item) =>
            {
                var newItem = item as Item;
                Items.Add(newItem);
                await DataStore.AddItemAsync(newItem);
            });
        }
Ejemplo n.º 4
0
        private async Task DoGetRequest(object obj)
        {
            URLHttpParams httpParams = (URLHttpParams)obj;
            string        url        = httpParams.URL;

            try
            {
                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri(url);
                var response = await client.GetAsync(client.BaseAddress);

                response.EnsureSuccessStatusCode(); // выброс исключения, если произошла ошибка

                // десериализация ответа в формате json
                var content = await response.Content.ReadAsStringAsync();

                JObject o = JObject.Parse(content);

                MethodInfo method = typeof(JsonConvert).GetMethods()
                                    .Where(m => m.Name == "DeserializeObject")
                                    .Select(m => new {
                    Method = m,
                    Params = m.GetParameters(),
                    Args   = m.GetGenericArguments()
                })
                                    .Where(x => x.Params.Length == 1 &&
                                           x.Args.Length == 1)
                                    .Select(x => x.Method)
                                    .First();
                Type t = Type.GetType("BachelorThesis.Models." + httpParams.Type);
                t = typeof(ItemRecords <>).MakeGenericType(t);

                MethodInfo generic = method.MakeGenericMethod(t);
                var        test    = generic.Invoke(null, new[] { o.ToString() });

                FieldInfo   property = test.GetType().GetFields().First();
                IEnumerable result   = (IEnumerable)property.GetValue(test);
                items = result.Cast <Item>().ToList();

                //var itemRecords = JsonConvert.DeserializeObject<ItemRecords<Item>>(o.ToString());
                //items = itemRecords.records;
            }
            catch (Exception ex)
            { Debug.WriteLine(ex); }
        }
Ejemplo n.º 5
0
        public ItemsPage(URLHttpParams httpParams, ItemType pageType)
        {
            InitializeComponent();

            viewModel = new ItemsViewModel(httpParams)
            {
                PageType   = pageType,
                Navigation = this.Navigation
            };

            BindingContext = viewModel;

            if (pageType == ItemType.Content)
            {
                stackLayout.Children.RemoveAt(0);
                quizButton.IsVisible = true;

                gridView.ColumnDefinitions.Add(new ColumnDefinition()
                {
                    Width = new GridLength(1, GridUnitType.Star)
                });
                Grid.SetColumnSpan(stackLayout, 3);
                gridView.Children.Add(quizButton, 2, 1);

                WebView webView = new WebView();
                webView.HorizontalOptions = LayoutOptions.FillAndExpand;
                webView.VerticalOptions   = LayoutOptions.FillAndExpand;

                var source = new HtmlWebViewSource();
                source.SetBinding(HtmlWebViewSource.HtmlProperty, "Text");
                webView.Source = source;

                stackLayout.Children.Add(webView);

                MessagingCenter.Subscribe <ItemsViewModel, object>(this, "ContentLoaded", (seder, obj) =>
                {
                    Content info = ((IEnumerable)obj).Cast <Content>().First();
                    if (info.Count > 0)
                    {
                        quizButton.IsEnabled = true;
                    }
                });
            }
        }
Ejemplo n.º 6
0
        protected override void OnAppearing()
        {
            base.OnAppearing();

            if (IsNewPage)
            {
                viewModel.LoadPageCommand.Execute(null);
            }
            else
            {
                if (viewModel.Quizes.Count == 0)
                {
                    return;
                }
                Item currentQuiz = viewModel.Quizes.Dequeue();
                viewModel.Question = currentQuiz.Name;
                URLHttpParams httpParams = new URLHttpParams(viewModel.PageType, currentQuiz.Id.ToString());
                viewModel.LoadItemsCommand.Execute(httpParams);
            }
        }
Ejemplo n.º 7
0
        async Task  ExcuteLoadPageCommand(object obj)
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                Items.Clear();
                var quizes = await DataStore.GetItemsAsync(true, obj);

                if (quizes == null)
                {
                    return;
                }

                Quizes = new Queue <Item>(quizes);
                MessagingCenter.Send <QuizViewModel>(this, "QuizesLoaded");
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }

            Item currentQuiz = Quizes.Dequeue();

            Question = currentQuiz.Name;
            URLHttpParams httpParams = new URLHttpParams(PageType, currentQuiz.Id.ToString());

            await ExecuteLoadItemsCommand(httpParams);
        }
Ejemplo n.º 8
0
        async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
        {
            var item = args.SelectedItem as Item;

            if (item == null)
            {
                return;
            }

            ItemType      nextPageType;
            URLHttpParams httpParams;
            string        title;

            switch (viewModel.PageType)
            {
            case ItemType.Course:
                nextPageType = ItemType.Lesson;
                title        = "Nodarbības";
                break;

            case ItemType.Lesson:
                nextPageType = ItemType.Content;
                title        = item.Name;
                break;

            default:
                nextPageType = ItemType.Course;
                title        = "Mani Kursi";
                break;
            }

            httpParams = new URLHttpParams(nextPageType, item.Id.ToString());
            await Navigation.PushAsync(new ItemsPage(httpParams, nextPageType) { Title = title });

            // Manually deselect item.
            ItemsListView.SelectedItem = null;
        }
Ejemplo n.º 9
0
 async void OnQuizButtonClicked(object sender, System.EventArgs e)
 {
     string        id         = viewModel.Items.First().Id.ToString();
     URLHttpParams httpParams = new URLHttpParams(ItemType.Quiz, id);
     await Navigation.PushModalAsync(new QuizPage(httpParams));
 }