Example #1
0
        /// <summary>Gets the lists asynchronous. Creates listitems from user owned lists in the database</summary>
        private async void GetListsAsync()
        {
            //The users current login token
            string token = LoginPage.token;

            //Adding object to the list
            //If database api request fails delete listview content.
            ListItems.Clear();
            ObservableCollection <AllList> returnedCollection = await ListCalls.GetTokenOwnerLists(token);

            foreach (AllList a in returnedCollection)
            {
                ListItems.Add(
                    new AllList()
                {
                    ListId   = a.ListId,
                    ListName = a.ListName,
                    UserId   = a.UserId
                }
                    );
            }
        }
Example #2
0
        /// <summary>Creates collection for all of the genres in the current list</summary>
        public async void GetAllLists()
        {
            //Getting the user owned lists
            ObservableCollection <AllList> userLists = await ListCalls.GetTokenOwnerLists(LoginPage.token);

            //Creating objects that contains the listId's
            AllList toWatchList = new AllList();
            AllList watchedList = new AllList();

            //Adding the listId's to the appropiat list object
            foreach (AllList n in userLists)
            {
                //Adding to ToWatch List object
                if (n.ListName == "ToWatch")
                {
                    toWatchList.ListId   = n.ListId;
                    toWatchList.ListName = n.ListName;
                }
                //Adding to watched List object
                if (n.ListName == "Watched")
                {
                    watchedList.ListId   = n.ListId;
                    watchedList.ListName = n.ListName;
                }
            }

            //Getting all the listItems from the ToWatch List
            ObservableCollection <AllListItems> allTowatchListObjects = await ListItemCalls.GetListItems(toWatchList.ListId);

            //Getting all the listItems from the ToWatch List
            ObservableCollection <AllListItems> allWatchedListObjects = await ListItemCalls.GetListItems(watchedList.ListId);

            //Getting All of the Movies
            allMovies = await MovieCalls.GetMovies();

            //Creating lists for storing allMovie object for the toWatch and watched list
            ObservableCollection <Movie> allToWatchMovies = new ObservableCollection <Movie>();
            ObservableCollection <Movie> allWatchedMovies = new ObservableCollection <Movie>();

            //Comparing the All ListObjects movie id with tall movies (Intensive task that can be optimised)
            foreach (Movie m in allMovies)
            {
                //ToWatch
                foreach (AllListItems toWatchI in allTowatchListObjects)
                {
                    //If the movie exists in the towatchlist add the Movie object to the new list
                    //This is so that the Movie object that contains all of the information can be displayed in the UI
                    if (m.MovieId == toWatchI.MovieId)
                    {
                        //Adding the movie to the new list
                        allToWatchMovies.Add(m);
                    }
                }
                //Watched
                foreach (AllListItems watched in allWatchedListObjects)
                {
                    //See comments on the foreach loop above
                    if (m.MovieId == watched.MovieId)
                    {
                        allWatchedMovies.Add(m);
                    }
                }
            }

            //Creating reference to the stackPanel that should contain the list
            StackPanel stack_toWatch = Stack_listViews;
            StackPanel stack_Watched = Stack_Watched;

            //Creating the stack lists in the ToWatch Tab
            DynamicListViewCreator("All Genres", allToWatchMovies, stack_toWatch);

            //Creating the stack lists in the Watched Tab
            DynamicListViewCreator("All Genres", allWatchedMovies, Stack_Watched);



            //The new lists can now be used to create seperate lists for every genreId that exists in the Movie collection lists

            //Firstly we need all of the Genre objects that excist.
            //Then we can compare all existing genreId's with the ones that exist in the Watched and toWatch lists.
            ObservableCollection <Genre> allGenres = await GenreCalls.GetGenres();

            //Looping through the allGenres list
            foreach (Genre existingGenres in allGenres)
            {
                //Creates a temporary list to store the movie that contain the current genre
                ObservableCollection <Movie> genreListWatched = new ObservableCollection <Movie>();
                foreach (Movie allWatched in allWatchedMovies)
                {
                    //Finding out that if the allWatched contains the genre
                    if (existingGenres.GenreId == allWatched.GenreId)
                    {
                        //Adding movie with same genre to the list
                        genreListWatched.Add(allWatched);
                    }
                }
                //If any movies got added create a new List in the UI
                if (genreListWatched.Count > 0)
                {
                    DynamicListViewCreator(existingGenres.GenreName, genreListWatched, Stack_Watched);
                }

                //Creates a temporary list to store the movie that contain the current genre
                ObservableCollection <Movie> genreListToWatch = new ObservableCollection <Movie>();
                foreach (Movie allToWatch in allToWatchMovies)
                {
                    //Finding out that if the allToWatch contains the genre
                    if (existingGenres.GenreId == allToWatch.GenreId)
                    {
                        //Adding movie with same genre to the list
                        genreListToWatch.Add(allToWatch);
                    }
                }
                //If any movies got added create a new List in the UI
                if (genreListToWatch.Count > 0)
                {
                    DynamicListViewCreator(existingGenres.GenreName, genreListToWatch, stack_toWatch);
                }
                //End of Genre Loop
            }
        }
Example #3
0
        /// <summary>
        /// Handles the SelectionChanged event of the Combobox_Options control.
        /// Logic for all of the the different selection options
        /// Sorry to the person reading this. I should definitely have called methods instead of writing so much code.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="SelectionChangedEventArgs"/> instance containing the event data.</param>
        private async void Combobox_Options_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Amount of selected items
            int selectedAmount = gridViewMovies.SelectedItems.Count;

            // Get the ComboBox instance
            ComboBox comboBox = sender as ComboBox;

            string selectedName;

            try
            {
                selectedName = comboBox.SelectedValue.ToString();
            }
            catch (System.NullReferenceException nullReffEx)
            {
                //Catches if there is selectedValue is null
                //This occurs if the combobox is reset. Since the selection is changed into an invalid value the method must be stopped
                selectedName = nullReffEx.ToString();

                //Resets the combobox
                comboBox_Options.SelectedIndex = -1;

                //Exiting method.
                return;
            }

            //If no movies are selected return
            if (selectedAmount == 0)
            {
                await new MessageDialog(
                    "No items are selected",
                    //Failed to (Open/Edit/Delete/Add to ToWatch list/Add to Watched list)
                    "Failed to " + selectedName).ShowAsync(); //Display message

                //Resets the combobox
                comboBox_Options.SelectedIndex = -1;
                return;
            }

            //Creates string with all selected MovieNames
            var movies = gridViewMovies.SelectedItems;

            string selectedMoviesString = "";

            foreach (var m in movies)
            {
                var movie = m as Movie;

                selectedMoviesString += movie.Title + "\r\n";
            }


            // Logic for reading the selected combobox items is written in the if tests below



            //SELECTED "Open" IN THE COMBOBOX
            if (selectedName == "Open")
            {
                //If multiple movies are selected
                if (selectedAmount > 1)
                {
                    await new MessageDialog("Open movies failed", "You can only open 1 movie at the same time").ShowAsync(); //Display message

                    //Resets the combobox
                    comboBox_Options.SelectedIndex = -1;
                    //Exit method
                    return;
                }


                //Opens movie
                Movie selectedMovie = gridViewMovies.SelectedItem as Movie;

                await Task.Delay(50);

                //Creating parameter for tapped movie object
                var parameters = selectedMovie;


                //Navigate to new page, while also sending the Movie object parameters. T
                //he parameters are handled in the override OnNavigatedTo method in MoviePage
                Frame.Navigate(typeof(MoviePage), parameters);


                //Resets the combobox
                comboBox_Options.SelectedIndex = -1;
                return;
            }



            //SELECTED "Edit" IN THE COMBOBOX
            if (selectedName == "Edit")
            {
                //If more than 1 movie is selected
                if (selectedAmount > 1)
                {
                    await new MessageDialog("You can only edit 1 movie at the same time", "Edit movies failed").ShowAsync(); //Display message

                    //Resets the combobox
                    comboBox_Options.SelectedIndex = -1;
                    //Exit method
                    return;
                }

                //Saving The chosen Movie object
                Movie selectedMovie = gridViewMovies.SelectedItem as Movie;

                await Task.Delay(50);

                //Creating parameter for tapped movie object
                var parameters = selectedMovie;


                //Task delay to ensure that the parameters are loaded correctly



                //Navigate to new page, while also sending the Movie object parameters. T
                //he parameters are handled in the override OnNavigatedTo method in EditMoviePage
                Frame.Navigate(typeof(EditMoviePage), parameters);


                //Resets the combobox
                comboBox_Options.SelectedIndex = -1;
                return;
            }



            //SELECTED "Delete" IN THE COMBOBOX
            if (selectedName == "Delete")
            {
                var userMessage = new MessageDialog(
                    //Fill body with names of all the selected movie
                    selectedMoviesString,

                    //Title
                    "Are you sure you want to delete the selected movies shown below?\r\n");

                //Logic for deleteing all of the selected items

                //To prevent users accidentally deleting movies users must accept this option in a popup

                //Using delegate command for yes and no buttons
                userMessage.Commands.Add(new UICommand("Yes!", async delegate(IUICommand command)
                {
                    //Looping through all elements that are selected
                    ObservableCollection <Movie> toRemove = new ObservableCollection <Movie>();

                    //Creates a list of all the objects that are to be removed
                    //This is because it's not possible to modify the same list that is enumerating. (without deleting an incorrect amount of objects)
                    foreach (Movie elem in movies)
                    {
                        toRemove.Add(elem);
                    }

                    // Removing Movie objects that are stored in the toRemoveList
                    foreach (Movie remove in toRemove)

                    {
                        //Removing objects from TableItems ObservableCollection. (Bound to gridViewModels)
                        TableItems.Remove(remove);
                        await DeleteMovieAsync(remove.MovieId);
                    }
                }));

                userMessage.Commands.Add(new UICommand("No!", delegate(IUICommand command)
                {
                    //Resets the combobox
                    comboBox_Options.SelectedIndex = -1;

                    //exits method
                    return;
                }));

                //Open the popup specified above
                await userMessage.ShowAsync();

                //Resets the combobox
                comboBox_Options.SelectedIndex = -1;
            }



            //SELECTED "Add to Towatch" or "Add to watched" IN THE COMBOBOX
            if (selectedName == "Add to ToWatch list" || selectedName == "Add to Watched list")
            {
                //Getting all user owned lists with a httpRequest
                ObservableCollection <AllList> userLists = await ListCalls.GetTokenOwnerLists(LoginPage.token);

                //Id of the chosen userlist
                Nullable <int> chosenUserList = null;

                //Checking the id for the lists owned by the user
                foreach (AllList ali in userLists)
                {
                    if (selectedName == "Add to ToWatch list")
                    {
                        //Checking for the for ToWatch list
                        if (ali.ListName == "ToWatch")
                        {
                            chosenUserList = ali.ListId;
                            await new MessageDialog("", chosenUserList.ToString()).ShowAsync();
                        }
                    }

                    if (selectedName == "Add to Watched list")
                    {
                        //Checking for the id for Watched list
                        if (ali.ListName == "Watched")
                        {
                            chosenUserList = ali.ListId;
                            await new MessageDialog("", chosenUserList.ToString()).ShowAsync();
                        }
                    }
                }

                //Checking if userlist was defined
                if (chosenUserList == null)
                {
                    //Resets the combobox
                    comboBox_Options.SelectedIndex = -1;
                    //returning if not defined
                    return;
                }

                //Posting all of the selected movies to the chosen list specified above (chosenUserList)
                foreach (Movie elem in movies)
                {
                    ListItem newListItem = new ListItem()
                    {
                        MovieId = elem.MovieId,

                        //converting nullable int to int.
                        //The convertion will succeed since I have already checked that the int is not null
                        ListId = Convert.ToInt32(chosenUserList)
                    };
                    //api/ListItems
                    string feedback = await ListItemCalls.PostListItem(newListItem);

                    //
                    //await new MessageDialog(feedback, "Added to list?").ShowAsync();
                }

                //Resets the combobox
                comboBox_Options.SelectedIndex = -1;
            }
        }