// -------------------------------------------------------------------------------------------------- #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); } }
/// <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); }