Пример #1
0
        /// <summary>
        /// Ermittelt die Liste der Genres für den Movie und fügt diejenigen hinzu, deren Name noch nicht in der
        /// übergebenen Liste enthalten ist
        /// Es werden keine Genres entfernt
        /// Typische Anwednung: Bei Selektion eines Movie von einem Provider werden Genrenamen mitgeliefert, die
        /// dann dem Film hinzugefügt werden sollen
        /// </summary>
        /// <param name="movie">Film, dessen Genres erweitert werden sollem</param>
        /// <param name="genreNames">Namen der hinzuzufügenden Genres</param>
        /// <returns>Alle MovieGenres für den Film, also alte sowie neu hinzugefügte</returns>
        public async Task <ICollection <MovieGenre> > AddMovieGenres(Movie movie, IList <string> genreNames)
        {
            List <MovieGenre> movieGenres  = new List <MovieGenre>();
            IGenreService     genreService = Resolver.Resolve <IGenreService>();

            // Bestimmen der Genres, die dem Film neu zugeordnet werden müssen
            var existingGenres     = movie.MovieGenres.Where(x => x.Movie == movie).Select(mg => mg.Genre);
            var existingGenreNames = existingGenres.Select(s => s.Name);
            var newGenreNames      = (from genre in genreNames select genre).Except(from existingGenre in existingGenreNames select existingGenre);

            foreach (string genreName in newGenreNames)
            {
                // Genres anlegen, falls es noch nicht existiert
                Genre genre = await genreService.GetOrCreateGenre(genreName);

                MovieGenre movieGenre = MovieGenre.CreateNew <MovieGenre>();
                movieGenre.Movie = movie;
                movieGenre.Genre = genre;
                movieGenres.Add(movieGenre);
            }

            // Auch die bereits vorhandenen, zugeordneten Genres zurückgeben, damit diese angezeigt werden
            movieGenres.AddRange(movie.MovieGenres);

            return(movieGenres);
        }
Пример #2
0
        private void GenreSelectionChangedHandler(GenreSelection genreSelection)
        {
            MovieGenre movieGenre = Movie.MovieGenres.Where(mg => mg.Genre.Id == genreSelection.Genre.Id).FirstOrDefault();

            if (genreSelection.Selected)
            {
                if (movieGenre == null)
                {
                    movieGenre       = MovieGenre.CreateNew <MovieGenre>();
                    movieGenre.Genre = genreSelection.Genre;
                    movieGenre.Movie = Movie;
                    Movie.MovieGenres.Add(movieGenre);
                    OnGenreSelectionChanged?.Invoke(genreSelection);
                }
                else if (movieGenre.IsDeleted)
                {
                    movieGenre.IsDeleted = false;
                }
            }
            else if (movieGenre != null)
            {
                // Wird ein Genre abgewählt, dass noch nicht gespeichert war, kann es einfach aus der Liste entfernt werden.
                // War es schon gespeichert, muss es auf Deleted gesetzt werden, damit das Delete in der DB stattfinden kann.
                if (movieGenre.IsNew)
                {
                    Movie.MovieGenres.Remove(movieGenre);
                }
                else
                {
                    movieGenre.IsDeleted = true;
                }
                OnGenreSelectionChanged?.Invoke(genreSelection);
            }
        }
Пример #3
0
        /// <summary>
        /// Gleicht die Liste der Genres für den Film miot der übergebenen Id mit den Genres ab, deren
        /// Ids mitgeliefert werden. Neue Genres werden hinzugefügt, entfernte werden auf Deleted gesetzt.
        /// </summary>
        /// <param name="movieId">Id des Films, dessen Genres abgeglichen werdem sollem</param>
        /// <param name="genreIds">Liste der Ids aller Genres, die dem Film zugeordnet werden sollen</param>
        /// <returns>Alle MovieGenres für den Film (die gelöschten auch mit IsDeleted==true)</returns>
        public async Task <ICollection <MovieGenre> > SyncMovieGenres(string movieId, IList <string> genreIds)
        {
            List <MovieGenre> movieGenres = new List <MovieGenre>();

            var movie = await GetWithGenresAndSourcesAsync(movieId);

            if (movie == null)
            {
                return(movieGenres);
            }

            movieGenres = movie.MovieGenres.ToList();

            var existingMovieGenreIds = movieGenres.Select(m => m.Genre.Id);

            // Alle zu entfernenden Genres
            var idsToRemove = (from c1 in existingMovieGenreIds select c1).Except(from c2 in genreIds select c2);

            foreach (string idToRemove in idsToRemove)
            {
                var movieGenreToRemove = movieGenres.Where(g => g.Genre.Id == idToRemove).FirstOrDefault();
                movieGenreToRemove.IsDeleted = true;
            }

            // Alle neuen Genres
            var idsToAdd = (from c1 in genreIds select c1).Except(from c2 in existingMovieGenreIds select c2);

            foreach (string idToAdd in idsToAdd)
            {
                var newMovieGenre = MovieGenre.CreateNew <MovieGenre>();
                newMovieGenre.Movie = movie;
                newMovieGenre.Genre = await Resolver.Resolve <IGenreService>().GetAsync(idToAdd);

                movieGenres.Add(newMovieGenre);
            }

            return(movieGenres);
        }