/// <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)); }
/// <summary> /// Opens analysis of a single library item game /// </summary> /// <param name="game">Game to analyze</param> private async Task AnalyzeLibraryItemGameAsync(LibraryItemGame game) { var libraryItem = LibraryItems.FirstOrDefault(i => i.Games.Contains(game)); if (libraryItem != null) { //app data library item var appDataLibraryItem = libraryItem as AppDataLibraryItemViewModel; if (appDataLibraryItem != null) { await AnalyzeGameAsync(appDataLibraryItem, game); } } else { //selected item, external if (SelectedLibraryItem?.Games.Contains(game) == true) { var externalLibraryItem = SelectedLibraryItem as ExternalSgfFileViewModel; if (externalLibraryItem != null) { AnalyzeGame(externalLibraryItem, game); } } } }
private void AnalyzeGame(ExternalSgfFileViewModel libraryItem, LibraryItemGame game) { SgfParser parser = new SgfParser(); var sgfCollection = parser.Parse(libraryItem.Contents); var index = Array.IndexOf(libraryItem.Games, game); var sgfGameTree = sgfCollection.GameTrees.ElementAt(index); StartAnalysis(libraryItem, sgfGameTree); }
private async Task AnalyzeGameAsync(AppDataLibraryItemViewModel libraryItem, LibraryItemGame game) { //load from library LoadingText = Localizer.LoadingEllipsis; IsWorking = true; var sgfContents = await _appDataFileService.ReadFileAsync(libraryItem.FileName, SgfFolderName); var parser = new SgfParser(); var collection = parser.Parse(sgfContents); var index = Array.IndexOf(libraryItem.Games, game); var sgfGameTree = collection.GameTrees.ElementAt(index); StartAnalysis(libraryItem, sgfGameTree); IsWorking = false; }