Skip to content

Commit

Permalink
Added some methods that will be used by the material_bloc.dart
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Mar 16, 2021
1 parent 68462a4 commit 8b50d26
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 35 deletions.
Expand Up @@ -8,6 +8,7 @@ abstract class TranslationMaterialFile implements _$TranslationMaterialFile {
factory TranslationMaterialFile({
@required String key,
@required String name,
String description,
String bossName,
}) = _TranslationMaterialFile;

Expand Down
21 changes: 2 additions & 19 deletions lib/domain/models/db/weapons/weapon_file_model.dart
Expand Up @@ -8,7 +8,6 @@ import '../../../enums/weapon_type.dart';
import '../../models.dart';

part 'weapon_file_model.freezed.dart';

part 'weapon_file_model.g.dart';

@freezed
Expand All @@ -29,7 +28,7 @@ abstract class WeaponFileModel implements _$WeaponFileModel {
@required List<WeaponFileAscensionMaterial> ascensionMaterials,
@required List<WeaponFileRefinement> refinements,
@required List<WeaponFileStatModel> stats,
List<WeaponCraftedFileModel> craftingMaterials,
List<ItemAscensionMaterialModel> craftingMaterials,
}) = _WeaponFileModel;

WeaponFileModel._();
Expand Down Expand Up @@ -73,20 +72,4 @@ abstract class WeaponFileStatModel implements _$WeaponFileStatModel {
const WeaponFileStatModel._();

factory WeaponFileStatModel.fromJson(Map<String, dynamic> json) => _$WeaponFileStatModelFromJson(json);
}

@freezed
abstract class WeaponCraftedFileModel implements _$WeaponCraftedFileModel {
@late
String get fullImagePath => Assets.getMaterialPath(image, materialType);

factory WeaponCraftedFileModel({
@required int quantity,
@required MaterialType materialType,
@required String image,
}) = _WeaponCraftedFileModel;

WeaponCraftedFileModel._();

factory WeaponCraftedFileModel.fromJson(Map<String, dynamic> json) => _$WeaponCraftedFileModelFromJson(json);
}
}
10 changes: 8 additions & 2 deletions lib/domain/services/genshin_service.dart
Expand Up @@ -21,16 +21,21 @@ abstract class GenshinService {
WeaponCardModel getWeaponForCardByImg(String image);
WeaponFileModel getWeapon(String key);
WeaponFileModel getWeaponByImg(String img);
List<String> getCharactersImgUsingWeapon(String key);

List<ArtifactCardModel> getArtifactsForCard();
ArtifactCardModel getArtifactForCardByImg(String image);
ArtifactFileModel getArtifact(String key);
List<String> getCharactersImgUsingArtifact(String key);

List<String> getCharacterImgsUsingWeapon(String key);
List<String> getCharacterImgsUsingArtifact(String key);
List<String> getCharacterImgsUsingMaterial(String key);
List<String> getWeaponImgsUsingMaterial(String key);
List<String> getRelatedMaterialImgsToMaterial(String key);

TranslationArtifactFile getArtifactTranslation(String key);
TranslationCharacterFile getCharacterTranslation(String key);
TranslationWeaponFile getWeaponTranslation(String key);
TranslationMaterialFile getMaterialTranslation(String key);

List<TodayCharAscensionMaterialsModel> getCharacterAscensionMaterials(int day);
List<TodayWeaponAscensionMaterialModel> getWeaponAscensionMaterials(int day);
Expand All @@ -40,6 +45,7 @@ abstract class GenshinService {
List<ElementReactionCardModel> getElementResonances();

List<MaterialCardModel> getAllMaterials();
MaterialFileModel getMaterial(String key);
MaterialFileModel getMaterialByImage(String image);
List<MaterialFileModel> getMaterials(MaterialType type);

Expand Down
5 changes: 5 additions & 0 deletions lib/domain/services/telemetry_service.dart
Expand Up @@ -33,4 +33,9 @@ abstract class TelemetryService {
Future<void> trackGameCodesOpened();

Future<void> trackTierListBuilderScreenShootTaken();

Future<void> trackMaterialLoaded(
String key, {
bool loadedFromName = true,
});
}
93 changes: 83 additions & 10 deletions lib/infrastructure/genshin_service.dart
Expand Up @@ -87,6 +87,9 @@ class GenshinServiceImpl implements GenshinService {
List<CharacterCardModel> getCharactersForCard() {
return _charactersFile.characters.map(
(e) {
final translation = getCharacterTranslation(e.key);

//The reduce is to take the material with the biggest level of each type
final multiTalentAscensionMaterials = e.multiTalentAscensionMaterials ?? <CharacterFileMultiTalentAscensionMaterialModel>[];

final ascensionMaterial =
Expand All @@ -101,14 +104,8 @@ class GenshinServiceImpl implements GenshinService {
final materials =
(ascensionMaterial?.materials ?? <ItemAscensionMaterialModel>[]) + (talentMaterial?.materials ?? <ItemAscensionMaterialModel>[]);

final mp = <String, ItemAscensionMaterialModel>{};
for (final item in materials) {
if (item.materialType != MaterialType.currency) {
mp[item.image] = item;
}
}
final quickMaterials = mp.values.toList();
final translation = getCharacterTranslation(e.key);
final quickMaterials = _getMaterialsToUse(materials);

return CharacterCardModel(
key: e.key,
elementType: e.elementType,
Expand Down Expand Up @@ -231,7 +228,7 @@ class GenshinServiceImpl implements GenshinService {
}

@override
List<String> getCharactersImgUsingWeapon(String key) {
List<String> getCharacterImgsUsingWeapon(String key) {
final weapon = getWeapon(key);
final imgs = <String>[];
for (final char in _charactersFile.characters) {
Expand Down Expand Up @@ -288,7 +285,7 @@ class GenshinServiceImpl implements GenshinService {
}

@override
List<String> getCharactersImgUsingArtifact(String key) {
List<String> getCharacterImgsUsingArtifact(String key) {
final artifact = getArtifact(key);
final imgs = <String>[];
for (final char in _charactersFile.characters) {
Expand Down Expand Up @@ -320,6 +317,11 @@ class GenshinServiceImpl implements GenshinService {
return _translationFile.artifacts.firstWhere((t) => t.key == key);
}

@override
TranslationMaterialFile getMaterialTranslation(String key) {
return _translationFile.materials.firstWhere((t) => t.key == key);
}

@override
List<TodayCharAscensionMaterialsModel> getCharacterAscensionMaterials(int day) {
final iterable = day == DateTime.sunday
Expand Down Expand Up @@ -455,6 +457,11 @@ class GenshinServiceImpl implements GenshinService {
}).toList();
}

@override
MaterialFileModel getMaterial(String key) {
return _materialsFile.materials.firstWhere((m) => m.key == key);
}

@override
MaterialFileModel getMaterialByImage(String image) {
return _materialsFile.materials.firstWhere((m) => m.fullImagePath == image);
Expand Down Expand Up @@ -500,4 +507,70 @@ class GenshinServiceImpl implements GenshinService {

@override
List<GameCodeFileModel> getAllGameCodes() => _gameCodesFile.gameCodes;

@override
List<String> getCharacterImgsUsingMaterial(String key) {
final material = getMaterial(key);
final imgs = <String>[];

for (final char in _charactersFile.characters.where((c) => !c.isComingSoon)) {
final multiTalentAscensionMaterials =
(char.multiTalentAscensionMaterials?.expand((e) => e.materials)?.expand((e) => e.materials) ?? <ItemAscensionMaterialModel>[]).toList();

final ascensionMaterial = char.ascensionMaterials.expand((e) => e.materials).toList();
final talentMaterial = char.talentAscensionMaterials.expand((e) => e.materials).toList();

final materials = multiTalentAscensionMaterials + ascensionMaterial + talentMaterial;
final allMaterials = _getMaterialsToUse(materials);

if (allMaterials.any((m) => m.fullImagePath == material.fullImagePath)) {
imgs.add(Assets.getCharacterPath(char.image));
}
}

return imgs;
}

@override
List<String> getWeaponImgsUsingMaterial(String key) {
final material = getMaterial(key);
final imgs = <String>[];

for (final weapon in _weaponsFile.weapons) {
final materials = (weapon.craftingMaterials ?? <ItemAscensionMaterialModel>[]) + weapon.ascensionMaterials.expand((e) => e.materials).toList();
final allMaterials = _getMaterialsToUse(materials);
if (allMaterials.any((m) => m.fullImagePath == material.fullImagePath)) {
imgs.add(weapon.fullImagePath);
}
}

return imgs;
}

@override
List<String> getRelatedMaterialImgsToMaterial(String key) {
final material = getMaterial(key);
return _materialsFile.materials
.where((m) {
final isUsed = m.obtainedFrom.expand((e) => e.items).where((e) => e.fullImagePath == material.fullImagePath).isNotEmpty;
return m.key != key && isUsed;
})
.map((m) => m.fullImagePath)
.toSet()
.toList();
}

List<ItemAscensionMaterialModel> _getMaterialsToUse(
List<ItemAscensionMaterialModel> materials, {
List<MaterialType> ignore = const [MaterialType.currency],
}) {
final mp = <String, ItemAscensionMaterialModel>{};
for (final item in materials) {
if (!ignore.contains(item.materialType)) {
mp[item.image] = item;
}
}

return mp.values.toList();
}
}
21 changes: 17 additions & 4 deletions lib/infrastructure/telemetry/telemetry_service.dart
Expand Up @@ -66,11 +66,15 @@ class TelemetryServiceImpl implements TelemetryService {

@override
Future<void> trackUrlOpened(bool loadMap, bool loadWishSimulator, bool networkAvailable) async {
await trackEventAsync('Url-Opened', {
'Map': loadMap.toString(),
'WishSimulator': loadWishSimulator.toString(),
final props = {
'NetworkAvailable': networkAvailable.toString(),
});
};

if (loadMap) {
await trackEventAsync('Map-Opened', props);
} else if (loadWishSimulator) {
await trackEventAsync('WishSimulator-Opened', props);
}
}

@override
Expand Down Expand Up @@ -101,4 +105,13 @@ class TelemetryServiceImpl implements TelemetryService {

@override
Future<void> trackTierListBuilderScreenShootTaken() => trackEventAsync('TierListBuilder-ScreenShootTaken');

@override
Future<void> trackMaterialLoaded(String key, {bool loadedFromName = true}) async {
if (loadedFromName) {
await trackEventAsync('Material-FromName', {'Name': key});
} else {
await trackEventAsync('Material-FromImg', {'Image': key});
}
}
}

0 comments on commit 8b50d26

Please sign in to comment.