//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"); } }
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; }
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); }
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); }
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; }
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); }
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."); } }
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); }
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; } }
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(); } } }