private void CreateOrGetCharacters(Picture picture, List <CharacterData> characters) { foreach (var characterData in characters) { Character character = null; if (!characterData.Exists) { character = new Character { Name = characterData.SuggestedName, FamilyName = characterData.SuggestedFamilyName, DanbooruName = characterData.Tag, Pictures = new HashSet <Picture>(), CharacterTags = new HashSet <CharacterTag>() }; character.Pictures.Add(picture); } else { using (CharacterRepository repo = new CharacterRepository()) { character = repo.GetByDanbooruName(characterData.Tag); character.Pictures.Add(picture); } } picture.Characters.Add(character); } }
private void TransformCharacters(Post change, Picture picture) { if (change.Characters.Length == 0) { return; } using (CharacterRepository charRepo = new CharacterRepository()) { foreach (var characterName in change.Characters) { Character character = charRepo.GetByDanbooruName(characterName); if (character == null) { bool extractedAlready = false; IEnumerable <Character> characterSet; char[] sep = { ' ' }; string[] characterTrueName = characterName.Split(sep, 2); for (int i = 0; i < characterTrueName.Length; i++) { characterTrueName[i] = characterTrueName[i].Capitalize(); } if (characterTrueName.Length == 1) { characterSet = _changedObjects.ChangedCharacters.Where(c => c.Name == characterTrueName[0]); } else { characterSet = _changedObjects.ChangedCharacters.Where(c => c.Name == characterTrueName[1] && c.FamilyName == characterTrueName[0]); } extractedAlready = characterSet.Count() != 0; if (!extractedAlready) { character = new Character { Pictures = new HashSet <Picture>(), CharacterTags = new HashSet <CharacterTag>() }; if (characterTrueName.Length != 1) { character.Name = characterTrueName[1]; character.FamilyName = characterTrueName[0]; } else { character.Name = characterTrueName[0]; } } else { character = characterSet.Single(); } if (!_changedObjects.ChangedCharacters.Contains(character)) { _changedObjects.ChangedCharacters.Add(character); } } character.Pictures.Add(picture); picture.Characters.Add(character); } } }
private List <CharacterData> GetSuggestedCharacterData(string[] extractedCharacters) { var characters = new List <CharacterData>(); foreach (var character in extractedCharacters) { var characterData = new CharacterData { Tag = character }; bool exists = false; using (CharacterRepository repo = new CharacterRepository()) { exists = repo.DoExistsByDanbooruName(character); } characterData.Exists = exists; string suggestedName, suggestedFamilyName, nameValue, bracketValue; suggestedName = suggestedFamilyName = nameValue = bracketValue = string.Empty; if (!exists) { int openBracketIndex = character.IndexOf('('); if (openBracketIndex != -1) { int closeBracketIndex = character.IndexOf(')'); int length = closeBracketIndex - openBracketIndex - 1; bracketValue = character.Substring(openBracketIndex + 1, length); nameValue = character.Substring(0, openBracketIndex - 1); } else { nameValue = character; } if (nameValue.Contains(' ')) { int firstSpaceIndex = nameValue.IndexOf(' '); suggestedFamilyName = nameValue.Substring(0, firstSpaceIndex); suggestedName = nameValue.Substring(firstSpaceIndex + 1); } else { suggestedName = nameValue; } suggestedName = suggestedName.Capitalize(); suggestedFamilyName = suggestedFamilyName.Capitalize(); } else { using (CharacterRepository repo = new CharacterRepository()) { Character charObj = repo.GetByDanbooruName(character); suggestedName = charObj.Name; suggestedFamilyName = charObj.FamilyName; } } characterData.SuggestedName = suggestedName; characterData.SuggestedFamilyName = suggestedFamilyName; characters.Add(characterData); } return(characters); }