diff --git a/lib/domain/assets.dart b/lib/domain/assets.dart index d7fa02e1b..d957033a5 100644 --- a/lib/domain/assets.dart +++ b/lib/domain/assets.dart @@ -1,5 +1,8 @@ -import 'enums/enums.dart'; -import 'extensions/string_extensions.dart'; +import 'dart:convert'; + +import 'package:flutter/services.dart' show rootBundle; +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/extensions/string_extensions.dart'; class Assets { static String dbPath = 'assets/db'; @@ -237,4 +240,10 @@ class Assets { static String getGadgetPath(String image) => '$gadgetsBasePath/$image'; static String getFurniturePath(String image) => '$furnitureBasePath/$image'; + + static Future> getJsonFromPath(String path) async { + final jsonStr = await rootBundle.loadString(path); + final json = jsonDecode(jsonStr) as Map; + return json; + } } diff --git a/lib/domain/services/file/artifact_file_service.dart b/lib/domain/services/file/artifact_file_service.dart new file mode 100644 index 000000000..af04a7fca --- /dev/null +++ b/lib/domain/services/file/artifact_file_service.dart @@ -0,0 +1,19 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class ArtifactFileService implements BaseFileService { + List getArtifactsForCard({ArtifactType? type}); + + ArtifactCardModel getArtifactForCard(String key); + + ArtifactFileModel getArtifact(String key); + + List getArtifactBonus(TranslationArtifactFile translation); + + List getArtifactRelatedParts(String fullImagePath, String image, int bonus); + + String getArtifactRelatedPart(String fullImagePath, String image, int bonus, ArtifactType type); + + List generateSubStatSummary(List artifacts); +} diff --git a/lib/domain/services/file/banner_history_file_service.dart b/lib/domain/services/file/banner_history_file_service.dart new file mode 100644 index 000000000..3dd6ee8e9 --- /dev/null +++ b/lib/domain/services/file/banner_history_file_service.dart @@ -0,0 +1,17 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class BannerHistoryFileService implements BaseFileService { + List getBannerHistoryVersions(SortDirectionType type); + + List getBannerHistory(BannerHistoryItemType type); + + List getBanners(double version); + + List getItemReleaseHistory(String itemKey); + + List getElementsForCharts(double fromVersion, double untilVersion); + + List getTopCharts(bool mostReruns, ChartType type, BannerHistoryItemType bannerType, List items); +} diff --git a/lib/domain/services/file/base_file_service.dart b/lib/domain/services/file/base_file_service.dart new file mode 100644 index 000000000..9b6b785a1 --- /dev/null +++ b/lib/domain/services/file/base_file_service.dart @@ -0,0 +1,3 @@ +abstract class BaseFileService { + Future init(); +} diff --git a/lib/domain/services/file/character_file_service.dart b/lib/domain/services/file/character_file_service.dart new file mode 100644 index 000000000..abf2976bd --- /dev/null +++ b/lib/domain/services/file/character_file_service.dart @@ -0,0 +1,45 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class CharacterFileService extends BaseFileService { + List getCharactersForCard(); + + CharacterCardModel getCharacterForCard(String key); + + CharacterFileModel getCharacter(String key); + + List getDefaultCharacterTierList(List colors); + + List getCharacterForItemsUsingWeapon(String key); + + List getCharacterForItemsUsingArtifact(String key); + + List getCharacterForItemsUsingMaterial(String key); + + List getUpcomingCharactersKeys(); + + List getCharacterSkillStats(List skillStats, List statsTranslations); + + List getCharacterBirthdaysForCharts(); + + List getCharacterRegionsForCharts(); + + List getCharacterGendersForCharts(); + + ChartGenderModel getCharacterGendersByRegionForCharts(RegionType regionType); + + List getCharactersForItemsByRegion(RegionType regionType); + + List getCharactersForItemsByRegionAndGender(RegionType regionType, bool onlyFemales); + + List getCharacterBirthdays({int? month, int? day}); + + List getCharacterAscensionMaterials(int day); + + int countByStatType(StatType statType); + + List getItemCommonWithNameByRarity(int rarity); + + List getItemCommonWithNameByStatType(StatType statType); +} diff --git a/lib/domain/services/file/element_file_service.dart b/lib/domain/services/file/element_file_service.dart new file mode 100644 index 000000000..185052692 --- /dev/null +++ b/lib/domain/services/file/element_file_service.dart @@ -0,0 +1,10 @@ +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class ElementFileService implements BaseFileService { + List getElementDebuffs(); + + List getElementReactions(); + + List getElementResonances(); +} diff --git a/lib/domain/services/file/file_infrastructure.dart b/lib/domain/services/file/file_infrastructure.dart new file mode 100644 index 000000000..cc04682fe --- /dev/null +++ b/lib/domain/services/file/file_infrastructure.dart @@ -0,0 +1,10 @@ +export 'artifact_file_service.dart'; +export 'banner_history_file_service.dart'; +export 'character_file_service.dart'; +export 'element_file_service.dart'; +export 'furniture_file_service.dart'; +export 'gadget_file_service.dart'; +export 'material_file_service.dart'; +export 'monster_file_service.dart'; +export 'translation_file_service.dart'; +export 'weapon_file_service.dart'; diff --git a/lib/domain/services/file/furniture_file_service.dart b/lib/domain/services/file/furniture_file_service.dart new file mode 100644 index 000000000..da1324030 --- /dev/null +++ b/lib/domain/services/file/furniture_file_service.dart @@ -0,0 +1,8 @@ +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class FurnitureFileService implements BaseFileService { + FurnitureFileModel getDefaultFurnitureForNotifications(); + + FurnitureFileModel getFurniture(String key); +} diff --git a/lib/domain/services/file/gadget_file_service.dart b/lib/domain/services/file/gadget_file_service.dart new file mode 100644 index 000000000..8ef2420bc --- /dev/null +++ b/lib/domain/services/file/gadget_file_service.dart @@ -0,0 +1,8 @@ +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class GadgetFileService implements BaseFileService { + List getAllGadgetsForNotifications(); + + GadgetFileModel getGadget(String key); +} diff --git a/lib/domain/services/file/material_file_service.dart b/lib/domain/services/file/material_file_service.dart new file mode 100644 index 000000000..f4dddb98e --- /dev/null +++ b/lib/domain/services/file/material_file_service.dart @@ -0,0 +1,36 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class MaterialFileService implements BaseFileService { + List getAllMaterialsForCard(); + + MaterialCardModel getMaterialForCard(String key); + + MaterialFileModel getMaterial(String key); + + MaterialFileModel getMaterialByImage(String image); + + List getMaterials(MaterialType type, {bool onlyReadyToBeUsed = true}); + + MaterialFileModel getMoraMaterial(); + + String getMaterialImg(String key); + + List getAllMaterialsThatCanBeObtainedFromAnExpedition(); + + List getAllMaterialsThatHaveAFarmingRespawnDuration(); + + List getMaterialsFromAscensionMaterials( + List materials, { + List ignore = const [MaterialType.currency], + }); + + List getCharacterAscensionMaterials(int day); + + List getWeaponAscensionMaterials(int day); + + MaterialFileModel getRealmCurrencyMaterial(); + + MaterialFileModel getPrimogemMaterial(); +} diff --git a/lib/domain/services/file/monster_file_service.dart b/lib/domain/services/file/monster_file_service.dart new file mode 100644 index 000000000..3ee65ce8d --- /dev/null +++ b/lib/domain/services/file/monster_file_service.dart @@ -0,0 +1,17 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class MonsterFileService implements BaseFileService { + MonsterFileModel getMonster(String key); + + List getAllMonstersForCard(); + + MonsterCardModel getMonsterForCard(String key); + + List getMonsters(MonsterType type); + + List getRelatedMonsterToMaterialForItems(String key); + + List getRelatedMonsterToArtifactForItems(String key); +} diff --git a/lib/domain/services/file/translation_file_service.dart b/lib/domain/services/file/translation_file_service.dart new file mode 100644 index 000000000..a5c909d30 --- /dev/null +++ b/lib/domain/services/file/translation_file_service.dart @@ -0,0 +1,22 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; + +abstract class TranslationFileService { + Future init(AppLanguageType languageType); + + TranslationCharacterFile getCharacterTranslation(String key); + + TranslationWeaponFile getWeaponTranslation(String key); + + TranslationArtifactFile getArtifactTranslation(String key); + + TranslationMaterialFile getMaterialTranslation(String key); + + TranslationMonsterFile getMonsterTranslation(String key); + + TranslationElementFile getDebuffTranslation(String key); + + TranslationElementFile getReactionTranslation(String key); + + TranslationElementFile getResonanceTranslation(String key); +} diff --git a/lib/domain/services/file/weapon_file_service.dart b/lib/domain/services/file/weapon_file_service.dart new file mode 100644 index 000000000..1bf41cd39 --- /dev/null +++ b/lib/domain/services/file/weapon_file_service.dart @@ -0,0 +1,23 @@ +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/base_file_service.dart'; + +abstract class WeaponFileService implements BaseFileService { + List getWeaponsForCard(); + + WeaponCardModel getWeaponForCard(String key); + + WeaponFileModel getWeapon(String key); + + List getUpcomingWeaponsKeys(); + + List getWeaponForItemsUsingMaterial(String key); + + List getWeaponAscensionMaterials(int day); + + int countByStatType(StatType statType); + + List getItemCommonWithNameByRarity(int rarity); + + List getItemCommonWithNameByStatType(StatType statType); +} diff --git a/lib/domain/services/genshin_service.dart b/lib/domain/services/genshin_service.dart index 36e6a7ce1..bc9d47885 100644 --- a/lib/domain/services/genshin_service.dart +++ b/lib/domain/services/genshin_service.dart @@ -1,108 +1,47 @@ import 'package:shiori/domain/enums/enums.dart'; import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/file/file_infrastructure.dart'; abstract class GenshinService { + ArtifactFileService get artifacts; + + BannerHistoryFileService get bannerHistory; + + CharacterFileService get characters; + + ElementFileService get elements; + + FurnitureFileService get furniture; + + GadgetFileService get gadgets; + + MaterialFileService get materials; + + MonsterFileService get monsters; + + WeaponFileService get weapons; + + TranslationFileService get translations; + Future init(AppLanguageType languageType); - Future initCharacters(); - Future initWeapons(); - Future initArtifacts(); - Future initMaterials(); - Future initElements(); - Future initMonsters(); - Future initGadgets(); - Future initFurniture(); - Future initBannerHistory(); - Future initTranslations(AppLanguageType languageType); - - List getCharactersForCard(); - CharacterCardModel getCharacterForCard(String key); - CharacterFileModel getCharacter(String key); - List getDefaultCharacterTierList(List colors); - List getUpcomingCharactersKeys(); - List getCharacterSkillStats(List skillStats, List statsTranslations); - - List getWeaponsForCard(); - WeaponCardModel getWeaponForCard(String key); - WeaponFileModel getWeapon(String key); - List getUpcomingWeaponsKeys(); - - List getArtifactsForCard({ArtifactType? type}); - ArtifactCardModel getArtifactForCard(String key); - ArtifactFileModel getArtifact(String key); - - List getCharacterForItemsUsingWeapon(String key); - List getCharacterForItemsUsingArtifact(String key); - List getCharacterForItemsUsingMaterial(String key); - List getWeaponForItemsUsingMaterial(String key); - List getRelatedMonsterToMaterialForItems(String key); - List getRelatedMonsterToArtifactForItems(String key); - - TranslationArtifactFile getArtifactTranslation(String key); - TranslationCharacterFile getCharacterTranslation(String key); - TranslationWeaponFile getWeaponTranslation(String key); - TranslationMaterialFile getMaterialTranslation(String key); - TranslationMonsterFile getMonsterTranslation(String key); - List getAllMaterialsThatCanBeObtainedFromAnExpedition(); - List getAllMaterialsThatHaveAFarmingRespawnDuration(); - - List getCharacterAscensionMaterials(int day); - List getWeaponAscensionMaterials(int day); - - List getElementDebuffs(); - List getElementReactions(); - List getElementResonances(); - - List getAllMaterialsForCard(); - MaterialCardModel getMaterialForCard(String key); - MaterialFileModel getMaterial(String key); - MaterialFileModel getMaterialByImage(String image); - List getMaterials(MaterialType type, {bool onlyReadyToBeUsed = true}); - MaterialFileModel getMoraMaterial(); - String getMaterialImg(String key); int getServerDay(AppServerResetTimeType type); + DateTime getServerDate(AppServerResetTimeType type); + Duration getDurationUntilServerResetDate(AppServerResetTimeType type); List getUpcomingKeys(); - MonsterFileModel getMonster(String key); - List getAllMonstersForCard(); - MonsterCardModel getMonsterForCard(String key); - List getMonsters(MonsterType type); - String getItemImageFromNotificationType(String itemKey, AppNotificationType notificationType, {AppNotificationItemType? notificationItemType}); - String getItemImageFromNotificationItemType(String itemKey, AppNotificationItemType notificationItemType); - - List getAllGadgetsForNotifications(); - GadgetFileModel getGadget(String key); - FurnitureFileModel getDefaultFurnitureForNotifications(); - FurnitureFileModel getFurniture(String key); + String getItemImageFromNotificationItemType(String itemKey, AppNotificationItemType notificationItemType); DateTime getNextDateForWeeklyBoss(AppServerResetTimeType type); - List getArtifactBonus(TranslationArtifactFile translation); - List getArtifactRelatedParts(String fullImagePath, String image, int bonus); - String getArtifactRelatedPart(String fullImagePath, String image, int bonus, ArtifactType type); - List generateSubStatSummary(List artifacts); - - List getBannerHistoryVersions(SortDirectionType type); - List getBannerHistory(BannerHistoryItemType type); - List getBanners(double version); - List getItemReleaseHistory(String itemKey); - List getTopCharts(ChartType type); - List getCharacterBirthdaysForCharts(); - List getElementsForCharts(double fromVersion, double untilVersion); - List getItemAscensionStatsForCharts(ItemType itemType); - List getCharacterRegionsForCharts(); - List getCharacterGendersForCharts(); - ChartGenderModel getCharacterGendersByRegionForCharts(RegionType regionType); - List getCharactersForItemsByRegion(RegionType regionType); - List getCharactersForItemsByRegionAndGender(RegionType regionType, bool onlyFemales); - List getCharacterBirthdays({int? month, int? day}); + List getItemAscensionStatsForCharts(ItemType itemType); List getItemsAscensionStats(StatType statType, ItemType itemType); }