示例#1
0
        //async void loadListsFromDB_(string dashName, string selectUser, A0DbMdl db)    {      await loadListsFromDB(dashName, selectUser, db);    }

        void loadListsFromDB(string dashName, string selectUser, A0DbMdl db)
        {
            if (string.IsNullOrEmpty(selectUser) || string.IsNullOrEmpty(dashName) /*|| SelectUser.Equals(selectUser)*/)
            {
                return;
            }

            if (!SelectUser.Equals(selectUser))
            {
                SelectUser = selectUser;
            }

            TypeCatch.Net5.Properties.Settings.Default.LastUser = SelectUser;
            TypeCatch.Net5.Properties.Settings.Default.Save();

            try
            {
                var dbsrlst = db.SessionResults.Where(r => r.UserId == SelectUser && r.ExcerciseName == dashName && r.Duration > TimeSpan.Zero).OrderByDescending(r => r.DoneAt).ToList();

                RcrdCpm = dbsrlst?.Count() > 0 ? (int)(dbsrlst?.Max(r => r.PokedIn / r.Duration.TotalMinutes) ?? 110) : 99;

                MaxCpm = 0 + 2 * RcrdCpm;

                Debug.WriteLine($"~~~ C: {db.SessionResults.Count()} - {CurUserCurExcrsRsltLst.Count}");

                CurUserCurExcrsRsltLst.ClearAddRangeAuto(dbsrlst);

                Debug.WriteLine($"~~~ D: {db.SessionResults.Count()} - {CurUserCurExcrsRsltLst.Count}");
            }
            catch (Exception ex) { ex.Log(); synth.SpeakAsyncCancelAll(); synth.SpeakFaF($"Something is not right: {ex.Message}. Talk to you later"); }
        }
示例#2
0
        async Task updateDoneTodo(string selectUser, SpeechSynthesizer synth, A0DbMdl db)
        {
            int doneToday = -1, sinceRcrd = -1, todoToday = -1;

            try
            {
                doneToday = db.SessionResults.Count(r => r.UserId.Equals(selectUser, StringComparison.OrdinalIgnoreCase) && r.DoneAt > DateTime.Today);

                //if (!db.SessionResults.Any(r => r.UserId.Equals(selectUser, StringComparison.OrdinalIgnoreCase)))
                //{
                //  sinceRcrd = 0;
                //  todoToday = _planPerDay - doneToday;
                //}
                //else
                {
                    var latestGlobalRecordDate = await getLatestGlobalRecordDate(selectUser, db);

                    sinceRcrd = db.SessionResults.Count(r => r.UserId == selectUser && r.DoneAt > latestGlobalRecordDate);
                    todoToday =
                        ((DateTime.Today < latestGlobalRecordDate)) ? 0 : // if done a record today ==> 0 left
                        ((DateTime.Today - latestGlobalRecordDate).Days + 1) * _planPerDay - sinceRcrd;
                }

                if (todoToday < 0)
                {
                    todoToday = _planPerDay - doneToday;
                }
            }
            catch (Exception ex) { ex.Log(); synth.SpeakAsyncCancelAll(); synth.SpeakAsync($"Something is not right: {ex.Message}. Talk to you later"); }

            DoneToday = doneToday;
            ExrzeRuns = sinceRcrd;
            TodoToday = todoToday;
        }
示例#3
0
        static async Task <DateTime> getLatestGlobalRecordDate(string selectUser, A0DbMdl dbdbld) // not just the highest score!
        {
            var sw = Stopwatch.StartNew();
            var latestGlobalRecord = DateTime.Now.AddYears(-100);

            await dbdbld.SessionResults.Where(r => r.UserId == selectUser).LoadAsync();

            try
            {
                var allExrczNames = dbdbld.SessionResults.Local.GroupBy(r => r.ExcerciseName);
                foreach (var exrsName in allExrczNames)
                {
                    if (dbdbld.SessionResults.Local.Any(r => r.UserId == selectUser && r.ExcerciseName == exrsName.Key))
                    {
                        var record4userAndExrz = dbdbld.SessionResults.Local.Where(r => r.UserId == selectUser && r.ExcerciseName == exrsName.Key).ToList().Max(r => r.CpM);
                        var lastExrzRecordDate = dbdbld.SessionResults.Local.ToList().Where(r => r.UserId == selectUser && r.ExcerciseName == exrsName.Key && r.CpM == record4userAndExrz).Max(r => r.DoneAt);
                        if (latestGlobalRecord < lastExrzRecordDate)
                        {
                            latestGlobalRecord = lastExrzRecordDate;
                            Trace.WriteLineIf(ExnLogr.AppTraceLevelCfg.TraceVerbose, $" {exrsName.Key,-8}{dbdbld.SessionResults.Local.Count(r => r.UserId == selectUser && r.ExcerciseName == exrsName.Key),5} times    max cpm {record4userAndExrz,3}   {lastExrzRecordDate}  ->  {latestGlobalRecord}");
                        }
                    }
                }
            }
            catch (Exception ex) { ex.Log(); }

            Trace.WriteLineIf(ExnLogr.AppTraceLevelCfg.TraceVerbose, $"  ... => latestGlobalRecord: {latestGlobalRecord}");

            Trace.WriteLineIf(ExnLogr.AppTraceLevelCfg.TraceWarning, $"{DateTime.Now:yy.MM.dd-HH:mm:ss.f} +{(DateTime.Now - App.StartedAt):mm\\:ss\\.ff}    *** getLatestGlobalRecordDate() done in {sw.Elapsed.TotalSeconds:N2} sec");

            return(latestGlobalRecord);
        }
示例#4
0
        string getTheLatestLessonTypeTheUserWorksOn(A0DbMdl db)
        {
            var dashName = db.SessionResults.Where(r => r.UserId == SelectUser).OrderByDescending(x => x.DoneAt).FirstOrDefault()?.ExcerciseName;

            if (string.IsNullOrEmpty(dashName))
            {
                dashName = DashName;
            }

            prepLessonType(dashName /*.Replace("-", "")*/, false);

            return(dashName);
        }
示例#5
0
        async Task updateSettings(A0DbMdl db)
        {
            var stg = await getCurUserSettings(db) ?? db.AppStngs.Add(new AppStng {
                LesnTyp = LessonType.PhrasesRandm, SubLesnId = "0", CreatedAt = DateTime.Now, Id = 1, UserId = "Plr1", Note = "Auto pre-loaded."
            });

            stg.SubLesnId  = SubLesnId;
            stg.LesnTyp    = LesnTyp;
            stg.Audible    = Audible;
            stg.ProLTgl    = ProLTgl;
            stg.UserId     = SelectUser;
            stg.ModifiedAt = DateTime.Now;
        }
示例#6
0
        static async Task <AppStng> getAnybody_CreateIfnobody(A0DbMdl db)
        {
            var anybody = db.AppStngs.FirstOrDefault();

            if (anybody == null)
            {
                anybody = db.AppStngs.Add(new AppStng {
                    LesnTyp = LessonType.PhrasesRandm, SubLesnId = "0", CreatedAt = DateTime.Now, Id = 1, UserId = "Dflt", Note = "Auto pre-loaded [Default]."
                });
                await db.TrySaveReportAsync();
            }

            return(anybody);
        }
示例#7
0
        async internal Task LoadFromDbAsync(A0DbMdl db)
        {
            LessonText = "\r\n\n\t  W A I T !    \r\n\n\t\t Loading \r\n\n\t\t\t from DB Async ... ";
            //synth.SpeakAsyncCancelAll(); synth.SpeakAsync("Loading from DB.");

            if (Settings.Default.ReadOnlyUsr == "haha")
            {
                synth.SpeakAsync("Change the credentials in CFG, search for haha.");
                return;
            }

            IsBusy = true;
            try
            {
                // using (var db = A0DbMdl.GetA0DbMdlAzureDb)
                {
                    //Users.Clear();
                    ////.await db.Users.LoadAsync();
                    ////.foreach (var user in db.Users) Users.Add(user/*.UserId*/); //SnRts.Clear(); await db.SessionResults.LoadAsync(); foreach (var sr in db.SessionResults) { SnRts.Add(new js.SessionResult { DoneAt = sr.DoneAt, UserId = sr.UserId, Duration = sr.Duration, ExcerciseName = sr.ExcerciseName, PokedIn = sr.PokedIn }); }
                    //foreach (var user in db.Users) Users.Add(user/*.UserId*/);

                    SelectUser = tlaFromCurEnvtUser();
                    var appSetngCountBefore = db.AppStngs.Count();

                    //var rmv = db.AppStngs.Find(5); if (rmv != null)  db.AppStngs.Remove(rmv);                    db.TrySave Report();

                    var appStngUsr = await getCurUserSettings(db);

                    var appSetngCount_After = db.AppStngs.Count();

                    foreach (var aps in db.AppStngs)
                    {
                        Trace.WriteLineIf(ExnLogr.AppTraceLevelCfg.TraceVerbose, $"    {aps.Id,5} {aps.UserId,5} {aps.FullName,-20} {aps.Note}");
                    }

                    SubLesnId /**/ = appStngUsr.SubLesnId;
                    ProLTgl /**/   = appStngUsr.ProLTgl;
                    Audible /**/   = appStngUsr.Audible;
                    LesnTyp /**/   = appStngUsr.LesnTyp;

                    InfoMsg = $" Total {db.SessionResults.Count(),4} runs (SesRslt rows). \r\n {LesnTyp} - {SubLesnId}\r\n User: '******' (Stngs: {appStngUsr.UserId},  bfr-aft: {appSetngCountBefore}-{appSetngCount_After}) ";
                }
            }
            catch (Exception ex) { InfoMsg = ex.Log(); }
            finally { IsBusy = false; synth.SpeakAsyncCancelAll(); synth.SpeakAsync("Ready, player one."); }
        }
示例#8
0
        async Task <AppStng> getCurUserSettings(A0DbMdl db)
        {
            var appStngUsr = db.AppStngs.FirstOrDefault(r => r.UserId == SelectUser);

            if (appStngUsr == null)
            {
                var anybody = await getAnybody_CreateIfnobody(db);

                appStngUsr = db.AppStngs.Add(new AppStng
                {
                    LesnTyp   = anybody.LesnTyp,
                    SubLesnId = anybody.SubLesnId,
                    CreatedAt = DateTime.Now,
                    UserId    = SelectUser,
                    Note      = $"Auto pre-copied from {anybody.UserId}."
                });

                await db.TrySaveReportAsync();
            }

            return(appStngUsr);
        }
示例#9
0
        internal void DeleteSaveSsnRsltToDb(db.SessionResult sr, A0DbMdl db)
        {
            IsBusy = true;
            var now = DateTime.Now;

            try
            {
                // using (var db = A0DbMdl.GetA0DbMdlAzureDb)
                {
                    //if (Debugger.IsAttached) Debugger.Break(); // >>> DoneAt = sr.DoneAt.DateTime, //todo: ?? .AddMinutes(sr.DoneAt.OffsetMinutes)

                    var srfromdb = db.SessionResults.Find(sr.Id);
                    db.SessionResults.Remove(srfromdb);

                    var rv = db.TrySaveReportAsync(); //Trace.TraceInformation($"{rv}");

                    InfoMsg = $" Total {db.SessionResults.Count(),4} SesRslt rows. \r\n {LesnTyp} - {SubLesnId}\r\n SelectUser: '******'";
                }
            }
            catch (Exception ex) { InfoMsg = ex.Log(); }
            finally { IsBusy = false; }
        }
示例#10
0
        public (int newRows, string report, Stopwatch swstopwatch) CopyChunkyAzureSynch(A0DbMdl src, A0DbMdl trg)
        {
            var rowsAdded = 0;
            var sw        = Stopwatch.StartNew();

            var srcSvrDb = src.ServerDatabase();
            var trgSvrDb = trg.ServerDatabase();

            foreach (var u in src.Users)
            {
                if (!trg.Users.Any(r => u.UserId.Equals(r.UserId, StringComparison.OrdinalIgnoreCase)))
                {
                    trg.Users.Add(new User {
                        UserId = u.UserId, FullName = u.UserId, CreatedAt = _now, Note = $"data transfer from  '{srcSvrDb}'."
                    });
                    rowsAdded++;
                }
            }

            //trg.SessionResults.Load(); // chunky vs chattee

            foreach (var s in src.SessionResults)
            {
                if (trg.SessionResults.Any(r => s.DoneAt == r.DoneAt && s.UserId.Equals(r.UserId, StringComparison.OrdinalIgnoreCase)))
                {
                    Trace.WriteLineIf(ExnLogr.AppTraceLevelCfg.TraceVerbose, $"  **> skipping match:  {s.DoneAt}   {s.UserId} ");
                }
                else
                {
                    trg.SessionResults.Add(new SessionResult
                    {
                        Duration      = s.Duration,
                        ExcerciseName = s.ExcerciseName,
                        IsRecord      = s.IsRecord,
                        PokedIn       = s.PokedIn,
                        TotalRunCount = s.TotalRunCount,
                        UserId        = s.UserId,
                        DoneAt        = s.DoneAt,
                        Note          = s.Note
                    });
                    rowsAdded++;
                }
            }

            var rowsSaved = trg.SaveChanges();

            Debug.Assert(rowsAdded == rowsSaved, "ap: rowsChanged != rowsSaved");

            return(rowsSaved, $"Success: {rowsAdded} rows copied from \n {srcSvrDb} to \n {trgSvrDb} in {sw.Elapsed:mm\\:ss}.", sw);
        }
        async Task migrate(A0DbMdl db)
        {
            Bpr.Beep1of2();
            var obsVm = JsonFileSerializer.Load <ObsMainVM>(MainVM.MainVmJsonFile) as ObsMainVM;

            if (obsVm == null)
            {
                MessageBox.Show("No Go");
            }
            else
            {
                var srFromJsonWithNote = obsVm.SnRts.Where(r => !string.IsNullOrEmpty(r.Notes));

                try
                {
                    if (db.SessionResults.Any(r => r.Note != null && (r.Note == "zz" || r.Note.StartsWith("from fs at"))))
                    {
                        db.SessionResults.Where(r => r.Note != null && (r.Note == "zz" || r.Note.StartsWith("from fs at"))).ToList().ForEach(r => r.Note = "");
                    }

                    tbInfo.Text = $"Json: \t{obsVm.SnRts.Length} total runs incl-g {srFromJsonWithNote.Count()} with note;\r\nDB: \t{db.SessionResults.Count()} \r\n";
                    Debug.WriteLine($"::>{tbInfo.Text}");

                    await Task.Yield();

                    Bpr.BeepClk();

                    int brandNew = 0, noMatchesInDb = 0, alreadySame = 0, updated = 0;

                    foreach (var srjs in obsVm.SnRts)
                    {
                        var srdb0 = db.SessionResults.FirstOrDefault(d =>
                                                                     d.UserId == srjs.UserId &&
                                                                     d.Duration == srjs.Duration /*drn(srjs.Duration)*/ &&
                                                                     d.ExcerciseName == srjs.ExcerciseName &&
                                                                     d.PokedIn == srjs.PokedIn &&
                                                                     Math.Abs((d.DoneAt - srjs.DoneAt.DateTime.AddMinutes(srjs.DoneAt.OffsetMinutes)).TotalSeconds) < 5);
                        if (srdb0 == null)
                        {
                            db.SessionResults.Add(new SessionResult
                            {
                                DoneAt        = srjs.DoneAt.DateTime.AddMinutes(srjs.DoneAt.OffsetMinutes),
                                UserId        = srjs.UserId,
                                Duration      = srjs.Duration /*drn(srjs.Duration)*/,
                                ExcerciseName = srjs.ExcerciseName,
                                PokedIn       = srjs.PokedIn,
                                Note          = srjs.Notes
                            });
                            brandNew++;
                        }
                    }

                    try
                    {
                        foreach (var srjs in srFromJsonWithNote)
                        {
                            var srdb2 = db.SessionResults.FirstOrDefault(d => Math.Abs((d.DoneAt - srjs.DoneAt.DateTime.AddMinutes(srjs.DoneAt.OffsetMinutes)).TotalSeconds) < 5);
                            if (srdb2 == null)
                            {
                                db.SessionResults.Add(new SessionResult
                                {
                                    DoneAt        = srjs.DoneAt.DateTime.AddMinutes(srjs.DoneAt.OffsetMinutes),
                                    UserId        = srjs.UserId,
                                    Duration      = srjs.Duration /*drn(srjs.Duration)*/,
                                    ExcerciseName = srjs.ExcerciseName,
                                    PokedIn       = srjs.PokedIn,
                                    Note          = srjs.Notes
                                });
                                noMatchesInDb++;
                            }
                            else
                            {
                                if (srjs.Notes.Equals(srdb2.Note))
                                {
                                    alreadySame++;
                                }
                                else
                                {
                                    updated++;
                                    srdb2.Note = srjs.Notes;
                                }
                            }
                        }
                    }
                    catch (Exception ex) { Debug.WriteLine(ex); }


                    tbInfo.Text += $" brandNew {brandNew}, notFoundInDb {noMatchesInDb }, alreadySame {alreadySame }, updated {updated}\n";
                    Debug.WriteLine($"::>{tbInfo.Text}");

                    var rv = await db.TrySaveReportAsync();

                    tbInfo.Text += $" {rv}";
                    Bpr.Beep2of2();
                }
                catch (Exception ex) { tbEror.Text = ex.Log(); }
                finally { new DbExplorer2().Show(); }
            }
        }