From 415daf172d43a4d10f8847481a8e85ee5bb773b7 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 10 Nov 2024 14:31:04 +0100 Subject: [PATCH] Workaround for duplicate exercises in the DB --- lib/providers/exercises.dart | 20 +++++++++++++------- lib/providers/workout_plans.dart | 32 +++++++++++++++----------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index e994c46a..a27d83f3 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -295,14 +295,20 @@ class ExercisesProvider with ChangeNotifier { ExerciseDatabase database, int exerciseId, ) async { - // if (exerciseId == 76) { - // print('76!!!!'); - // } - Exercise exercise; - final exerciseDb = await (database.select(database.exercises) - ..where((e) => e.id.equals(exerciseId))) - .getSingleOrNull(); + + // TODO: this should be a .getSingleOrNull()!!! However, for some reason there + // are duplicates in the db. Perhaps a race condition so that two + // entries are written at the same time or something? + var exerciseResult = + await (database.select(database.exercises)..where((e) => e.id.equals(exerciseId))).get(); + + ExerciseTable? exerciseDb; + if (exerciseResult.length > 0) { + exerciseDb = exerciseResult.first; + } else { + exerciseDb = null; + } // Exercise is already known locally if (exerciseDb != null) { diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index 8c10002e..a936cff8 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -173,13 +173,13 @@ class RoutinesProvider with ChangeNotifier { for (final setConfig in slot.setConfigs) { setConfig.exercise = (await _exercises.fetchAndSetExercise(setConfig.exerciseId))!; - // setConfig.repsUnit = _repetitionUnit.firstWhere( - // (e) => e.id == setConfig.repsUnitId, - // ); - // - // setConfig.weightUnit = _weightUnits.firstWhere( - // (e) => e.id == setConfig.weightUnitId, - // ); + setConfig.repsUnit = _repetitionUnit.firstWhere( + (e) => e.id == setConfig.repsUnitId, + ); + + setConfig.weightUnit = _weightUnits.firstWhere( + (e) => e.id == setConfig.weightUnitId, + ); } } } @@ -231,18 +231,20 @@ class RoutinesProvider with ChangeNotifier { objectMethod: _routinesCurrentIterationGymSubpath, ), ), - baseProvider.fetchPaginated(baseProvider.makeUrl( - _logsUrlPath, - query: {'workout': routineId.toString(), 'limit': '900'}, - )) + baseProvider.fetchPaginated( + baseProvider.makeUrl( + _logsUrlPath, + query: {'routine': routineId.toString(), 'limit': '900'}, + ), + ), ]); final routine = Routine.fromJson(results[0] as Map); final dayData = results[1] as List; final currentIterationDisplayData = results[2] as List; - final currentIterationGymData = results[2] as List; - final logData = results[3] as List; + final currentIterationGymData = results[3] as List; + final logData = results[4] as List; /* * Set exercise, repetition and weight unit objects @@ -279,10 +281,6 @@ class RoutinesProvider with ChangeNotifier { // Logs routine.logs = []; - // final logData = await baseProvider.fetchPaginated(baseProvider.makeUrl( - // _logsUrlPath, - // query: {'workout': routineId.toString(), 'limit': '900'}, - // )); for (final logEntry in logData) { try { final log = Log.fromJson(logEntry);