/// <summary> /// Finds all available game info in the SGF game tree /// </summary> /// <param name="tree">Tree</param> /// <returns>Game info</returns> private GameInfo FindGameInfo(SgfGameTree tree) { var gameInfoSearcher = new SgfGameInfoSearcher(tree); var sgfGameInfo = gameInfoSearcher.GetGameInfo(); return(sgfGameInfo.ToGameInfo()); }
/// <summary> /// Creates a library item /// </summary> /// <param name="fileInfo">File info</param> /// <param name="sgfCollection">Sgf collection</param> /// <returns></returns> private LibraryItem CreateLibraryItem(FileInfo fileInfo, SgfCollection sgfCollection) { List <LibraryItemGame> games = new List <LibraryItemGame>(sgfCollection.Count()); foreach (var tree in sgfCollection.GameTrees) { SgfGameInfoSearcher searcher = new SgfGameInfoSearcher(tree); var sgfGameInfo = searcher.GetGameInfo(); var comment = sgfGameInfo.GameComment?.Value <string>() ?? ""; if (comment == "") { //try to find a comment in first node var firstNode = tree.Sequence.FirstOrDefault(); if (firstNode != null) { comment = firstNode["C"]?.Value <string>() ?? ""; } } var gameName = sgfGameInfo.GameName?.Value <string>() ?? ""; var blackName = sgfGameInfo.PlayerBlack?.Value <string>() ?? ""; var blackRank = sgfGameInfo.BlackRank?.Value <string>() ?? ""; var whiteName = sgfGameInfo.PlayerWhite?.Value <string>() ?? ""; var whiteRank = sgfGameInfo.WhiteRank?.Value <string>() ?? ""; var date = sgfGameInfo.Date?.Value <string>() ?? ""; var moves = CountPrimaryLineMoves(tree); var libraryItemGame = new LibraryItemGame(gameName, moves, date, blackName, blackRank, whiteName, whiteRank, comment); games.Add(libraryItemGame); } return(new LibraryItem(fileInfo.Name, games.ToArray(), fileInfo.Size, fileInfo.LastModified)); }