public void RemoveDuplicatedMessage_AllSame_RemoveTheDuplicated()
        {
            var combiner = new MsnHistoryCombiner();
            combiner.MergedMsnLog = new MsnLog();

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null)
            {
                From = new MsnDirection(null, MsnDirectionType.From) { User = new List<MsnUser> { new MsnUser(null) { FriendlyName = "Jerry" } } },
                SessionID = 1,
                UniversalTime = DateTime.Now,
                Text = new MsnText(null) { Style = "bold", Value = "Test the unit" },
            });

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null)
            {
                From = new MsnDirection(null, MsnDirectionType.From) { User = new List<MsnUser> { new MsnUser(null) { FriendlyName = "Jerry" } } },
                SessionID = 1,
                UniversalTime = DateTime.Now.AddMilliseconds(20),
                Text = new MsnText(null) { Style = "bold", Value = "Test the unit" },
            });

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null)
            {
                From = new MsnDirection(null, MsnDirectionType.From) { User = new List<MsnUser> { new MsnUser(null) { FriendlyName = "Jerry" } } },
                SessionID = 1,
                UniversalTime = DateTime.Now.AddMilliseconds(400),
                Text = new MsnText(null) { Style = "bold", Value = "Test the unit" },
            });

            combiner.RemoveDuplicatedMessage();

            Assert.AreEqual(1, combiner.MergedMsnLog.Messages.Count);
        }
        public void Merge_TwoSameSources_RemoveDuplicatedMessages()
        {
            var combiner = new MsnHistoryCombiner();
            combiner.XmlFilePaths.Add(new FileInfo(TestConsts.FILENAME_COMBINE_LEFT).FullName);
            combiner.XmlFilePaths.Add(new FileInfo(TestConsts.FILENAME_COMBINE_DUPLICATED).FullName);

            combiner.Merge();

            var targetFile = Path.Combine(MsnContext.Instance.TargetDirectoryPath, TestConsts.FILENAME_COMBINE_LEFT.GetHistoryFileUniqueName());
            var mergedLog = HistoryXmlReader.Instance.Read(targetFile);
            Assert.AreEqual(7, mergedLog.Messages.Count);

            File.Delete(targetFile);
        }
        public void Merge_TwoSouces_MergeTheMessageTogether()
        {
            var combiner = new MsnHistoryCombiner();
            combiner.XmlFilePaths.Add((new FileInfo(TestConsts.FILENAME_COMBINE_LEFT)).FullName);
            combiner.XmlFilePaths.Add((new FileInfo(TestConsts.FILENAME_COMBINE_RIGHT)).FullName);

            combiner.Merge();

            // find the result
            var targetFile = Path.Combine(MsnContext.Instance.TargetDirectoryPath, TestConsts.FILENAME_COMBINE_LEFT.GetHistoryFileUniqueName());
            Assert.IsTrue(File.Exists(targetFile));

            var mergedLog = HistoryXmlReader.Instance.Read(targetFile);
            Assert.AreEqual(17, mergedLog.Messages.Count);

            File.Delete(targetFile);
        }
        internal List <MsnHistoryCombiner> Group()
        {
            List <MsnHistoryCombiner> combiners = new List <MsnHistoryCombiner>();

            var itemArray = Instance.HistoryRepository.Keys.ToArray <string>();

            for (int outIndex = 0; outIndex < itemArray.Length; outIndex++)
            {
                var currentFileName = itemArray[outIndex];
                if (MsnHistoryCombineWorker.Instance.HistoryRepository[currentFileName])
                {
                    continue;
                }
                var currentFileInfo = new FileInfo(currentFileName);
                MsnHistoryCombineWorker.Instance.HistoryRepository[currentFileName] = true;

                var combiner = new MsnHistoryCombiner();
                combiner.XmlFilePaths.Add(currentFileName);

                for (int innerIndex = outIndex + 1; innerIndex < itemArray.Length; innerIndex++)
                {
                    var comparingFileName = itemArray[innerIndex];
                    if (MsnHistoryCombineWorker.Instance.HistoryRepository[comparingFileName])
                    {
                        continue;
                    }

                    var comparingFileInfo = new FileInfo(comparingFileName);
                    if (currentFileInfo.Name.IsSameFriendHistory(comparingFileInfo.Name))
                    {
                        MsnHistoryCombineWorker.Instance.HistoryRepository[comparingFileName] = true;

                        combiner.XmlFilePaths.Add(comparingFileName);
                    }
                }

                combiners.Add(combiner);
            }

            return(combiners);
        }
        public void SouceLogs_ShouldRemoveNoExistedFile()
        {
            var existedFile = new FileInfo(TestConsts.FILENAME_MESSAGEONLY).FullName;
            var noExistedFile = @"C:\scwang30002781717253 - Archive(100).xml";

            var combiner = new MsnHistoryCombiner();
            combiner.XmlFilePaths.Add(existedFile);
            combiner.XmlFilePaths.Add(noExistedFile);

            Assert.AreEqual(1, combiner.SourceLogs.Count);
        }
        public void ResetSessionID_OnlyOneSessionIdExist_NoChange()
        {
            var combiner = new MsnHistoryCombiner();
            combiner.MergedMsnLog = new MsnLog();

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 1, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 1, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 1, UniversalTime = DateTime.Now });

            combiner.ResetSessionID();

            Assert.AreEqual(1, combiner.MergedMsnLog.Messages[combiner.MergedMsnLog.Messages.Count - 1].SessionID);
        }
        public void ResetSessionID_MultipleAndUnOrdered_ReOrder()
        {
            var combiner = new MsnHistoryCombiner();
            combiner.MergedMsnLog = new MsnLog();

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 1, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 2, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 1, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 2, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 2, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 2, UniversalTime = DateTime.Now });
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null) { SessionID = 3, UniversalTime = DateTime.Now });

            combiner.ResetSessionID();
            Assert.AreEqual(1, combiner.MergedMsnLog.Messages[0].SessionID);
            Assert.AreEqual(4, combiner.MergedMsnLog.Messages[combiner.MergedMsnLog.Messages.Count - 2].SessionID);
            Assert.AreEqual(5, combiner.MergedMsnLog.Messages[combiner.MergedMsnLog.Messages.Count - 1].SessionID);
        }
        public void RemoveDuplicatedMessage_TextAllSameButTheDiffOfTimeOfFirstAndSecondIsTooBig_JustRemoveTheThird()
        {
            var combiner = new MsnHistoryCombiner();
            combiner.MergedMsnLog = new MsnLog();

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null)
            {
                From = new MsnDirection(null, MsnDirectionType.From) { User = new List<MsnUser> { new MsnUser(null) { FriendlyName = "Jerry" } } },
                SessionID = 1,
                UniversalTime = DateTime.Now,
                Text = new MsnText(null) { Style = "bold", Value = "Test the unit" },
            });

            // This time diff is very big (great than 10 seconds)
            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null)
            {
                From = new MsnDirection(null, MsnDirectionType.From) { User = new List<MsnUser> { new MsnUser(null) { FriendlyName = "Jerry" } } },
                SessionID = 1,
                UniversalTime = DateTime.Now.AddSeconds(11),
                Text = new MsnText(null) { Style = "bold", Value = "Test the unit" },
            });

            combiner.MergedMsnLog.Messages.Add(new MsnMessage(null)
            {
                From = new MsnDirection(null, MsnDirectionType.From) { User = new List<MsnUser> { new MsnUser(null) { FriendlyName = "Jerry" } } },
                SessionID = 1,
                UniversalTime = DateTime.Now.AddSeconds(12),
                Text = new MsnText(null) { Style = "bold", Value = "Test the unit" },
            });

            combiner.RemoveDuplicatedMessage();

            Assert.AreEqual(2, combiner.MergedMsnLog.Messages.Count);
        }