コード例 #1
0
ファイル: Repository.cs プロジェクト: omeryanar/MovieMatrix
        public async Task <List <MovieContainer> > GetMovieIMDbTop250ListAsync(string language, CancellationToken cancellationToken)
        {
            var tmdbResult = await TMDbClient.GetListAsync(listId : "10265", language : language, cancellationToken : cancellationToken);

            List <MovieContainer> result = new List <MovieContainer>(tmdbResult.ItemCount);

            for (int i = 0; i < tmdbResult.Items.Count; i++)
            {
                if (tmdbResult.Items[i] is SearchMovie movie)
                {
                    MovieContainer container = GetContainer(movie);
                    result.Add(container);

                    if (container.TopRating != i + 1)
                    {
                        container.TopRating = i + 1;
                        if (container.IsAdded)
                        {
                            Movies.Update(container);
                        }
                    }
                }
            }

            return(result);
        }
コード例 #2
0
ファイル: Repository.cs プロジェクト: omeryanar/MovieMatrix
        public async Task <MovieContainer> GetMovieAsync(int movieId, CancellationToken cancellationToken)
        {
            MovieContainer container = Movies.FindById(movieId);

            if (container != null)
            {
                return(container);
            }

            MovieMethods methods    = MovieMethods.Credits | MovieMethods.Images | MovieMethods.Videos | MovieMethods.Translations | MovieMethods.Keywords;
            Movie        tmdbResult = await TMDbClient.GetMovieAsync(movieId, methods, cancellationToken);

            container = new MovieContainer(tmdbResult);

            ImdbHelper.GetImdbInfo(tmdbResult.ImdbId).ContinueWith(x =>
            {
                if (x.IsCompleted && !x.IsFaulted && x.Result != null)
                {
                    container.Votes      = x.Result.Resource.RatingCount;
                    container.TopRating  = x.Result.Resource.TopRank;
                    container.ImdbRating = x.Result.Resource.Rating;
                }
            }, TaskScheduler.FromCurrentSynchronizationContext()).LogIfFaulted();

            return(container);
        }
コード例 #3
0
        public void UpdatePairedListForGenre(IList <String> genres)
        {
            IList <string> filteredMovies = preferences.GetFilters();
            ObservableCollection <Movie> likedMoviesInGenre = new ObservableCollection <Movie>(GetPreferencesInGenres(filteredMovies));

            try
            {
                pairedMovieList.Clear();
                for (int i = 0; i < likedMoviesInGenre.Count; i += 2)
                {
                    MovieContainer container = null;

                    if (i + 1 < likedMoviesInGenre.Count)
                    {
                        container = new MovieContainer(new MovieDetailViewModel(likedMoviesInGenre[i], preferences), new MovieDetailViewModel(likedMoviesInGenre[i + 1], preferences));
                    }
                    else
                    {
                        container = new MovieContainer(new MovieDetailViewModel(likedMoviesInGenre[i], preferences));
                    }
                    pairedMovieList.Add(container);
                }
            }
            catch (BadBackendRequestException ex)
            {
                errorHandler(ex);
            }
        }
コード例 #4
0
        public void UpdatePairedList()
        {
            try
            {
                IList <Movie> preferredMovies = GetPreferencesInGenres(preferences.GetFilters());
                pairedMovieList.Clear();
                for (int i = 0; i < preferredMovies.Count; i += 2)
                {
                    MovieContainer container = null;

                    if (i + 1 < preferredMovies.Count)
                    {
                        container = new MovieContainer(new MovieDetailViewModel(preferredMovies[i], preferences), new MovieDetailViewModel(preferredMovies[i + 1], preferences));
                    }
                    else
                    {
                        container = new MovieContainer(new MovieDetailViewModel(preferredMovies[i], preferences));
                    }
                    pairedMovieList.Add(container);
                }
            }
            catch (BadBackendRequestException ex)
            {
                errorHandler(ex);
            }
        }
コード例 #5
0
ファイル: MainWindow.xaml.cs プロジェクト: asolfre/TVShow
        private void OnLoadedTrailer(object sender, TrailerLoadedEventArgs e)
        {
            if (!e.InError)
            {
                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                {
                    #region Fade in opacity

                    DoubleAnimationUsingKeyFrames opacityAnimation = new DoubleAnimationUsingKeyFrames();
                    opacityAnimation.Duration               = new Duration(TimeSpan.FromSeconds(0.5));
                    PowerEase opacityEasingFunction         = new PowerEase();
                    opacityEasingFunction.EasingMode        = EasingMode.EaseInOut;
                    EasingDoubleKeyFrame startOpacityEasing = new EasingDoubleKeyFrame(1.0, KeyTime.FromPercent(0));
                    EasingDoubleKeyFrame endOpacityEasing   = new EasingDoubleKeyFrame(0.0, KeyTime.FromPercent(1.0),
                                                                                       opacityEasingFunction);
                    opacityAnimation.KeyFrames.Add(startOpacityEasing);
                    opacityAnimation.KeyFrames.Add(endOpacityEasing);

                    MovieContainer.BeginAnimation(OpacityProperty, opacityAnimation);

                    #endregion
                });

                TrailerPlayer.Source = new Uri(e.TrailerUrl);
                TrailerPlayer.Play();
            }
        }
コード例 #6
0
ファイル: Repository.cs プロジェクト: omeryanar/MovieMatrix
        private MovieContainer GetContainer(SearchMovie item)
        {
            MovieContainer container = Movies.FindById(item.Id);

            if (container == null)
            {
                container = new MovieContainer(item);
            }

            return(container);
        }
コード例 #7
0
ファイル: Repository.cs プロジェクト: omeryanar/MovieMatrix
        public async Task UpdateMovieAsync(MovieContainer container, CancellationToken cancellationToken)
        {
            MovieMethods methods    = MovieMethods.Credits | MovieMethods.Images | MovieMethods.Videos | MovieMethods.Translations | MovieMethods.Keywords;
            Movie        tmdbResult = await TMDbClient.GetMovieAsync(container.Id, methods, cancellationToken);

            container.Item = tmdbResult;

            ImdbInfo imdbInfo = await ImdbHelper.GetImdbInfo(tmdbResult.ImdbId);

            container.Votes      = imdbInfo.Resource.RatingCount;
            container.TopRating  = imdbInfo.Resource.TopRank;
            container.ImdbRating = imdbInfo.Resource.Rating;

            Movies.Update(container);
        }
コード例 #8
0
        public async void GetSearchResults(string userInput, string pageNumber)
        {
            Contract.Requires(userInput != null);
            Contract.Requires(pageNumber != null);
            try
            {
                searchedMovies = await backend.getSearchResults(userInput, pageNumber).ConfigureAwait(true);

                pairedMovieList.Clear();
                searchedMovies.ToList();
                if (searchedMovies.Count < 1 || userInput.Length == 0)
                {
                    NoResultsMessage = true;
                }
                else
                {
                    NoResultsMessage = false;

                    for (int i = 0; i < searchedMovies.Count; i++)
                    {
                        if (searchedMovies[i].ImageUrl == null)
                        {
                            searchedMovies[i].ImageUrl = "default_image.png";
                        }
                    }

                    for (int i = 0; i < searchedMovies.Count; i += 2)
                    {
                        MovieContainer container = null;

                        if (i + 1 < searchedMovies.Count())
                        {
                            container = new MovieContainer(new MovieDetailViewModel(searchedMovies[i], preferences), new MovieDetailViewModel(searchedMovies[i + 1], preferences));
                        }
                        else
                        {
                            container = new MovieContainer(new MovieDetailViewModel(searchedMovies[i], preferences));
                        }
                        pairedMovieList.Add(container);
                    }
                }
            }
            catch (BadBackendRequestException ex)
            {
                errorHandler(ex);
            }
        }
コード例 #9
0
        public void CreateMovieContainerView(MovieContainer container)
        {
            if (container == null)
            {
                return;
            }

            string documentType = "MovieSingleView";
            string documentId   = String.Format("{0}:{1}", documentType, container.Id);

            if (ShowDocument(String.Empty, documentId))
            {
                return;
            }

            CreateDocument(() => container.GetTitle(Settings.Default.Language), documentType, container, documentId);
        }
コード例 #10
0
        public async Task LoadMovies(MovieContainer container)
        {
            // Create a collection
            var databaseUri     = UriFactory.CreateDatabaseUri(DatabaseId);
            var movieCollection = await _documentClient.CreateDocumentCollectionIfNotExistsAsync(databaseUri, new DocumentCollection { Id = MovieCollectionId }, new RequestOptions { OfferThroughput = 1000 });

            // Clean collection
            Execute(movieCollection, "g.V().drop()").Wait();

            // Add Vertexes
            var i = 0;

            foreach (var movie in container.Movies)
            {
                i += 1;
                await AddVertex(movieCollection, movie, "tmdbId", i);
            }
            foreach (var person in container.Persons)
            {
                i += 1;
                await AddVertex(movieCollection, person, "tmdbId", i);
            }

            // Add Edges
            i = 0;
            foreach (var actorRelation in container.ActorRelations)
            {
                i += 1;
                await AddRelation(movieCollection, actorRelation, "actedIn", i);
            }
            foreach (var directorRelation in container.DirectorRelations)
            {
                i += 1;
                await AddRelation(movieCollection, directorRelation, "directed", i);
            }
            foreach (var producerRelations in container.ProducerRelations)
            {
                i += 1;
                await AddRelation(movieCollection, producerRelations, "produced", i);
            }
            foreach (var writerRelation in container.WriterRelations)
            {
                i += 1;
                await AddRelation(movieCollection, writerRelation, "wrote", i);
            }
        }
コード例 #11
0
        public async Task CreateMovieView(int movieId)
        {
            string documentType = "MovieSingleView";
            string documentId   = String.Format("{0}:{1}", documentType, movieId);

            if (ShowDocument(String.Empty, documentId))
            {
                return;
            }

            CancellationTokenSource tokenSource = this.GetAsyncCommand(x => x.CreateMovieView(movieId)).CancellationTokenSource;
            MovieContainer          container   = await RunAsync(() => App.Repository.GetMovieAsync(movieId, tokenSource.Token));

            if (container != null)
            {
                CreateDocument(() => container.GetTitle(Settings.Default.Language), documentType, container, documentId);
            }
        }
コード例 #12
0
ファイル: MainWindow.xaml.cs プロジェクト: asolfre/TVShow
        /// <summary>
        /// Show content and hide progress when a movie is loaded
        /// </summary>
        /// <param name="sender">Sender object</param>
        /// <param name="e">EventArgs</param>
        void OnLoadedMovie(object sender, EventArgs e)
        {
            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                MovieProgressBar.Visibility = Visibility.Collapsed;
                MovieContainer.Visibility   = Visibility.Visible;

                #region Fade in opacity

                DoubleAnimationUsingKeyFrames opacityAnimation = new DoubleAnimationUsingKeyFrames();
                opacityAnimation.Duration               = new Duration(TimeSpan.FromSeconds(0.5));
                PowerEase opacityEasingFunction         = new PowerEase();
                opacityEasingFunction.EasingMode        = EasingMode.EaseInOut;
                EasingDoubleKeyFrame startOpacityEasing = new EasingDoubleKeyFrame(0.0, KeyTime.FromPercent(0));
                EasingDoubleKeyFrame endOpacityEasing   = new EasingDoubleKeyFrame(1.0, KeyTime.FromPercent(1.0),
                                                                                   opacityEasingFunction);
                opacityAnimation.KeyFrames.Add(startOpacityEasing);
                opacityAnimation.KeyFrames.Add(endOpacityEasing);

                MovieContainer.BeginAnimation(OpacityProperty, opacityAnimation);

                #endregion
            });
        }
コード例 #13
0
        public async Task CreateImportView(MediaType mediaType)
        {
            ImportViewModel viewModel = ViewModelSource.Create <ImportViewModel>();

            viewModel.ParentViewModel = this;
            viewModel.MediaType       = mediaType;

            DialogService.ShowDialog(null, Properties.Resources.Import, "ImportView", viewModel);
            if (viewModel.SelectedMediaFileInfoList != null)
            {
                try
                {
                    BeginProgress();
                    IAsyncCommand     command           = this.GetAsyncCommand(x => x.CreateImportView(mediaType));
                    CancellationToken cancellationToken = command.CancellationTokenSource.Token;
                    BackgroundOperation.Register(Properties.Resources.ImportWizard, command.CancelCommand);

                    List <ContainerBase> newItems      = new List <ContainerBase>();
                    List <ContainerBase> existingItems = new List <ContainerBase>();

                    if (viewModel.MediaType == MediaType.Movie)
                    {
                        foreach (MediaFileInfo info in viewModel.SelectedMediaFileInfoList)
                        {
                            if (cancellationToken.IsCancellationRequested)
                            {
                                break;
                            }

                            SearchBase selectedItem = info.SelectedMediaItem as SearchBase;
                            if (selectedItem != null)
                            {
                                MovieContainer container = await App.Repository.GetMovieAsync(selectedItem.Id, cancellationToken);

                                if (container != null)
                                {
                                    container.Seen           = info.PersonalInfo.Seen;
                                    container.Favorite       = info.PersonalInfo.Favorite;
                                    container.Watchlist      = info.PersonalInfo.Watchlist;
                                    container.LocalPath      = info.PersonalInfo.LocalPath;
                                    container.PersonalRating = info.PersonalInfo.PersonalRating;

                                    if (container.IsAdded == false)
                                    {
                                        newItems.Add(container);
                                    }
                                    else
                                    {
                                        existingItems.Add(container);
                                    }
                                }
                            }
                        }

                        foreach (MovieContainer movieContainer in newItems)
                        {
                            App.Repository.Movies.Add(movieContainer);
                        }

                        foreach (MovieContainer movieContainer in existingItems)
                        {
                            App.Repository.Movies.Update(movieContainer);
                        }
                    }
                    else if (viewModel.MediaType == MediaType.Tv)
                    {
                        foreach (MediaFileInfo info in viewModel.SelectedMediaFileInfoList)
                        {
                            if (cancellationToken.IsCancellationRequested)
                            {
                                break;
                            }

                            SearchBase selectedItem = info.SelectedMediaItem as SearchBase;
                            if (selectedItem != null)
                            {
                                TvShowContainer container = await App.Repository.GetTvShowAsync(selectedItem.Id, cancellationToken);

                                if (container != null)
                                {
                                    container.Seen           = info.PersonalInfo.Seen;
                                    container.Favorite       = info.PersonalInfo.Favorite;
                                    container.Watchlist      = info.PersonalInfo.Watchlist;
                                    container.LocalPath      = info.PersonalInfo.LocalPath;
                                    container.PersonalRating = info.PersonalInfo.PersonalRating;

                                    if (container.IsAdded == false)
                                    {
                                        newItems.Add(container);
                                    }
                                    else
                                    {
                                        existingItems.Add(container);
                                    }
                                }
                            }
                        }

                        foreach (TvShowContainer tvShowContainer in newItems)
                        {
                            App.Repository.TvShows.Add(tvShowContainer);
                        }

                        foreach (TvShowContainer tvShowContainer in existingItems)
                        {
                            App.Repository.TvShows.Update(tvShowContainer);
                        }
                    }
                    else if (viewModel.MediaType == MediaType.Person)
                    {
                        foreach (MediaFileInfo info in viewModel.SelectedMediaFileInfoList)
                        {
                            if (cancellationToken.IsCancellationRequested)
                            {
                                break;
                            }

                            SearchBase selectedItem = info.SelectedMediaItem as SearchBase;
                            if (selectedItem != null)
                            {
                                PersonContainer container = await App.Repository.GetPersonAsync(selectedItem.Id, cancellationToken);

                                if (container != null)
                                {
                                    container.Favorite  = info.PersonalInfo.Favorite;
                                    container.LocalPath = info.PersonalInfo.LocalPath;

                                    if (container.IsAdded == false)
                                    {
                                        newItems.Add(container);
                                    }
                                    else
                                    {
                                        existingItems.Add(container);
                                    }
                                }
                            }
                        }

                        foreach (PersonContainer personContainer in newItems)
                        {
                            App.Repository.People.Add(personContainer);
                        }

                        foreach (PersonContainer personContainer in existingItems)
                        {
                            App.Repository.People.Update(personContainer);
                        }
                    }
                }
                finally
                {
                    EndProgress();
                    BackgroundOperation.UnRegister(Properties.Resources.ImportWizard);
                }
            }
        }