public static void DigestSession(Models.SessionModel session, ref Queue <NewRemoteFrameArgs> localFrames, ref Queue <NewRemoteFrameArgs> remoteFrames)
        {
            StringBuilder stringBuilder = new StringBuilder();

            DateTime firstInstant = Math.Max(localFrames.First().TimeStamp.ToDate().AddSeconds(1).Ticks, remoteFrames.First().TimeStamp.ToDate().AddSeconds(1).Ticks).ToDate();
            DateTime lastInstant  = Math.Min(localFrames.Last().TimeStamp.ToDate().Ticks, remoteFrames.Last().TimeStamp.ToDate().Ticks).ToDate();

            localFrames = new Queue <NewRemoteFrameArgs>(localFrames.SkipWhile(x => x.TimeStamp.ToDate().Second != firstInstant.Second)
                                                         .TakeWhile(x => x.TimeStamp.ToDate().Minute != lastInstant.Minute || x.TimeStamp.ToDate().Second != lastInstant.Second));
            remoteFrames = new Queue <NewRemoteFrameArgs>(remoteFrames.SkipWhile(x => x.TimeStamp.ToDate().Second != firstInstant.Second)
                                                          .TakeWhile(x => x.TimeStamp.ToDate().Minute != lastInstant.Minute || x.TimeStamp.ToDate().Second != lastInstant.Second));

            DBHelper.InsertFrames(session.GetHash(), DBHelper.DigestFrames(true, ref localFrames, ref stringBuilder), true);
            DBHelper.InsertFrames(session.GetHash(), DBHelper.DigestFrames(false, ref remoteFrames, ref stringBuilder), false);
            File.WriteAllBytes(session.GetPath(), stringBuilder.ToString().Zip());
        }
        public PlaySessionViewModel(PlaySession window, Models.SessionModel session)
        {
            SessionGaits = new Dictionary <string, List <Gait> >();
            Right        = new Graphics();
            Left         = new Graphics();
            this.session = session;
            Window       = window;
            Timer.Tick  += Timer_Tick;

            SessionFrames = System.IO.File.ReadAllBytes(session.GetPath()).Unzip()
                            .Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                            .GroupBy(x => x.Split('@')[0])
                            .ToDictionary
                            (
                x => x.Key == "1" ? "LOCAL" : "REMOTE",
                y => y.Select(x => x.Split('@')[1]).ToList()
                            );
            IndexTotal             = Math.Min(SessionFrames["LOCAL"].Count, SessionFrames["REMOTE"].Count);
            SessionGaits["LOCAL"]  = DBAccessor.GetGaits(session.GetHash(), true);
            SessionGaits["REMOTE"] = DBAccessor.GetGaits(session.GetHash(), false);
        }