예제 #1
0
        protected override IEnumerable <ParsingResult> ImportHand(string handHistory, GameInfo gameInfo, IFileImporter dbImporter, DHProgress progress)
        {
            var parsingResults = dbImporter.Import(handHistory, progress, gameInfo);

            IPokerFileInfo importedFileInfo = null;

            if (importedHandsHistory.ContainsKey(gameInfo.FullFileName))
            {
                importedFileInfo = importedHandsHistory[gameInfo.FullFileName];
            }
            else
            {
                importedFileInfo = new IPokerFileInfo();
                importedHandsHistory.Add(gameInfo.FullFileName, importedFileInfo);
            }

            foreach (var parsingResult in parsingResults)
            {
                if (parsingResult != null && parsingResult.HandHistory != null &&
                    !importedFileInfo.ImportedHands.Contains(parsingResult.HandHistory.Gamenumber))
                {
                    importedFileInfo.ImportedHands.Add(parsingResult.HandHistory.Gamenumber);
                }
            }

            return(parsingResults);
        }
예제 #2
0
        protected override string GetHandTextFromStream(Stream fs, Encoding encoding, string fileName)
        {
            IPokerFileInfo importedFileInfo = null;

            var fileWasImportedOnce = importedHandsHistory.ContainsKey(fileName);

            var fileInfo = new FileInfo(fileName);

            if (fileWasImportedOnce)
            {
                importedFileInfo = importedHandsHistory[fileName];

                // file hasn't been changed so we don't read it
                if (importedFileInfo.LastWriteTime == fileInfo.LastWriteTime &&
                    importedFileInfo.Length == fs.Length)
                {
                    return(null);
                }
            }

            var data = new byte[fs.Length];

            if (data.Length == 0)
            {
                return(string.Empty);
            }

            fs.Position = 0;
            fs.Read(data, 0, data.Length);

            if (importedFileInfo == null)
            {
                importedFileInfo = new IPokerFileInfo();
            }

            importedFileInfo.LastWriteTime = fileInfo.LastWriteTime;
            importedFileInfo.Length        = fs.Length;

            var handText = encoding.GetString(data);

            if (!fileWasImportedOnce)
            {
                importedHandsHistory.Add(fileName, importedFileInfo);
                return(handText);
            }

            var xmlHandDocument = XDocument.Parse(handText, LoadOptions.PreserveWhitespace);
            var gameNodes       = xmlHandDocument.Document.Descendants("game").ToArray();

            foreach (var gameNode in gameNodes)
            {
                var gamecodeAttribute = gameNode.Attribute("gamecode");

                // skip game nodes without gamecode attribute
                if (gamecodeAttribute == null)
                {
                    gameNode.Remove();
                    continue;
                }

                long gamecode = 0;

                // skip game nodes if gamecode can't be parsed
                if (!long.TryParse(gamecodeAttribute.Value, out gamecode))
                {
                    gameNode.Remove();
                    continue;
                }

                if (importedFileInfo != null && importedFileInfo.ImportedHands.Contains(gamecode))
                {
                    gameNode.Remove();
                }
            }

            handText = xmlHandDocument.ToString(SaveOptions.None);

            return(handText);
        }