Beispiel #1
0
        // --------------------------------------------------------------------------------------------------
        #region Methods

        public void Copy(LimeMetadata source)
        {
            if (source == null)
            {
                return;
            }

            LimeMsg.Debug("LimeMetadata Copy: {0}", source.Title);

            bool buildcover = false;

            foreach (var src in source)
            {
                if (src.Visible && !src.ReadOnly || src.Ident == "Pictures")
                {
                    if (TryGet(src.Ident, out var dest))
                    {
                        LimeMsg.Debug("LimeMetadata Copy: key: {0} = {1}", src.Ident, src.Value);
                        dest.Content = src.Content;

                        if (src.Ident == "Pictures")
                        {
                            buildcover = true;
                        }
                    }
                }
            }

            if (buildcover)
            {
                BuildCover(coverOnly: false);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Download the metadata on a movie from TMDB by its TMDB identifier
        /// </summary>
        /// <param name="id">TMDB movie identifier</param>
        /// <returns>Metadata object representing the movie</returns>
        public async Task <LimeMetadata> GetVideoAsync(int id)
        {
            LimeMetadata meta = null;

            Connect();

            Movie movie = await TmdbClient.GetMovieAsync(id, MovieMethods.Images | MovieMethods.Videos | MovieMethods.Reviews | MovieMethods.Credits);

            // Create Metadata object representing the movie
            meta = new LimeMetadata(MediaType.Video);

            // Copy metadata from Web to Tag
            meta.Add("TMDB_ID", movie.Id, readOnly: true, visible: false);
            meta.Add("Title", movie.Title);
            meta.Add("Tagline", movie?.Tagline);
            meta.Add("Description", CleanupDescription.Replace(movie?.Overview).Trim());

            //if (movie.OriginalLanguage != null) meta.Add("OriginalLanguage", movie.OriginalLanguage);
            meta.Add("Score", movie.VoteAverage != 0 ? movie.VoteAverage / 2.0 : 0.0);
            meta.Add("Released", movie.ReleaseDate != null ? (uint)movie.ReleaseDate.Value.Year : 0);

            // Genres
            var genres = new string[movie.Genres.Count];

            for (int i = 0; i < genres.Length; i++)
            {
                genres[i] = movie.Genres[i].Name;
            }
            meta.Add("Genres", new StringComposite <string>(genres));

            // Actors
            var actors = new List <LimePerson>();

            foreach (var cast in movie.Credits.Cast)
            {
                var person = new LimePerson(cast.Id, cast.Name, new string[] { cast.Character });
                actors.Add(person);
            }
            meta.Add("Actors", new StringComposite <LimePerson>(actors, ";", Environment.NewLine));

            // Director
            string director = null;

            foreach (var crew in movie.Credits.Crew)
            {
                switch (crew.Department)
                {
                case "Directing":
                    if (director == null)
                    {
                        director = crew.Name;
                    }
                    break;

                case "Writing":                         // do nothing so far
                    break;

                default:                         // do nothing so far
                    break;
                }
            }
            meta.Add("Director", director);

            var pics = new List <Picture>(1);

            DownloadPic(ref pics, movie.PosterPath, PictureType.OtherFileIcon);

            // Store more images
            foreach (var img in movie.Images.Posters)
            {
                DownloadPic(ref pics, img.FilePath, PictureType.OtherFileIcon);
            }

            foreach (var img in movie.Images.Backdrops)
            {
                DownloadPic(ref pics, img.FilePath, PictureType.Illustration);
            }


            // Collections
            string collection  = null;
            uint   season      = 0;
            uint   seasonCount = 0;

            if (movie.BelongsToCollection != null)
            {
                var collec = await TmdbClient.GetCollectionAsync(movie.BelongsToCollection.Id);

                if (collec != null && collec.Parts != null)
                {
                    collection  = collec.Name;
                    seasonCount = (uint)collec.Parts.Count;
                    for (int i = 0; i < collec.Parts.Count; i++)
                    {
                        if (collec.Parts[i].Id == movie.Id)
                        {
                            season = (uint)i + 1;
                            break;
                        }
                    }

                    DownloadPic(ref pics, collec.PosterPath, PictureType.FrontCover);
                    DownloadPic(ref pics, collec.BackdropPath, PictureType.BackCover);
                }
            }
            meta.Add("Collection", collection);
            meta.Add("SeasonCount", seasonCount);
            meta.Add("Season", season);


            // Finalize images
            meta.Add("Pictures", pics.ToArray(), false, false);

            // Finalize
            meta.BuildToolTip();
            return(meta);
        }