diff --git a/lib/models/exercises/exercise.dart b/lib/models/exercises/exercise.dart index 3adecd42b..1ba2f9114 100644 --- a/lib/models/exercises/exercise.dart +++ b/lib/models/exercises/exercise.dart @@ -139,6 +139,12 @@ class Exercise extends Equatable { this.authorsGlobal = authorsGlobal ?? []; } + Exercise.fromApiDataString(String baseData, List languages) + : this.fromApiData(ExerciseApiData.fromString(baseData), languages); + + Exercise.fromApiDataJson(Map baseData, List languages) + : this.fromApiData(ExerciseApiData.fromJson(baseData), languages); + Exercise.fromApiData(ExerciseApiData baseData, List languages) { final List translations = []; for (final translationData in baseData.translations) { diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index 3d0dcde24..327e9bad8 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -309,8 +309,7 @@ class ExercisesProvider with ChangeNotifier { // Exercise is already known locally if (exerciseDb != null) { final nextFetch = exerciseDb.lastFetched.add(const Duration(hours: EXERCISE_FETCH_HOURS)); - final exerciseDbData = ExerciseApiData.fromString(exerciseDb.data); - exercise = Exercise.fromApiData(exerciseDbData, _languages); + exercise = Exercise.fromApiDataString(exerciseDb.data, _languages); // Fetch and update if (nextFetch.isBefore(DateTime.now())) { @@ -326,7 +325,7 @@ class ExercisesProvider with ChangeNotifier { await (database.update(database.exercises)..where((e) => e.id.equals(exerciseId))).write( ExercisesCompanion( data: Value(jsonEncode(apiData)), - lastUpdate: Value(exerciseApiData.lastUpdateGlobal), + lastUpdate: Value(exercise.lastUpdateGlobal!), lastFetched: Value(DateTime.now()), ), ); @@ -342,16 +341,14 @@ class ExercisesProvider with ChangeNotifier { final baseData = await baseProvider.fetch( baseProvider.makeUrl(exerciseInfoUrlPath, id: exerciseId), ); - - final exerciseData = ExerciseApiData.fromJson(baseData); - exercise = Exercise.fromApiData(exerciseData, _languages); + exercise = Exercise.fromApiDataJson(baseData, _languages); if (exerciseDb == null) { await database.into(database.exercises).insert( ExercisesCompanion.insert( - id: exerciseData.id, + id: exercise.id!, data: jsonEncode(baseData), - lastUpdate: exerciseData.lastUpdateGlobal, + lastUpdate: exercise.lastUpdateGlobal!, lastFetched: DateTime.now()), ); } @@ -464,9 +461,7 @@ class ExercisesProvider with ChangeNotifier { final exercisesDb = await database.select(database.exercises).get(); log('Loaded ${exercisesDb.length} exercises from cache'); - exercises = exercisesDb - .map((e) => Exercise.fromApiData(ExerciseApiData.fromJson(json.decode(e.data)), _languages)) - .toList(); + exercises = exercisesDb.map((e) => Exercise.fromApiDataString(e.data, _languages)).toList(); // updateExerciseCache(database); } @@ -480,9 +475,7 @@ class ExercisesProvider with ChangeNotifier { ]); final List exercisesData = data[0]['results']; - exercises = exercisesData - .map((e) => Exercise.fromApiData(ExerciseApiData.fromJson(e), _languages)) - .toList(); + exercises = exercisesData.map((e) => Exercise.fromApiDataJson(e, _languages)).toList(); // Insert new entries and update ones that have been edited Future.forEach(exercisesData, (exerciseData) async { diff --git a/test/exercises/exercise_provider_load_test.dart b/test/exercises/exercise_provider_load_test.dart index 9dc25ed90..e54aea86a 100644 --- a/test/exercises/exercise_provider_load_test.dart +++ b/test/exercises/exercise_provider_load_test.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:wger/models/exercises/exercise.dart'; -import 'package:wger/models/exercises/exercise_api.dart'; import 'package:wger/providers/exercises.dart'; import '../../test_data/exercises.dart'; @@ -63,8 +62,8 @@ void main() { // arrange // arrange and act - final exercise = Exercise.fromApiData( - ExerciseApiData.fromJson(tExerciseInfoMap), + final exercise = Exercise.fromApiDataJson( + tExerciseInfoMap, const [tLanguage1, tLanguage2, tLanguage3], ); diff --git a/test/exercises/model_exercise_test.dart b/test/exercises/model_exercise_test.dart index 65b63f51b..f3ef3237a 100644 --- a/test/exercises/model_exercise_test.dart +++ b/test/exercises/model_exercise_test.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:wger/models/exercises/exercise.dart'; -import 'package:wger/models/exercises/exercise_api.dart'; import '../../test_data/exercises.dart'; import '../fixtures/fixture_reader.dart'; @@ -31,8 +30,8 @@ void main() { // arrange // arrange and act - final exercise = Exercise.fromApiData( - ExerciseApiData.fromJson(tExerciseInfoMap), + final exercise = Exercise.fromApiDataJson( + tExerciseInfoMap, const [tLanguage1, tLanguage2, tLanguage3], );