Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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);
                    }
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }