public HashSet <Movie> GetMoviesWithCharacter(int characterId) { HashSet <Movie> retVal = new HashSet <Movie>(); //For each MovieCharacterMap Entry for the movieId foreach (var mcm in MovieCharacterMap.Where(o => o.CharacterId == characterId)) { retVal.Add(GetMovie(mcm.MovieId)); } return(retVal); }
public HashSet <Character> GetCharactersPlayedByActor(int actorId) { HashSet <Character> cs = new HashSet <Character>(); foreach (MovieCharacterMap mcm in MovieCharacterMap.Where(o => o.PersonId == actorId)) { Character mc = Characters.FirstOrDefault(o => o.Id == mcm.CharacterId); if (mc != null) { cs.Add(mc); } } return(cs); }
public HashSet <Person> GetActorsWhoPlayedCharacter(int characterId, int movieId) { HashSet <Person> retVal = new HashSet <Person>(); //For each MovieCharacterMap Entry for the movieId foreach (var mcm in MovieCharacterMap.Where(o => o.MovieId == movieId && o.CharacterId == characterId)) { Person p = People.FirstOrDefault(o => o.Id == mcm.PersonId); if (p != null) { retVal.Add(p); } } return(retVal); }
public HashSet <Character> GetCharactersPlayedByActor(int actorId, int movieId) { HashSet <Character> cs = new HashSet <Character>(); foreach (MovieCharacterMap mcm in MovieCharacterMap.Where(o => o.PersonId == actorId && o.MovieId == movieId)) { String ocn = mcm.OriginalCharacterName; Character mc = Characters.FirstOrDefault(o => o.Id == mcm.CharacterId); if (mc != null) { mc.OriginalCharacterName = ocn; cs.Add(mc); } } return(cs); }
public HashSet <Character> GetCharactersInMovie(int movieId, int limit = 0) { int initialLimit = limit; HashSet <Character> cs = new HashSet <Character>(); foreach (MovieCharacterMap mcm in MovieCharacterMap.Where(o => o.MovieId == movieId).OrderBy(o => o.CreditOrder)) { if (initialLimit > 0 && limit-- < 1) { break; } Character mc = Characters.FirstOrDefault(o => o.Id == mcm.CharacterId); if (mc != null) { cs.Add(mc); } } return(cs); }
public Character AddCharacter(String characterName, int movieID, int personID, string creditID, int castID, int creditOrder) { //Save what was passed in - mostly for debugging String originalCharacterName = characterName; //Not to be modified ////Debugging //if (characterName.Contains("Soldier")) //{ // //Walk through code //} //Standardize on what characters can be in the name characterName = removeIllegalCharacters(characterName); //Save OriginalCharacterName for use with Credit Mapping String originalCleanCharacterName = characterName; //Not to be modified //Tag awareness!! //(voice) - //(uncredited) characters should be just the character and have an alias .. //However the Original characterName must be preserved for the mapping String nicName = getNicName(characterName); String newCharacterName = characterName; if (characterName.Contains("(uncredited)")) { //Make up regular character name and alias the uncredited newCharacterName = characterName.Replace("(uncredited)", "").Trim(); characterName = newCharacterName + " ~ " + characterName; } if (nicName.Length > 0) { characterName += " ~ " + nicName; } //Try Direct Exact Match Character c = GetCharacter(characterName); //No Direct Match try direct match to Alias if (c == null) { //See if there are Aliases to Search. HashSet <CharacterAlias> cas = findOrAddAliases(characterName, newCharacterName); //In the case of Bruce Banner ~ The Hulk vs Bruce Banner ~ Hulk //Bruce Banner already existed (as does The Hulk) so we want to use Bruce Banner and Add the new Alias //Also Possibly update the Character foreach (CharacterAlias ca in cas) { CharacterAliasMap cam = CharacterAliasMap.FirstOrDefault(o => o.AliasID == ca.AliasId); if (cam != null) { c = GetCharacter(cam.CharacterID); if (c != null) { //BUG = way out of hand on prompts here.. //Prompt to update Character.. //Merge old and new // characterName = characterName.Replace(c.Name, ""); //String newFullName = c.Name + characterName.Replace(newCharacterName + " ~", " ~"); if (c.Name != newCharacterName) // No Point in asking if identical! { if (MessageBox.Show("Is " + c.Name + " the same character as " + newCharacterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character continue; //return c; // Not same Character } if (c.Name.Length < newCharacterName.Length) { if (MessageBox.Show("Update " + c.Name + " to " + newCharacterName + "?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) { c.Name = newCharacterName; } } } break; } } else //Character Alias Map is null { //If an Alias was added in this movie but the base character didn't have any aliases then either //the Character Alias Map should have individual character names in it to find the Character or Original Character Name //from MovieCharacterMap map. //Very iffy for Generic names MovieCharacterMap mcmt = MovieCharacterMap.FirstOrDefault(o => o.OriginalCharacterName == ca.Name); if (mcmt != null) { c = GetCharacter(mcmt.CharacterId); if (c != null) { if (MessageBox.Show("Is " + c.Name + " the same character as " + newCharacterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character continue; //return c; // Not same Character } //Prompt to update Character.. if (!characterName.Contains("uncredited")) { String newFullName = c.Name + characterName.Replace(newCharacterName + " ~", " ~"); if (MessageBox.Show("Update " + c.Name + " to " + characterName + "?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) { c.Name = characterName; } } break; } } } } //Try to see if it's a case of Maria Hill vs Agent Maria Hill if (c == null) { c = matchByRemovingFirst(characterName); if (c != null && MessageBox.Show("Is " + c.Name + " the same character as " + characterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character } if (c == null) { c = matchByRemovingLast(characterName); if (c != null && MessageBox.Show("Is " + c.Name + " the same character as " + characterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character } } } //Try Direct Match to characterName parts (Alias) if (c == null) { //Try to match to characterName parts (Alias) String[] substrings = getSplitName(characterName, '~'); if (substrings.Count() > 1) { foreach (String item in substrings) { c = GetCharacter(item.Trim()); if (c != null) { if (MessageBox.Show("Is " + c.Name + " the same character as " + characterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character continue; } if (MessageBox.Show("Update " + c.Name + " to " + characterName + "?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) { c.Name = characterName; // Update } cas = findOrAddAliases(characterName, newCharacterName); break; } } } } //If c is still null - Add a new Character.. if (c == null) { c = new Character(); c.Name = newCharacterName; // Want Clean Name if one exists c.Id = NextCharacterIndex++; Characters.Add(c); } //Need a Character Before Alias mapping can be done if (cas.Count > 0 && c != null) { //Already have Aliases but need to map them.. foreach (CharacterAlias ca in cas) { if (ca.Name == c.Name) { continue; // Don't make and alias to Actual Character Name } CharacterAliasMap cam = new Models.CharacterAliasMap(); cam.AliasID = ca.AliasId; cam.CharacterID = c.Id; bool result = CharacterAliasMap.Add(cam); } } } //Add Mapping of Character / Actor / Role //Mapping to cleaned up Character Name but preserving originalCharacterName for Character Movie relation. MovieCharacterMap mcm = new MovieCharacterMap(c.Id, originalCleanCharacterName, movieID, creditOrder, castID, creditID, personID); MovieCharacterMap.Add(mcm); // Add to Universe Map. return(c); }