diff --git a/app/integration_test/fixtures/set_app_data.dart b/app/integration_test/fixtures/set_app_data.dart index 23eca97b7..32c804b3a 100644 --- a/app/integration_test/fixtures/set_app_data.dart +++ b/app/integration_test/fixtures/set_app_data.dart @@ -60,17 +60,17 @@ void setUserDataForGuideline(Guideline guideline) { } } -void addDrugToCachedDrugs(Drug drug) { - CachedDrugs.instance.drugs = CachedDrugs.instance.drugs ?? []; - final drugIsPresent = CachedDrugs.instance.drugs!.any( +void addDrugToDrugsWithGuidelines(Drug drug) { + DrugsWithGuidelines.instance.drugs = DrugsWithGuidelines.instance.drugs ?? []; + final drugIsPresent = DrugsWithGuidelines.instance.drugs!.any( (presentDrug) => presentDrug.name == drug.name, ); if (drugIsPresent) return; - CachedDrugs.instance.drugs!.add(drug); + DrugsWithGuidelines.instance.drugs!.add(drug); } void setAppData({required Drug drug, required Guideline guideline}) { - addDrugToCachedDrugs(drug); + addDrugToDrugsWithGuidelines(drug); initializeGenotypeResultKeys().values.forEach(setGenotypeResult); setUserDataForGuideline(guideline); } diff --git a/app/integration_test/main_page_test.dart b/app/integration_test/main_page_test.dart index 44af93b68..2b5f07895 100644 --- a/app/integration_test/main_page_test.dart +++ b/app/integration_test/main_page_test.dart @@ -12,8 +12,8 @@ void main() { UserData.instance.genotypeResults = {}; - CachedDrugs.instance.version = 1; - CachedDrugs.instance.drugs = List.empty(); + DrugsWithGuidelines.instance.version = 1; + DrugsWithGuidelines.instance.drugs = List.empty(); group('test the main page', () { testWidgets('test that tabs change pages', (tester) async { diff --git a/app/lib/common/models/drug/drug.dart b/app/lib/common/models/drug/drug.dart index 210e041b6..0de678f0e 100644 --- a/app/lib/common/models/drug/drug.dart +++ b/app/lib/common/models/drug/drug.dart @@ -189,7 +189,7 @@ String _getDrugWithBrandNames( String drugName, { required bool capitalize } ) { - final drug = CachedDrugs.instance.drugs?.firstOrNullWhere( + final drug = DrugsWithGuidelines.instance.drugs?.firstOrNullWhere( (drug) => drug.name == drugName ); final displayedDrugName = capitalize ? drugName.capitalize() : drugName; diff --git a/app/lib/common/models/drug/cached_drugs.dart b/app/lib/common/models/drug/drugs_with_guidelines.dart similarity index 56% rename from app/lib/common/models/drug/cached_drugs.dart rename to app/lib/common/models/drug/drugs_with_guidelines.dart index a51323492..1ffa82aa8 100644 --- a/app/lib/common/models/drug/cached_drugs.dart +++ b/app/lib/common/models/drug/drugs_with_guidelines.dart @@ -3,27 +3,27 @@ import 'package:hive/hive.dart'; import '../../utilities/hive_utils.dart'; import '../module.dart'; -part 'cached_drugs.g.dart'; +part 'drugs_with_guidelines.g.dart'; -const _boxName = 'cachedDrugs'; +const _boxName = 'DrugsWithGuidelines'; @HiveType(typeId: 5) -class CachedDrugs { - factory CachedDrugs() => _instance; +class DrugsWithGuidelines { + factory DrugsWithGuidelines() => _instance; // private constructor - CachedDrugs._(); + DrugsWithGuidelines._(); - static CachedDrugs _instance = CachedDrugs._(); - static CachedDrugs get instance => _instance; + static DrugsWithGuidelines _instance = DrugsWithGuidelines._(); + static DrugsWithGuidelines get instance => _instance; /// Writes the current instance to local storage static Future save() async => - Hive.box(_boxName).put('data', _instance); + Hive.box(_boxName).put('data', _instance); static Future erase() async { - _instance = CachedDrugs._(); - await CachedDrugs.save(); + _instance = DrugsWithGuidelines._(); + await DrugsWithGuidelines.save(); } @HiveField(0) @@ -33,9 +33,9 @@ class CachedDrugs { List? drugs; } -Future initCachedDrugs() async { +Future initDrugsWithGuidelines() async { try { - Hive.registerAdapter(CachedDrugsAdapter()); + Hive.registerAdapter(DrugsWithGuidelinesAdapter()); Hive.registerAdapter(DrugAdapter()); Hive.registerAdapter(DrugAnnotationsAdapter()); Hive.registerAdapter(GuidelineAdapter()); @@ -49,10 +49,11 @@ Future initCachedDrugs() async { // cached drugs have exactly the matching guidelines saved, i.e. they can be // used to figure out the user's gene lookupkeys, i.e. we have to encrypt. final encryptionKey = await retrieveExistingOrGenerateKey(); - await Hive.openBox( + await Hive.openBox( _boxName, encryptionCipher: HiveAesCipher(encryptionKey), ); - final cachedDrugs = Hive.box(_boxName); - CachedDrugs._instance = cachedDrugs.get('data') ?? CachedDrugs(); + final drugsWithGuidelines = Hive.box(_boxName); + DrugsWithGuidelines._instance = + drugsWithGuidelines.get('data') ?? DrugsWithGuidelines(); } diff --git a/app/lib/common/models/module.dart b/app/lib/common/models/module.dart index 1415b0758..796e2cf26 100644 --- a/app/lib/common/models/module.dart +++ b/app/lib/common/models/module.dart @@ -1,7 +1,7 @@ export 'anni_response.dart'; -export 'drug/cached_drugs.dart'; export 'drug/drug.dart'; export 'drug/drug_inhibitors.dart'; +export 'drug/drugs_with_guidelines.dart'; export 'drug/guideline.dart'; export 'drug/warning_level.dart'; export 'metadata.dart'; diff --git a/app/lib/common/services.dart b/app/lib/common/services.dart index 7400daf3a..7a7365c0e 100644 --- a/app/lib/common/services.dart +++ b/app/lib/common/services.dart @@ -7,7 +7,7 @@ Future initServices() async { await initMetaData(); await initUserData(); - await initCachedDrugs(); + await initDrugsWithGuidelines(); WidgetsFlutterBinding.ensureInitialized(); } @@ -15,5 +15,5 @@ Future cleanupServices() async { await MetaData.save(); await UserData.save(); - await CachedDrugs.save(); + await DrugsWithGuidelines.save(); } diff --git a/app/lib/common/utilities/drug_utils.dart b/app/lib/common/utilities/drug_utils.dart index 9f21ab142..31aedd54e 100644 --- a/app/lib/common/utilities/drug_utils.dart +++ b/app/lib/common/utilities/drug_utils.dart @@ -4,9 +4,9 @@ import 'package:http/http.dart'; import '../../app.dart'; import '../module.dart'; -Future updateCachedDrugs() async { +Future updateDrugsWithGuidelines() async { final isOnline = await hasConnectionTo(anniUrl().host); - if (!isOnline && CachedDrugs.instance.version == null) { + if (!isOnline && DrugsWithGuidelines.instance.version == null) { throw Exception(); } final versionResponse = await get(anniUrl('version')); @@ -14,14 +14,14 @@ Future updateCachedDrugs() async { final version = AnniVersionResponse.fromJson(jsonDecode(versionResponse.body)) .data .version; - if (version == CachedDrugs.instance.version) return; + if (version == DrugsWithGuidelines.instance.version) return; final dataResponse = await get(anniUrl('data')); if (dataResponse.statusCode != 200) throw Exception(); final data = AnniDataResponse.fromJson(jsonDecode(dataResponse.body)).data; - final previousVersion = CachedDrugs.instance.version; - CachedDrugs.instance.drugs = data.drugs; - CachedDrugs.instance.version = data.version; - await CachedDrugs.save(); + final previousVersion = DrugsWithGuidelines.instance.version; + DrugsWithGuidelines.instance.drugs = data.drugs; + DrugsWithGuidelines.instance.version = data.version; + await DrugsWithGuidelines.save(); await updateGenotypeResults(); if (previousVersion != null) { final context = PharMeApp.navigatorKey.currentContext; diff --git a/app/lib/common/utilities/genome_data.dart b/app/lib/common/utilities/genome_data.dart index 241a55a30..4dd8b6fa6 100644 --- a/app/lib/common/utilities/genome_data.dart +++ b/app/lib/common/utilities/genome_data.dart @@ -34,7 +34,7 @@ Future _saveDiplotypeAndActiveDrugsResponse( await activeDrugs.setList(activeDrugList); // invalidate cached drugs because lookups may have changed and we need to // refilter the matching guidelines - await CachedDrugs.erase(); + await DrugsWithGuidelines.erase(); } String formatLookupMapKey(String gene, String variant) { @@ -44,7 +44,7 @@ String formatLookupMapKey(String gene, String variant) { @visibleForTesting Map initializeGenotypeResultKeys() { final emptyGenotypeResults = {}; - for (final drug in CachedDrugs.instance.drugs ?? []) { + for (final drug in DrugsWithGuidelines.instance.drugs ?? []) { for (final guideline in drug.guidelines) { for (final gene in guideline.lookupkey.keys) { for (final variant in guideline.lookupkey[gene]!) { @@ -110,9 +110,10 @@ bool shouldUpdateGenotypeResults() { DateTime.now().difference(MetaData.instance.lookupsLastFetchDate!) > cpicMaxCacheTime; final labDataPresent = UserData.instance.labData?.isNotEmpty ?? false; - final cachedDrugsPresent = CachedDrugs.instance.drugs?.isNotEmpty ?? false; + final drugsWithGuidelinesPresent = + DrugsWithGuidelines.instance.drugs?.isNotEmpty ?? false; return labDataPresent && - cachedDrugsPresent && + drugsWithGuidelinesPresent && (genotypeResultsMissing || lookupsAreOutdated); } diff --git a/app/lib/common/widgets/drug_list/cubit.dart b/app/lib/common/widgets/drug_list/cubit.dart index 5c35675ab..bc3a3f984 100644 --- a/app/lib/common/widgets/drug_list/cubit.dart +++ b/app/lib/common/widgets/drug_list/cubit.dart @@ -49,7 +49,7 @@ class DrugListCubit extends Cubit { FilterState.initial(); if (useCache) { - final drugs = CachedDrugs.instance.drugs; + final drugs = DrugsWithGuidelines.instance.drugs; if (drugs != null) { emit(DrugListState.loaded(drugs, filter)); return; @@ -62,7 +62,7 @@ class DrugListCubit extends Cubit { emit(DrugListState.loading()); try { - await updateCachedDrugs(); + await updateDrugsWithGuidelines(); await loadDrugs(updateIfNull: false, filter: filter); } catch (error) { emit(DrugListState.error()); diff --git a/app/lib/drug_selection/pages/drug_selection.dart b/app/lib/drug_selection/pages/drug_selection.dart index e6545134b..1e38b8657 100644 --- a/app/lib/drug_selection/pages/drug_selection.dart +++ b/app/lib/drug_selection/pages/drug_selection.dart @@ -78,7 +78,7 @@ class DrugSelectionPage extends HookWidget { } Widget _buildDrugList(BuildContext context, DrugSelectionState state) { - if (CachedDrugs.instance.drugs!.isEmpty) { + if (DrugsWithGuidelines.instance.drugs!.isEmpty) { return Column( children: [ Text( diff --git a/app/lib/login/cubit.dart b/app/lib/login/cubit.dart index 016120d80..b1cf8f1b1 100644 --- a/app/lib/login/cubit.dart +++ b/app/lib/login/cubit.dart @@ -61,7 +61,7 @@ class LoginCubit extends Cubit { // ignore: use_build_context_synchronously emit(LoginState.loadingUserData(context.l10n.auth_updating_data)); } - await updateCachedDrugs(); + await updateDrugsWithGuidelines(); // login + fetching of data successful MetaData.instance.isLoggedIn = true; diff --git a/app/lib/more/utils.dart b/app/lib/more/utils.dart index 9cc95cbce..39f3f3415 100644 --- a/app/lib/more/utils.dart +++ b/app/lib/more/utils.dart @@ -9,7 +9,7 @@ Future deleteAllAppData() async { await _deleteAppDir(); await UserData.erase(); await MetaData.erase(); - await CachedDrugs.erase(); + await DrugsWithGuidelines.erase(); } // The folders themself cannot be deleted on iOS, therefore delete all content diff --git a/app/lib/report/pages/report.dart b/app/lib/report/pages/report.dart index 77c987d43..066641598 100644 --- a/app/lib/report/pages/report.dart +++ b/app/lib/report/pages/report.dart @@ -25,7 +25,7 @@ class ReportPage extends StatelessWidget { final warningLevelCounts = {}; for (final genotypeResult in userGenotypes) { warningLevelCounts[genotypeResult.key.value] = {}; - final affectedDrugs = CachedDrugs.instance.drugs?.filter( + final affectedDrugs = DrugsWithGuidelines.instance.drugs?.filter( (drug) => drug.guidelineGenotypes.contains(genotypeResult.key.value) ) ?? []; for (final warningLevel in WarningLevel.values) {