private void actorsBox_OnTextChanged(object sender, EventArgs e) { List<Actor> tmp = new List<Actor>(SelectedItem.Actors); SelectedItem.Actors = new List<Actor>(); foreach (string s in actorsBox.text.Split(',')) { Actor actor = new Actor(); Regex r = new Regex(@"^(?<name>[^\(]+)\((?<role>.+)\)$"); Match m = r.Match(s.Trim()); if (m.Success) { actor.Role = m.Groups["role"].Value.Trim(); actor.Name = m.Groups["name"].Value.Trim(); } else actor.Name = s.Trim(); Actor a = tmp.Find(A => A.Name == actor.Name || A.Role == actor.Role); if (a != null && !string.IsNullOrEmpty(a.ImagePath)) actor.ImagePath = a.ImagePath; SelectedItem.Actors.Add(actor); } UpdateActors(); HasChanged(); }
public override Item Fetch(Item item) { Item movie = new Item(); movie.ProvidersId = item.ProvidersId; DataProviderId dp = movie.ProvidersId.Find(p => p.Name == this.Name); if (dp == null) return null; movie.ProvidersId = new List<DataProviderId> { dp }; XmlDocument InfosDoc = Helper.Fetch(string.Format(GetInfo, lang, APIKey, dp.Id)); if (InfosDoc == null) return null; //Titre movie.Title = InfosDoc.SafeGetString("//name"); //Url dp.Url = InfosDoc.SafeGetString("//url"); //Année string release = InfosDoc.SafeGetString("//released"); if (release != null && release.Length >= 4) movie.Year = Int32.Parse(release.Substring(0, 4)); //Equipe movie.Crew = new List<CrewMember>(); foreach (XmlNode n in InfosDoc.SelectNodes("//cast/person[@job!='Actor']")) { movie.Crew.Add(new CrewMember { Name = n.Attributes["name"].InnerText, Activity = n.Attributes["job"].InnerText }); } //Résumé movie.Overview = InfosDoc.SafeGetString("//overview"); //TagLine string tagline = InfosDoc.SafeGetString("//tagline"); if (!string.IsNullOrEmpty(tagline)) movie.TagLines = new List<string> { tagline }; //Durée try { movie.RunningTime = Int32.Parse(InfosDoc.SafeGetString("//runtime")); } catch { } //Trailer string trailer = InfosDoc.SafeGetString("trailer"); if (!string.IsNullOrEmpty(trailer)) movie.TrailerFiles = new List<string> { trailer }; //Pays foreach (XmlNode n in InfosDoc.SelectNodes("//countries/country")) { if (movie.Countries == null) movie.Countries = new List<string>(); movie.Countries.Add(n.Attributes["name"].InnerText); } //Genre movie.Genres = new List<string>(); foreach (XmlNode n in InfosDoc.SelectNodes("//categories/category[@type='genre']")) { movie.Genres.Add(n.Attributes["name"].InnerText); } //Vignettes movie.ImagesPaths = new List<Poster>(); foreach (XmlNode n in InfosDoc.SelectNodes("//images/image[@type='poster']")) { string id = n.Attributes["id"].InnerText; if (!movie.ImagesPaths.Exists(ip => ip.Id == id)) movie.ImagesPaths.Add(new Poster { Id = id }); if (n.Attributes["size"].InnerText == "original") { movie.ImagesPaths[movie.ImagesPaths.FindIndex(ip => ip.Id == id)].Image = n.Attributes["url"].InnerText; } else if (n.Attributes["size"].InnerText == "thumb") { movie.ImagesPaths[movie.ImagesPaths.FindIndex(ip => ip.Id == id)].Thumb = n.Attributes["url"].InnerText; } } //Backdrop movie.BackdropImagePaths = new List<Poster>(); foreach (XmlNode n in InfosDoc.SelectNodes("//images/image[@type='backdrop']")) { string id = n.Attributes["id"].InnerText; if (n.Attributes["size"].InnerText == "original") { int size = 0; Int32.TryParse(n.Attributes["width"].InnerText, out size); if (size >= Config.Instance.MinBackdropWidth) { Poster poster = new Poster(); poster.Id = id; poster.Checked = false; poster.Image = n.Attributes["url"].InnerText; movie.BackdropImagePaths.Add(poster); } } else if (n.Attributes["size"].InnerText == "thumb" && movie.BackdropImagePaths.Exists(p => p.Id == id)) { movie.BackdropImagePaths[movie.BackdropImagePaths.FindIndex(ip => ip.Id == id)].Thumb = n.Attributes["url"].InnerText; } } if (movie.BackdropImagePaths.Count > 0) { for (int i = 0; i < Math.Min(movie.BackdropImagePaths.Count, Config.Instance.MaxBdSaved); i++) { movie.BackdropImagePaths[i].Checked = true; } } //Note movie.Rating = InfosDoc.SafeGetSingle("//rating", -1, 10); //MPAA movie.MPAARating = InfosDoc.SafeGetString("//certification"); // Studios movie.Studios = new List<string>(); foreach (XmlNode n in InfosDoc.SelectNodes("//studios/studio")) { movie.Studios.Add(n.Attributes["name"].InnerText); } //Acteurs movie.Actors = null; foreach (XmlNode n in InfosDoc.SelectNodes("//cast/person[@job='Actor']")) { if (movie.Actors == null) movie.Actors = new List<Actor>(); string name = n.Attributes["name"].InnerText; string role = n.Attributes["character"].InnerText; if (!string.IsNullOrEmpty(name)) { Actor actor = new Actor(); actor.Name = name; actor.Role = role; string ActorImg = n.Attributes["thumb"].InnerText; if (!string.IsNullOrEmpty(ActorImg) && !ActorImg.EndsWith("Actor_Unknow.png")) actor.ImagePath = ActorImg; movie.Actors.Add(actor); } } return movie; }
public override Item Fetch(Item item) { Item movie = new Item(); movie.ProvidersId = item.ProvidersId; DataProviderId dp = movie.ProvidersId.Find(p => p.Name == this.Name); if (dp == null) return null; movie.ProvidersId = new List<DataProviderId> { dp }; XmlDocument InfosDoc = Helper.Fetch(string.Format(GetInfo, dp.Id), Encoding.UTF8); if (InfosDoc == null) return null; XmlNode node = InfosDoc.GetNodeByName("movie"); //Titre movie.Title = CleanAllocineTitle(SafeGetString(node, "title")); //Titre original movie.OriginalTitle = CleanAllocineTitle(SafeGetString(node, "originalTitle")); //Année string release = SafeGetString(node, "productionYear"); if (release != null && release.Length == 4) movie.Year = Int32.Parse(release); //Résumé movie.Overview = SafeGetString(node, "synopsis"); //Durée try { movie.RunningTime = (int)(Int32.Parse(SafeGetString(node, "runtime")) / 60); } catch { } //Media XmlNode mediaNode = node.GetNodeByName("mediaList"); foreach (XmlNode mNode in mediaNode.SelectChildren()) { XmlNode typeNode = mNode.GetNodeByName("type"); if (typeNode == null) continue; string typeCode = typeNode.Attributes["code"].InnerText; //Posters if (typeCode == "31001") { if (movie.ImagesPaths == null) movie.ImagesPaths = new List<Poster>(); XmlNode thumbNode = mNode.GetNodeByName("thumbnail"); if (thumbNode == null) continue; movie.ImagesPaths.Add(new Poster { Image = thumbNode.Attributes["href"].InnerText }); } //Backdrops if (typeCode == "31006") { if (movie.BackdropImagePaths == null) movie.BackdropImagePaths = new List<Poster>(); XmlNode thumbNode = mNode.GetNodeByName("thumbnail"); if (thumbNode == null) continue; movie.BackdropImagePaths.Add(new Poster { Image = thumbNode.Attributes["href"].InnerText }); } //Trailers if (PluginOptions.Instance.UseTrailers && (typeCode == "31003" || typeCode == "31016")) { if (movie.TrailerFiles == null) movie.TrailerFiles = new List<string>(); string cmedia = mNode.Attributes["code"].InnerText; XmlDocument trailerDoc = Helper.Fetch(string.Format(GetTrailers, cmedia), Encoding.UTF8); if (trailerDoc != null) { XmlNode n = trailerDoc.SelectSingleNode("//AcVisionVideo"); if (n != null) { string url = n.Attributes["hd_path"].InnerText; if (string.IsNullOrEmpty(url)) url = n.Attributes["md_path"].InnerText; if (string.IsNullOrEmpty(url)) url = n.Attributes["ld_path"].InnerText; if (!string.IsNullOrEmpty(url)) { movie.TrailerFiles.Add(url); } } } } } //Pays XmlNode countryNode = node.GetNodeByName("nationalityList"); foreach (XmlNode n in countryNode.SelectChildren()) { if (movie.Countries == null) movie.Countries = new List<string>(); if (!string.IsNullOrEmpty(n.InnerText)) movie.Countries.Add(n.InnerText); } //Genre XmlNode genreNode = node.GetNodeByName("genreList"); foreach (XmlNode n in genreNode.SelectChildren()) { if (movie.Genres == null) movie.Genres = new List<string>(); if (!string.IsNullOrEmpty(n.InnerText)) movie.Genres.Add(n.InnerText); } //Note XmlNode statNode = node.GetNodeByName("statistics"); if (statNode != null) { XmlNode ratingNode = statNode.GetNodeByName("ratingStats"); float? rating = null; double vote = 0; double note = 0; foreach (XmlNode n in ratingNode.SelectChildren()) { double V; double N; try { V = Int32.Parse(n.InnerText); N = double.Parse(n.Attributes["note"].InnerText, CultureInfo.InvariantCulture) * 2; } catch { continue; } vote = vote + V; note = note + (N * V); } if (vote > 0) rating = (float)Math.Round((double)(note / vote), 1); movie.Rating = rating; } //Acteurs - Equipe XmlNode castingNode = node.GetNodeByName("casting"); foreach (XmlNode n in castingNode.SelectChildren()) { string activity = SafeGetString(n, "activity"); if (activity == "Acteur" || activity == "Actrice") { if (movie.Actors == null) movie.Actors = new List<Actor>(); Actor actor = new Actor(); actor.Name = SafeGetString(n, "person"); actor.Role = SafeGetString(n, "role"); actor.ImagePath = SafeGetString(n, "picture"); movie.Actors.Add(actor); } else { if (movie.Crew == null) movie.Crew = new List<CrewMember>(); CrewMember cm = new CrewMember(); cm.Name = SafeGetString(n, "person"); cm.Activity = activity; movie.Crew.Add(cm); } } return movie; }
public override Item Fetch(Item item) { Item movie = new Item(); movie.ProvidersId = item.ProvidersId; DataProviderId dp = movie.ProvidersId.Find(p => p.Name == this.Name || p.Name == "AlloCine"); if (dp == null) return null; movie.ProvidersId = new List<DataProviderId>{dp}; XmlDocument InfosDoc = Helper.Fetch(string.Format(GetInfo, UsernameEnc(), PasswordEnc(), PluginOptions.Instance.Language, XbmcKey, dp.Id)); if (InfosDoc == null) return null; //Id string allocine = InfosDoc.SafeGetString("//id_allocine"); if (!string.IsNullOrEmpty(allocine)) movie.ProvidersId.Add(new DataProviderId { Name = "AlloCine", Id = allocine, Url = "http://www.allocine.fr/film/fichefilm_gen_cfilm=" + allocine + ".html" }); string imdb = InfosDoc.SafeGetString("//id_imdb"); if (!string.IsNullOrEmpty(imdb)) movie.ProvidersId.Add(new DataProviderId { Name = "Imdb", Id = "tt0" + imdb, Url = "http://www.imdb.com/title/tt0" + imdb }); //Titre movie.Title = CleanAllocineTitle(InfosDoc.SafeGetString("//title")); //Titre original movie.OriginalTitle = CleanAllocineTitle(InfosDoc.SafeGetString("//originaltitle")); //Url dp.Url = InfosDoc.SafeGetString("//url"); //Année string release = InfosDoc.SafeGetString("//year"); if (release != null && release.Length == 4) movie.Year = Int32.Parse(release); //Producteur movie.Crew = new List<CrewMember>(); foreach (XmlNode n in InfosDoc.SelectNodes("//directors/director")) { movie.Crew.Add(new CrewMember { Name = n.InnerText, Activity = "Producteur" }); } //Résumé movie.Overview = InfosDoc.SafeGetString("//plot"); //TagLine movie.TagLines = new List<string>{ InfosDoc.SafeGetString("//tagline")}; //Durée try { movie.RunningTime = Int32.Parse(InfosDoc.SafeGetString("//runtime")); } catch { } //Trailer foreach (XmlNode n in InfosDoc.SelectNodes("//trailers/trailer")) { if (movie.TrailerFiles == null) movie.TrailerFiles = new List<string>(); if (!string.IsNullOrEmpty(n.InnerText)) movie.TrailerFiles.Add(n.InnerText); } //Pays foreach (XmlNode n in InfosDoc.SelectNodes("//countries/country")) { if (movie.Countries == null) movie.Countries = new List<string>(); if (!string.IsNullOrEmpty(n.InnerText)) movie.Countries.Add(n.InnerText); } //Genre movie.Genres = new List<string>(); foreach (XmlNode n in InfosDoc.SelectNodes("//genres/genre")) { if (!string.IsNullOrEmpty(n.InnerText)) movie.Genres.Add(n.InnerText); } //Vignettes movie.ImagesPaths = new List<Poster>(); foreach (XmlNode n in InfosDoc.SelectNodes("//images/image[@type='Poster']")) { string id = n.Attributes["id"].InnerText; if (!movie.ImagesPaths.Exists(ip => ip.Id == id)) movie.ImagesPaths.Add(new Poster { Id = id }); if (n.Attributes["size"].InnerText == "original") { movie.ImagesPaths[movie.ImagesPaths.FindIndex(ip => ip.Id == id)].Image = n.Attributes["url"].InnerText; movie.ImagesPaths[movie.ImagesPaths.FindIndex(ip => ip.Id == id)].width = n.Attributes["width"].InnerText; movie.ImagesPaths[movie.ImagesPaths.FindIndex(ip => ip.Id == id)].height = n.Attributes["height"].InnerText; } else if (n.Attributes["size"].InnerText == "preview") { movie.ImagesPaths[movie.ImagesPaths.FindIndex(ip => ip.Id == id)].Thumb = n.Attributes["url"].InnerText; } } //Backdrop movie.BackdropImagePaths = new List<Poster>(); foreach (XmlNode n in InfosDoc.SelectNodes("//images/image[@type='Fanart']")) { string id = n.Attributes["id"].InnerText; if (n.Attributes["size"].InnerText == "original") { int size = 0; Int32.TryParse(n.Attributes["width"].InnerText, out size); if (size >= Config.Instance.MinBackdropWidth) { Poster poster = new Poster(); poster.Id = id; poster.Checked = false; poster.Image = n.Attributes["url"].InnerText; poster.width = n.Attributes["width"].InnerText; poster.height = n.Attributes["height"].InnerText; movie.BackdropImagePaths.Add(poster); } } else if (n.Attributes["size"].InnerText == "thumb" && movie.BackdropImagePaths.Exists(p => p.Id == id)) { movie.BackdropImagePaths[movie.BackdropImagePaths.FindIndex(ip => ip.Id == id)].Thumb = n.Attributes["url"].InnerText; } } if (movie.BackdropImagePaths.Count > 0) { for (int i = 0; i < Math.Min(movie.BackdropImagePaths.Count, Config.Instance.MaxBdSaved); i++) { movie.BackdropImagePaths[i].Checked = true; } } //Note float? rating = null; if (PluginOptions.Instance.Rating != "moyenne des trois") { try { rating = (float)double.Parse(InfosDoc.SelectSingleNode("//ratings/rating[@type='" + PluginOptions.Instance.Rating + "']").InnerText); } catch { } } else { double vote = 0; double note = 0; foreach (XmlNode n in InfosDoc.SelectNodes("//ratings/rating")) { double V; double N; try { N = double.Parse(n.InnerText, new CultureInfo("fr-FR")); V = Int32.Parse(n.Attributes["votes"].InnerText); } catch { continue; } vote = vote + V; note = note + (N * V); } if (vote > 0) rating = (float)Math.Round((double)(note / vote), 1); } movie.Rating = rating; // Studios movie.Studios = new List<string>(); foreach (XmlNode n in InfosDoc.SelectNodes("//studios/studio")) { if (!string.IsNullOrEmpty(n.InnerText)) movie.Studios.Add(n.InnerText); } //Acteurs movie.Actors = null; foreach (XmlNode n in InfosDoc.SelectNodes("//casting/person")) { if (movie.Actors == null) movie.Actors = new List<Actor>(); string name = n.Attributes["name"].InnerText; string role = n.Attributes["character"].InnerText; if (!string.IsNullOrEmpty(name)) { Actor actor = new Actor(); actor.Name = name; actor.Role = role; string ActorImg = n.Attributes["thumb"].InnerText; if (!string.IsNullOrEmpty(ActorImg) && !ActorImg.EndsWith("Actor_Unknow.png")) actor.ImagePath = ActorImg; movie.Actors.Add(actor); } } return movie; }
private static void FetchXmlMovie(Item movie) { string mfile = Path.Combine(location, videofilename + ".nfo"); if (File.Exists(mfile)) { XmlDocument doc = new XmlDocument(); doc.Load(mfile); movie.Title = doc.SafeGetString("movie/title"); movie.OriginalTitle = doc.SafeGetString("movie/originaltitle"); movie.SortTitle = doc.SafeGetString("movie/sorttitle"); DateTime added; DateTime.TryParse(doc.SafeGetString("movie/added"), out added); if (added != null) movie.DateAdded = added; int? y = doc.SafeGetInt32("movie/year", 0); if (y.IsValidYear()) movie.Year = y; int? rt = doc.SafeGetInt32("movie/runtime", 0); if (rt.IsValidRunningTime()) movie.RunningTime = rt; movie.Rating = doc.SafeGetSingle("movie/rating", (float)-1, (float)10); movie.MPAARating = doc.SafeGetString("movie/mpaa"); movie.Overview = doc.SafeGetString("movie/plot"); movie.Mediatype = doc.SafeGetString("movie/type"); movie.AspectRatio = doc.SafeGetString("movie/aspectratio"); foreach (XmlNode node in doc.SelectNodes("movie/actor")) { if (movie.Actors == null) movie.Actors = new List<Actor>(); Actor actor = new Actor(); actor.Name = node.SafeGetString("name"); actor.Role = node.SafeGetString("role"); actor.ImagePath = node.SafeGetString("thumb"); if (string.IsNullOrEmpty(actor.ImagePath) && Directory.Exists(PluginOptions.Instance.ActorsThumbPath)) { string actorImage = Path.Combine(PluginOptions.Instance.ActorsThumbPath, actor.Name + ".tbn"); if (File.Exists(actorImage)) actor.ImagePath = actorImage; } movie.Actors.Add(actor); } foreach (XmlNode node in doc.SelectNodes("movie/director")) { if (movie.Crew == null) movie.Crew = new List<CrewMember>(); movie.Crew.Add(new CrewMember { Name = node.InnerText, Activity = "Director" }); } foreach (XmlNode node in doc.SelectNodes("movie/genre")) { if (movie.Genres == null) movie.Genres = new List<string>(); movie.Genres.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("movie/studio")) { if (movie.Studios == null) movie.Studios = new List<string>(); movie.Studios.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("movie/country")) { if (movie.Countries == null) movie.Countries = new List<string>(); movie.Countries.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("movie/tagline")) { if (movie.TagLines == null) movie.TagLines = new List<string>(); movie.TagLines.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("movie/trailer")) { if (movie.TrailerFiles == null) movie.TrailerFiles = new List<string>(); movie.TrailerFiles.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("movie/thumb")) { if (movie.ImagesPaths == null) movie.ImagesPaths = new List<Poster>(); movie.ImagesPaths.AddDistinctPoster(new Poster { Image = node.InnerText }); } foreach (XmlNode node in doc.SelectNodes("movie/fanart/thumb")) { if (movie.BackdropImagePaths == null) movie.BackdropImagePaths = new List<Poster>(); movie.BackdropImagePaths.AddDistinctPoster(new Poster { Image = node.InnerText }); } } }
private static void FetchSeries(Item series) { string mfile = Path.Combine(location, "tvshow.nfo"); if (File.Exists(mfile)) { XmlDocument doc = new XmlDocument(); doc.Load(mfile); series.SeriesName = series.Title = doc.SafeGetString("tvshow/title"); series.Rating = doc.SafeGetSingle("tvshow/rating", (float)-1, (float)10); string id = doc.SafeGetString("tvshow/id"); if (!string.IsNullOrEmpty(id)) { series.ProvidersId = new List<DataProviderId>(); series.ProvidersId.Add(new DataProviderId { Id = id, Name = "TheTVDB", Url = "http://thetvdb.com/?tab=series&id=" + id }); } series.Overview = doc.SafeGetString("tvshow/overview"); foreach (XmlNode node in doc.SelectNodes("tvshow/actor")) { if (series.Actors == null) series.Actors = new List<Actor>(); Actor actor = new Actor(); actor.Name = node.SafeGetString("name"); actor.Role = node.SafeGetString("role"); actor.ImagePath = node.SafeGetString("thumb"); if (string.IsNullOrEmpty(actor.ImagePath) && Directory.Exists(PluginOptions.Instance.ActorsThumbPath)) { string actorImage = Path.Combine(PluginOptions.Instance.ActorsThumbPath, actor.Name + ".tbn"); if (File.Exists(actorImage)) actor.ImagePath = actorImage; } series.Actors.Add(actor); } foreach (XmlNode node in doc.SelectNodes("tvshow/genre")) { if (series.Genres == null) series.Genres = new List<string>(); series.Genres.Add(node.InnerText); } series.MPAARating = doc.SafeGetString("mpaa"); int? rt = doc.SafeGetInt32("tvshow/runtime", 0); if (rt.IsValidRunningTime()) series.RunningTime = rt; series.Rating = doc.SafeGetSingle("tvshow/rating", (float)-1, (float)10); foreach (XmlNode node in doc.SelectNodes("tvshow/studio")) { if (series.Studios == null) series.Studios = new List<string>(); series.Studios.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("tvshow/tagline")) { if (series.TagLines == null) series.TagLines = new List<string>(); series.TagLines.Add(node.InnerText); } foreach (XmlNode node in doc.SelectNodes("tvshow/thumb")) { if (series.BannersPaths == null) series.BannersPaths = new List<Poster>(); series.BannersPaths.AddDistinctPoster(new Poster { Image = node.InnerText }); } } }
private static void FetchEpisode(Item episode) { var mfile = Path.Combine(location, videofilename + ".nfo"); if (File.Exists(mfile)) { XmlDocument doc = new XmlDocument(); doc.Load(mfile); episode.Overview = doc.SafeGetString("episodedetails/plot"); episode.EpisodeNumber = doc.SafeGetString("episodedetails/episode"); episode.Title = doc.SafeGetString("episodedetails/title"); episode.SeasonNumber = doc.SafeGetString("episodedetails/season"); episode.Rating = doc.SafeGetSingle("episodedetails/rating", (float)-1, 10); foreach (XmlNode node in doc.SelectNodes("episodedetails/actor")) { if (episode.Actors == null) episode.Actors = new List<Actor>(); Actor actor = new Actor(); actor.Name = node.SafeGetString("name"); actor.Role = node.SafeGetString("role"); actor.ImagePath = node.SafeGetString("thumb"); if (string.IsNullOrEmpty(actor.ImagePath) && Directory.Exists(PluginOptions.Instance.ActorsThumbPath)) { string actorImage = Path.Combine(PluginOptions.Instance.ActorsThumbPath, actor.Name + ".tbn"); if (File.Exists(actorImage)) actor.ImagePath = actorImage; } episode.Actors.Add(actor); } foreach (XmlNode node in doc.SelectNodes("episodedetails/director")) { if (episode.Crew == null) episode.Crew = new List<CrewMember>(); episode.Crew.Add(new CrewMember { Name = node.InnerText, Activity = "Director" }); } foreach (XmlNode node in doc.SelectNodes("episodedetails/credit")) { if (episode.Crew == null) episode.Crew = new List<CrewMember>(); episode.Crew.Add(new CrewMember { Name = node.InnerText, Activity = "Writer" }); } } }