From 44b4ae167ebb6f4ec7d9550995d15c53e5a91dc9 Mon Sep 17 00:00:00 2001 From: Catherine Gilbert Date: Sun, 26 May 2024 15:41:48 -0400 Subject: [PATCH] Ajust code style + enforce in pipeline (#35) * Adjust code style to better match official c# guidelines * Enforce dotnet format * Update gitattributes to commit with crlf * fix gitattributes * update check-format action * again --- .editorconfig | 350 ++++++++++++------ .gitattributes | 5 + .github/workflows/build.yml | 2 +- .github/workflows/check-format.yml | 18 + Dalamud.Libs.targets | 10 - Directory.Build.props | 17 + .../Attributes/EntryPointAttribute.cs | 4 +- .../Configuration/DalamudPluginModule.cs | 76 ++-- .../Configuration/DalamudServiceWrapper.cs | 6 +- .../EasyTranslate.DalamudPlugin.csproj | 75 ++-- .../EasyTranslatePlugin.cs | 36 +- .../Localisation/ContentTypeTranslations.cs | 10 +- .../Localisation/LanguageSwitcher.cs | 14 +- .../Resources/Strings.fr.resx | 242 ++++++------ .../Resources/Strings.resx | 254 ++++++------- .../Search/ContentMapper.cs | 12 +- .../Search/OpenSearchCommand.cs | 31 +- .../Search/PresentableContent.cs | 6 +- .../Search/SearchContextMenuItem.cs | 37 +- .../Search/SearchView.cs | 129 +++---- .../Search/SearchViewModel.cs | 79 ++-- .../Settings/OpenSettingsCommand.cs | 31 +- .../Settings/SettingsView.cs | 44 +-- .../Settings/SettingsViewModel.cs | 10 +- .../Settings/UserSettings.cs | 9 +- .../Settings/UserSettingsRepository.cs | 36 +- .../packages.lock.json | 86 +++-- .../LongestCommonSubstringComparerTest.cs | 12 +- .../EasyTranslate.Domain.Tests.csproj | 30 +- .../Entities/ContentTest.cs | 26 +- .../LongestCommonSubstringComparer.cs | 12 +- .../EasyTranslate.Domain.csproj | 12 +- EasyTranslate.Domain/Entities/Content.cs | 6 +- EasyTranslate.Domain/Entities/ContentType.cs | 4 +- EasyTranslate.Domain/Entities/Language.cs | 2 +- .../Repositories/IContentRepository.cs | 4 +- .../EasyTranslate.Infrastructure.Tests.csproj | 55 ++- .../GameData/GameDataContentRepositoryTest.cs | 94 +++-- .../Configuration/InfrastructureModule.cs | 94 ++--- .../EasyTranslate.Infrastructure.csproj | 45 ++- .../GameData/Adapters/AchievementAdapter.cs | 7 +- .../GameData/Adapters/ActionAdapter.cs | 7 +- .../GameData/Adapters/BNpcNameAdapter.cs | 7 +- .../GameData/Adapters/CompanionAdapter.cs | 7 +- .../Adapters/ContentFinderConditionAdapter.cs | 7 +- .../GameData/Adapters/CraftActionAdapter.cs | 7 +- .../GameData/Adapters/ENpcResidentAdapter.cs | 7 +- .../GameData/Adapters/EmoteAdapter.cs | 7 +- .../GameData/Adapters/FateAdapter.cs | 7 +- .../GameData/Adapters/ItemAdapter.cs | 7 +- .../GameData/Adapters/LeveAdapter.cs | 7 +- .../GameData/Adapters/MountAdapter.cs | 7 +- .../GameData/Adapters/OrchestrionAdapter.cs | 7 +- .../GameData/Adapters/PlaceNameAdapter.cs | 7 +- .../GameData/Adapters/QuestAdapter.cs | 7 +- .../GameData/Adapters/StatusAdapter.cs | 7 +- .../GameData/Adapters/TitleAdapter.cs | 11 +- .../GameData/Adapters/TraitAdapter.cs | 7 +- .../GameData/Adapters/WeatherAdapter.cs | 7 +- .../GameData/GameDataContentRepository.cs | 8 +- .../GameData/IContentTypeAdapter.cs | 6 +- .../GameData/ISearchByNameQuery.cs | 8 +- .../GameData/LuminaLanguageExtension.cs | 11 +- .../GameData/SearchByNameQuery.cs | 27 +- .../GameData/Sheets/AchievementLite.cs | 10 +- .../GameData/Sheets/ActionLite.cs | 10 +- .../GameData/Sheets/BNpcNameLite.cs | 9 +- .../GameData/Sheets/CompanionLite.cs | 10 +- .../Sheets/ContentFinderConditionLite.cs | 10 +- .../GameData/Sheets/ContentTypeLite.cs | 10 +- .../GameData/Sheets/CraftActionLite.cs | 10 +- .../GameData/Sheets/ENpcResidentLite.cs | 9 +- .../GameData/Sheets/EmoteLite.cs | 10 +- .../GameData/Sheets/FateLite.cs | 10 +- .../GameData/Sheets/ItemLite.cs | 10 +- .../GameData/Sheets/LeveLite.cs | 9 +- .../GameData/Sheets/MountLite.cs | 10 +- .../GameData/Sheets/OrchestrionLite.cs | 9 +- .../GameData/Sheets/PlaceNameLite.cs | 9 +- .../GameData/Sheets/QuestLite.cs | 9 +- .../GameData/Sheets/StatusLite.cs | 10 +- .../GameData/Sheets/TitleLite.cs | 10 +- .../GameData/Sheets/TraitLite.cs | 10 +- .../GameData/Sheets/WeatherLite.cs | 10 +- .../EasyTranslate.Standalone.csproj | 47 ++- EasyTranslate.Standalone/Program.cs | 27 +- .../EasyTranslate.UseCase.Tests.csproj | 44 +-- .../SearchContentByNameUseCaseTest.cs | 92 ++--- .../Configuration/UseCaseModule.cs | 8 +- .../EasyTranslate.UseCase.csproj | 24 +- .../SearchContentByNameUseCase.cs | 26 +- EasyTranslate.sln.DotSettings | 35 -- 92 files changed, 1419 insertions(+), 1300 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/workflows/check-format.yml delete mode 100644 Dalamud.Libs.targets create mode 100644 Directory.Build.props delete mode 100644 EasyTranslate.sln.DotSettings diff --git a/.editorconfig b/.editorconfig index e4ade27..2174f49 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,141 +1,249 @@ -root = true +# editorconfig.org + # top-most EditorConfig file +root = true +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation [*] -charset = utf-8 - -end_of_line = lf insert_final_newline = true - -# 4 space indentation indent_style = space indent_size = 4 +trim_trailing_whitespace = true -# disable redundant style warnings +[project.json] +indent_size = 2 -# Microsoft .NET properties -csharp_indent_braces = false -csharp_new_line_before_catch = true +# C# and Visual Basic files +[*.{cs,vb}] +charset = utf-8-bom + +# Analyzers +dotnet_analyzer_diagnostic.category-Security.severity = error +dotnet_code_quality.ca1802.api_surface = private, internal + +# Miscellaneous style rules +dotnet_sort_system_directives_first = true +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +# avoid this. unless absolutely necessary +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_event = false:suggestion + +# name all constant fields using PascalCase +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.required_modifiers = const +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# static fields should have s_ prefix +dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion +dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields +dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static +dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected +dotnet_naming_style.static_prefix_style.required_prefix = s_ +dotnet_naming_style.static_prefix_style.capitalization = camel_case + +# internal and private fields should be _camelCase +dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion +dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields +dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style +dotnet_naming_symbols.private_internal_fields.applicable_kinds = field +dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal +dotnet_naming_style.camel_case_underscore_style.required_prefix = _ +dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case + +# Code quality +dotnet_style_readonly_field = true:suggestion +dotnet_code_quality_unused_parameters = non_public:suggestion + +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_auto_properties = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent + +# CA2208: Instantiate argument exceptions correctly +dotnet_diagnostic.CA2208.severity = error +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion +dotnet_style_namespace_match_folder = true:suggestion +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +end_of_line = crlf +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +dotnet_style_allow_multiple_blank_lines_experimental = false:silent +dotnet_style_allow_statement_immediately_after_block_experimental = true:silent +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent + +# C# files +[*.cs] +# New line preferences +csharp_new_line_before_open_brace = all csharp_new_line_before_else = true +csharp_new_line_before_catch = true csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = false -csharp_new_line_before_open_brace = all -csharp_preferred_modifier_order = public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion -csharp_style_var_elsewhere = true:suggestion -csharp_style_var_for_built_in_types = true:suggestion -csharp_style_var_when_type_is_apparent = true:suggestion -dotnet_code_quality_unused_parameters = non_public -dotnet_naming_rule.event_rule.severity = warning -dotnet_naming_rule.event_rule.style = on_upper_camel_case_style -dotnet_naming_rule.event_rule.symbols = event_symbols -dotnet_naming_rule.private_constants_rule.severity = warning -dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style -dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols -dotnet_naming_rule.private_instance_fields_rule.severity = warning -dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style -dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols -dotnet_naming_rule.private_static_fields_rule.severity = warning -dotnet_naming_rule.private_static_fields_rule.style = upper_camel_case_style -dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols -dotnet_naming_rule.private_static_readonly_rule.severity = warning -dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style -dotnet_naming_rule.private_static_readonly_rule.symbols = private_static_readonly_symbols -dotnet_naming_style.lower_camel_case_style.capitalization = camel_case -dotnet_naming_style.on_upper_camel_case_style.capitalization = pascal_case -dotnet_naming_style.on_upper_camel_case_style.required_prefix = On -dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case -dotnet_naming_symbols.event_symbols.applicable_accessibilities = * -dotnet_naming_symbols.event_symbols.applicable_kinds = event -dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field -dotnet_naming_symbols.private_constants_symbols.required_modifiers = const -dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static -dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private -dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field -dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion -dotnet_style_predefined_type_for_member_access = true:suggestion -dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion -dotnet_style_parentheses_in_other_operators = always_for_clarity:silent -dotnet_style_object_initializer = false +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current + +# Modifier preferences +csharp_preferred_modifier_order = public, private, protected, internal, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async:suggestion + +# Code style defaults +csharp_using_directive_placement = outside_namespace:suggestion +csharp_prefer_braces = true:silent +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false +csharp_prefer_static_local_function = true:suggestion +csharp_prefer_simple_using_statement = false:none +csharp_style_prefer_switch_expression = true:suggestion + +# Expression-bodied members +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = when_on_single_line:silent +csharp_style_expression_bodied_indexers = when_on_single_line:silent +csharp_style_expression_bodied_accessors = when_on_single_line:silent +csharp_style_expression_bodied_lambdas = when_on_single_line:silent +csharp_style_expression_bodied_local_functions = when_on_single_line:silent + +# Pattern matching +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion + +# Expression-level preferences +csharp_prefer_simple_default_expression = true:suggestion + +# Null checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion + +# Other features +csharp_style_prefer_index_operator = false:none +csharp_style_prefer_range_operator = false:none +csharp_style_pattern_local_over_anonymous_function = false:none + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = do_not_ignore +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false csharp_space_between_method_call_parameter_list_parentheses = false csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_empty_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_before_open_square_brackets = false -csharp_space_before_comma = false -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_comma = true -csharp_space_after_cast = false -csharp_space_around_binary_operators = before_and_after csharp_space_between_method_declaration_name_and_open_parenthesis = false csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = none +csharp_space_between_parentheses = false csharp_space_between_square_brackets = false -# ReSharper properties -resharper_align_linq_query = true -resharper_align_multiline_argument = true -resharper_align_multiline_calls_chain = true -resharper_align_multiline_expression = true -resharper_align_multiline_extends_list = true -resharper_align_multiline_for_stmt = true -resharper_align_multline_type_parameter_constrains = true -resharper_align_multline_type_parameter_list = true -resharper_apply_on_completion = true -resharper_auto_property_can_be_made_get_only_global_highlighting = none -resharper_auto_property_can_be_made_get_only_local_highlighting = none -resharper_autodetect_indent_settings = true -resharper_braces_for_ifelse = required -resharper_can_use_global_alias = false -resharper_csharp_align_multiline_parameter = true -resharper_csharp_align_multiple_declaration = true -resharper_csharp_empty_block_style = together_same_line -resharper_csharp_int_align_comments = true -resharper_csharp_new_line_before_while = true -resharper_csharp_wrap_after_declaration_lpar = true -resharper_enforce_line_ending_style = true -resharper_member_can_be_private_global_highlighting = none -resharper_member_can_be_private_local_highlighting = none -resharper_new_line_before_finally = false -resharper_place_accessorholder_attribute_on_same_line = false -resharper_place_field_attribute_on_same_line = false -resharper_show_autodetect_configure_formatting_tip = false -resharper_use_indent_from_vs = false - -# ReSharper inspection severities -resharper_arrange_missing_parentheses_highlighting = hint -resharper_arrange_redundant_parentheses_highlighting = hint -resharper_arrange_this_qualifier_highlighting = none -resharper_arrange_type_member_modifiers_highlighting = hint -resharper_arrange_type_modifiers_highlighting = hint -resharper_built_in_type_reference_style_for_member_access_highlighting = hint -resharper_built_in_type_reference_style_highlighting = none -resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting = none -resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting = none -resharper_invert_if_highlighting = none -resharper_loop_can_be_converted_to_query_highlighting = none -resharper_method_has_async_overload_highlighting = none -resharper_private_field_can_be_converted_to_local_variable_highlighting = none -resharper_redundant_base_qualifier_highlighting = none -resharper_suggest_var_or_type_built_in_types_highlighting = hint -resharper_suggest_var_or_type_elsewhere_highlighting = hint -resharper_suggest_var_or_type_simple_types_highlighting = hint -resharper_unused_auto_property_accessor_global_highlighting = none -csharp_style_deconstructed_variable_declaration = true:silent - -[*.{appxmanifest,asax,ascx,aspx,axaml,axml,build,c,c++,cc,cginc,compute,config,cp,cpp,cs,cshtml,csproj,css,cu,cuh,cxx,dbml,discomap,dtd,h,hh,hlsl,hlsli,hlslinc,hpp,htm,html,hxx,inc,inl,ino,ipp,js,json,jsproj,jsx,lsproj,master,mpp,mq4,mq5,mqh,njsproj,nuspec,paml,proj,props,proto,razor,resjson,resw,resx,skin,StyleCop,targets,tasks,tpp,ts,tsx,usf,ush,vb,vbproj,xaml,xamlx,xml,xoml,xsd}] -indent_style = space -indent_size = 4 -tab_width = 4 -dotnet_style_parentheses_in_other_operators = always_for_clarity:silent +# Namespace preference +csharp_style_namespace_declarations = file_scoped:suggestion + +# Types: use keywords instead of BCL types, and permit var only when the type is clear +csharp_style_var_for_built_in_types = false:suggestion +csharp_style_var_when_type_is_apparent = false:none +csharp_style_var_elsewhere = false:suggestion +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent +csharp_style_prefer_readonly_struct = true:suggestion +csharp_style_prefer_readonly_struct_member = true:suggestion +csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion + +# Visual Basic files +[*.vb] +# Modifier preferences +visual_basic_preferred_modifier_order = Partial, Default, Private, Protected, Public, Friend, NotOverridable, Overridable, MustOverride, Overloads, Overrides, MustInherit, NotInheritable, Static, Shared, Shadows, ReadOnly, WriteOnly, Dim, Const, WithEvents, Widening, Narrowing, Custom, Async:suggestion + +# C++ Files +[*.{cpp,h,in}] +curly_bracket_next_line = true +indent_brace_style = Allman + +# Xml project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +indent_size = 2 + +# Xml build files +[*.builds] +indent_size = 2 + +# Xml files +[*.{xml,stylecop,resx,ruleset}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf + +[*.{cmd, bat}] +end_of_line = crlf + +# Markdown files +[*.md] +# Double trailing spaces can be used for BR tags, and other instances are enforced by Markdownlint +trim_trailing_whitespace = false [*.yml] indent_size = 2 \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ae8b3bf --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text=auto + +*.cs text eol=crlf +*.csproj text eol=crlf +*.sln text eol-crlf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b5da106..eef7cae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Dalamud plugin build +name: Build and Test on: push: diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml new file mode 100644 index 0000000..9b6e415 --- /dev/null +++ b/.github/workflows/check-format.yml @@ -0,0 +1,18 @@ +name: Check format + +on: + push: + branches: [ '*' ] + +jobs: + check-format: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x.x + - name: Run dotnet format + run: dotnet format --verify-no-changes diff --git a/Dalamud.Libs.targets b/Dalamud.Libs.targets deleted file mode 100644 index be994f9..0000000 --- a/Dalamud.Libs.targets +++ /dev/null @@ -1,10 +0,0 @@ - - - - $(appdata)\XIVLauncher\addon\Hooks\dev\ - $(HOME)/.xlcore/dalamud/Hooks/dev/ - $(HOME)/Library/Application Support/XIV on Mac/dalamud/Hooks/dev/ - $(DALAMUD_HOME)/ - - - diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..a98fcb1 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,17 @@ + + + + + + + $(appdata)\XIVLauncher\addon\Hooks\dev\ + $(HOME)/.xlcore/dalamud/Hooks/dev/ + $(HOME)/Library/Application Support/XIV on Mac/dalamud/Hooks/dev/ + $(DALAMUD_HOME)/ + + diff --git a/EasyTranslate.DalamudPlugin/Attributes/EntryPointAttribute.cs b/EasyTranslate.DalamudPlugin/Attributes/EntryPointAttribute.cs index f02a13a..0b63d4e 100644 --- a/EasyTranslate.DalamudPlugin/Attributes/EntryPointAttribute.cs +++ b/EasyTranslate.DalamudPlugin/Attributes/EntryPointAttribute.cs @@ -1,6 +1,6 @@ -namespace EasyTranslate.DalamudPlugin.Attributes; +using System; -using System; +namespace EasyTranslate.DalamudPlugin.Attributes; [AttributeUsage(AttributeTargets.Class)] public class EntryPointAttribute : Attribute; diff --git a/EasyTranslate.DalamudPlugin/Configuration/DalamudPluginModule.cs b/EasyTranslate.DalamudPlugin/Configuration/DalamudPluginModule.cs index 6aacd27..a1f7768 100644 --- a/EasyTranslate.DalamudPlugin/Configuration/DalamudPluginModule.cs +++ b/EasyTranslate.DalamudPlugin/Configuration/DalamudPluginModule.cs @@ -1,62 +1,62 @@ -namespace EasyTranslate.DalamudPlugin.Configuration; - -using Dalamud.Interface.Windowing; +using Dalamud.Interface.Windowing; using Dalamud.Plugin; using Dalamud.Plugin.Services; -using Infrastructure.Configuration; -using Localisation; +using EasyTranslate.DalamudPlugin.Localisation; +using EasyTranslate.DalamudPlugin.Search; +using EasyTranslate.DalamudPlugin.Settings; +using EasyTranslate.Infrastructure.Configuration; +using EasyTranslate.UseCase.Configuration; using Lumina.Excel; using Microsoft.Extensions.DependencyInjection; -using Search; -using Settings; -using UseCase.Configuration; + +namespace EasyTranslate.DalamudPlugin.Configuration; public static class DalamudPluginModule { public static ServiceProvider CreateServiceProvider(DalamudPluginInterface pluginInterface) { return new ServiceCollection() - .AddDalamudServices(pluginInterface) - .AddPluginServices() - .AddUseCaseServices() - .AddInfrastructureServices() - .BuildServiceProvider(); + .AddDalamudServices(pluginInterface) + .AddPluginServices() + .AddUseCaseServices() + .AddInfrastructureServices() + .BuildServiceProvider(); } - public static IServiceCollection AddDalamudServices( + private static IServiceCollection AddDalamudServices( this IServiceCollection serviceCollection, DalamudPluginInterface pluginInterface ) { return serviceCollection - .AddExisting(pluginInterface) - .AddExisting(pluginInterface.UiBuilder) - .AddDalamudService() - .AddDalamudService() - .AddDalamudService() - .AddDalamudService() - .AddDalamudService() - .AddDalamudService() - .AddSingleton(serviceProvider => serviceProvider.GetService()!.Excel); + .AddExisting(pluginInterface) + .AddExisting(pluginInterface.UiBuilder) + .AddDalamudService() + .AddDalamudService() + .AddDalamudService() + .AddDalamudService() + .AddDalamudService() + .AddDalamudService() + .AddSingleton(serviceProvider => serviceProvider.GetService()!.Excel); } - public static IServiceCollection AddPluginServices(this IServiceCollection serviceCollection) + private static IServiceCollection AddPluginServices(this IServiceCollection serviceCollection) { return serviceCollection - .AddSingleton() - .AddSingleton(_ => new WindowSystem("EasyTranslate")) - .AddSingleton() - .AddTransient() - .AddSingleton() - .AddSingleton() - .AddSingleton() - .AddSingleton() - .AddSingleton() - .AddTransient() - .AddSingleton(); + .AddSingleton() + .AddSingleton(_ => new WindowSystem("EasyTranslate")) + .AddSingleton() + .AddTransient() + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddSingleton() + .AddTransient() + .AddSingleton(); } - public static IServiceCollection AddExisting(this IServiceCollection serviceCollection, T service) + private static IServiceCollection AddExisting(this IServiceCollection serviceCollection, T service) where T : class { return serviceCollection.AddSingleton(service); @@ -67,8 +67,8 @@ public static IServiceCollection AddExisting(this IServiceCollection serviceC serviceCollection.AddSingleton( serviceProvider => { - var pluginInterface = serviceProvider.GetService(); - var wrapper = new DalamudServiceWrapper(pluginInterface!); + DalamudPluginInterface? pluginInterface = serviceProvider.GetService(); + DalamudServiceWrapper wrapper = new(pluginInterface!); return wrapper.Service; } ); diff --git a/EasyTranslate.DalamudPlugin/Configuration/DalamudServiceWrapper.cs b/EasyTranslate.DalamudPlugin/Configuration/DalamudServiceWrapper.cs index c9bd14e..cbfe8ea 100644 --- a/EasyTranslate.DalamudPlugin/Configuration/DalamudServiceWrapper.cs +++ b/EasyTranslate.DalamudPlugin/Configuration/DalamudServiceWrapper.cs @@ -1,8 +1,8 @@ -namespace EasyTranslate.DalamudPlugin.Configuration; - -using Dalamud.IoC; +using Dalamud.IoC; using Dalamud.Plugin; +namespace EasyTranslate.DalamudPlugin.Configuration; + #pragma warning disable CS8618 public class DalamudServiceWrapper diff --git a/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj b/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj index baeac6d..9e7ece7 100644 --- a/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj +++ b/EasyTranslate.DalamudPlugin/EasyTranslate.DalamudPlugin.csproj @@ -1,46 +1,45 @@ - - + - - Olaren - - 2.1.0.0 - Search for FFXIV translations right from the game! - - https://github.com/Olaren15/ffxiv-easy-translate - AGPL-3.0-or-later - false - EasyTranslate.DalamudPlugin - net8.0-windows - en - 12 - + + Olaren + + 2.1.0.0 + Search for FFXIV translations right from the game! + + https://github.com/Olaren15/ffxiv-easy-translate + AGPL-3.0-or-later + false + EasyTranslate.DalamudPlugin + net8.0-windows + en + 12 + - - - - - + + + + + - - - + + + - - - - ResXFileCodeGenerator - Strings.Designer.cs - - + + + + ResXFileCodeGenerator + Strings.Designer.cs + + - - - True - True - Strings.resx - - + + + True + True + Strings.resx + + diff --git a/EasyTranslate.DalamudPlugin/EasyTranslatePlugin.cs b/EasyTranslate.DalamudPlugin/EasyTranslatePlugin.cs index e0eddc1..834ee8e 100644 --- a/EasyTranslate.DalamudPlugin/EasyTranslatePlugin.cs +++ b/EasyTranslate.DalamudPlugin/EasyTranslatePlugin.cs @@ -1,43 +1,43 @@ -namespace EasyTranslate.DalamudPlugin; - -using System; +using System; using System.Linq; using System.Reflection; -using Attributes; -using Configuration; using Dalamud.Interface; using Dalamud.Interface.Windowing; using Dalamud.IoC; using Dalamud.Plugin; +using EasyTranslate.DalamudPlugin.Attributes; +using EasyTranslate.DalamudPlugin.Configuration; using Microsoft.Extensions.DependencyInjection; +namespace EasyTranslate.DalamudPlugin; + // ReSharper disable once UnusedType.Global public sealed class EasyTranslatePlugin : IDalamudPlugin { - private readonly ServiceProvider serviceProvider; - private readonly UiBuilder uiBuilder; - private readonly WindowSystem windowSystem; + private readonly ServiceProvider _serviceProvider; + private readonly UiBuilder _uiBuilder; + private readonly WindowSystem _windowSystem; public EasyTranslatePlugin([RequiredVersion("1.0")] DalamudPluginInterface pluginInterface) { - serviceProvider = DalamudPluginModule.CreateServiceProvider(pluginInterface); - windowSystem = serviceProvider.GetService()!; - uiBuilder = serviceProvider.GetService()!; + _serviceProvider = DalamudPluginModule.CreateServiceProvider(pluginInterface); + _windowSystem = _serviceProvider.GetService()!; + _uiBuilder = _serviceProvider.GetService()!; - uiBuilder.Draw += windowSystem.Draw; + _uiBuilder.Draw += _windowSystem.Draw; // Instantiate classes with [EntryPoint] attribute. Assembly.GetAssembly(typeof(EasyTranslatePlugin))! - .GetTypes() - .Where(type => type.GetCustomAttribute(typeof(EntryPointAttribute), false) is not null) - .ToList() - .ForEach(entryPoint => ActivatorUtilities.CreateInstance(serviceProvider, entryPoint)); + .GetTypes() + .Where(type => type.GetCustomAttribute(typeof(EntryPointAttribute), false) is not null) + .ToList() + .ForEach(entryPoint => ActivatorUtilities.CreateInstance(_serviceProvider, entryPoint)); } public void Dispose() { - uiBuilder.Draw -= windowSystem.Draw; - serviceProvider.Dispose(); + _uiBuilder.Draw -= _windowSystem.Draw; + _serviceProvider.Dispose(); GC.SuppressFinalize(this); } diff --git a/EasyTranslate.DalamudPlugin/Localisation/ContentTypeTranslations.cs b/EasyTranslate.DalamudPlugin/Localisation/ContentTypeTranslations.cs index 830ca4a..6ce3e93 100644 --- a/EasyTranslate.DalamudPlugin/Localisation/ContentTypeTranslations.cs +++ b/EasyTranslate.DalamudPlugin/Localisation/ContentTypeTranslations.cs @@ -1,8 +1,8 @@ -namespace EasyTranslate.DalamudPlugin.Localisation; +using System.ComponentModel; +using EasyTranslate.DalamudPlugin.Resources; +using EasyTranslate.Domain.Entities; -using System.ComponentModel; -using Domain.Entities; -using Resources; +namespace EasyTranslate.DalamudPlugin.Localisation; public static class ContentTypeTranslations { @@ -27,7 +27,7 @@ public static string LocalisedName(this ContentType contentType) ContentType.Title => Strings.Title, ContentType.Trait => Strings.Trait, ContentType.Weather => Strings.Weather, - _ => throw new InvalidEnumArgumentException(nameof(contentType), (int)contentType, typeof(ContentType)), + _ => throw new InvalidEnumArgumentException(nameof(contentType), (int)contentType, typeof(ContentType)) }; } } diff --git a/EasyTranslate.DalamudPlugin/Localisation/LanguageSwitcher.cs b/EasyTranslate.DalamudPlugin/Localisation/LanguageSwitcher.cs index df7dc83..6fa9ec1 100644 --- a/EasyTranslate.DalamudPlugin/Localisation/LanguageSwitcher.cs +++ b/EasyTranslate.DalamudPlugin/Localisation/LanguageSwitcher.cs @@ -1,17 +1,17 @@ -namespace EasyTranslate.DalamudPlugin.Localisation; - -using System; +using System; using System.Globalization; using Dalamud.Plugin; -using Resources; +using EasyTranslate.DalamudPlugin.Resources; + +namespace EasyTranslate.DalamudPlugin.Localisation; public sealed class LanguageSwitcher : IDisposable { - private readonly DalamudPluginInterface pluginInterface; + private readonly DalamudPluginInterface _pluginInterface; public LanguageSwitcher(DalamudPluginInterface pluginInterface) { - this.pluginInterface = pluginInterface; + _pluginInterface = pluginInterface; LanguageChangedHandler(pluginInterface.UiLanguage); pluginInterface.LanguageChanged += LanguageChangedHandler; @@ -19,7 +19,7 @@ public LanguageSwitcher(DalamudPluginInterface pluginInterface) public void Dispose() { - pluginInterface.LanguageChanged -= LanguageChangedHandler; + _pluginInterface.LanguageChanged -= LanguageChangedHandler; GC.SuppressFinalize(this); } diff --git a/EasyTranslate.DalamudPlugin/Resources/Strings.fr.resx b/EasyTranslate.DalamudPlugin/Resources/Strings.fr.resx index f8e2a56..e9a5a9f 100644 --- a/EasyTranslate.DalamudPlugin/Resources/Strings.fr.resx +++ b/EasyTranslate.DalamudPlugin/Resources/Strings.fr.resx @@ -1,125 +1,125 @@ - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - Affiche la fenêtre de recherche de traductions - - - Affiche la fenêtre de paramètres - - - Sélectionnez votre langue de recherche - - - Anglais - - - Français - - - Allemand - - - Japonais - - - Rechercher les traductions - - - Rechercher - - - Chargement... - - - Icône - - - Nom - - - Recherche de traductions - - - Paramètres EasyTranslate - - - Aucun résultats - - - Type - - - Haut fait - - - Action - - - ALÉA - - - Instance - - - Objet - - - PNJ - - - Endroit - - - Quête - - - Statut - - - Titre - - - Météo - - - Mandat - - - Trait - - - Emote - - - Mascotte - - - Monture - - - Orchestrion - + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + Affiche la fenêtre de recherche de traductions + + + Affiche la fenêtre de paramètres + + + Sélectionnez votre langue de recherche + + + Anglais + + + Français + + + Allemand + + + Japonais + + + Rechercher les traductions + + + Rechercher + + + Chargement... + + + Icône + + + Nom + + + Recherche de traductions + + + Paramètres EasyTranslate + + + Aucun résultats + + + Type + + + Haut fait + + + Action + + + ALÉA + + + Instance + + + Objet + + + PNJ + + + Endroit + + + Quête + + + Statut + + + Titre + + + Météo + + + Mandat + + + Trait + + + Emote + + + Mascotte + + + Monture + + + Orchestrion + diff --git a/EasyTranslate.DalamudPlugin/Resources/Strings.resx b/EasyTranslate.DalamudPlugin/Resources/Strings.resx index 02e9a0f..1f28605 100644 --- a/EasyTranslate.DalamudPlugin/Resources/Strings.resx +++ b/EasyTranslate.DalamudPlugin/Resources/Strings.resx @@ -1,131 +1,131 @@ - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - /et - - - Open the translations search window - - - /ets - - - Open the settings window - - - Choose your search language: - - - English - - - French - - - German - - - Japanese - - - Search translations - - - Search - - - Loading... - - - Icon - - - Name - - - Search translations - - - EasyTranslate Settings - - - No results - - - Type - - - Achievement - - - Action - - - Emote - - - Fate - - - Instance - - - Item - - - Levequest - - - Minion - - - NPC - - - Orchestrion - - - Place - - - Quest - - - Status - - - Title - - - Trait - - - Weather - - - Mount - + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + /et + + + Open the translations search window + + + /ets + + + Open the settings window + + + Choose your search language: + + + English + + + French + + + German + + + Japanese + + + Search translations + + + Search + + + Loading... + + + Icon + + + Name + + + Search translations + + + EasyTranslate Settings + + + No results + + + Type + + + Achievement + + + Action + + + Emote + + + Fate + + + Instance + + + Item + + + Levequest + + + Minion + + + NPC + + + Orchestrion + + + Place + + + Quest + + + Status + + + Title + + + Trait + + + Weather + + + Mount + diff --git a/EasyTranslate.DalamudPlugin/Search/ContentMapper.cs b/EasyTranslate.DalamudPlugin/Search/ContentMapper.cs index f8139d9..c1ce3e8 100644 --- a/EasyTranslate.DalamudPlugin/Search/ContentMapper.cs +++ b/EasyTranslate.DalamudPlugin/Search/ContentMapper.cs @@ -1,13 +1,13 @@ -namespace EasyTranslate.DalamudPlugin.Search; - -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Dalamud.Plugin.Services; -using Domain.Entities; +using EasyTranslate.Domain.Entities; + +namespace EasyTranslate.DalamudPlugin.Search; public class ContentMapper(ITextureProvider textureProvider) { - public PresentableContent ConvertToPresentableItem(Content content) + private PresentableContent ConvertToPresentableItem(Content content) { return new PresentableContent( content.Type, @@ -22,7 +22,7 @@ public PresentableContent ConvertToPresentableItem(Content content) public PresentableContent[] ConvertToPresentableContents(IEnumerable items) { - var mapped = items.Select(ConvertToPresentableItem); + IEnumerable mapped = items.Select(ConvertToPresentableItem); return mapped as PresentableContent[] ?? mapped.ToArray(); } } diff --git a/EasyTranslate.DalamudPlugin/Search/OpenSearchCommand.cs b/EasyTranslate.DalamudPlugin/Search/OpenSearchCommand.cs index 5c90065..67c237b 100644 --- a/EasyTranslate.DalamudPlugin/Search/OpenSearchCommand.cs +++ b/EasyTranslate.DalamudPlugin/Search/OpenSearchCommand.cs @@ -1,35 +1,32 @@ -namespace EasyTranslate.DalamudPlugin.Search; - -using System; -using Attributes; +using System; using Dalamud.Game.Command; using Dalamud.Plugin.Services; -using Resources; +using EasyTranslate.DalamudPlugin.Attributes; +using EasyTranslate.DalamudPlugin.Resources; + +namespace EasyTranslate.DalamudPlugin.Search; [EntryPoint] public sealed class OpenSearchCommand : IDisposable { - private readonly ICommandManager commandManager; - private readonly SearchView searchView; + private readonly ICommandManager _commandManager; + private readonly SearchView _searchView; public OpenSearchCommand(ICommandManager commandManager, SearchView searchView) { - this.commandManager = commandManager; - this.searchView = searchView; + _commandManager = commandManager; + _searchView = searchView; commandManager.AddHandler( Strings.SearchCommand, - new CommandInfo(HandleCommand) - { - HelpMessage = Strings.SearchCommandDescription, - } + new CommandInfo(HandleCommand) { HelpMessage = Strings.SearchCommandDescription } ); } public void Dispose() { - if (commandManager.Commands.ContainsKey(Strings.SearchCommand)) + if (_commandManager.Commands.ContainsKey(Strings.SearchCommand)) { - commandManager.RemoveHandler(Strings.SearchCommand); + _commandManager.RemoveHandler(Strings.SearchCommand); } GC.SuppressFinalize(this); @@ -39,11 +36,11 @@ private void HandleCommand(string command, string args) { if (string.IsNullOrWhiteSpace(args)) { - searchView.Show(); + _searchView.Show(); } else { - searchView.ShowAndSearch(args); + _searchView.ShowAndSearch(args); } } diff --git a/EasyTranslate.DalamudPlugin/Search/PresentableContent.cs b/EasyTranslate.DalamudPlugin/Search/PresentableContent.cs index 3d4ff3c..1b98cf5 100644 --- a/EasyTranslate.DalamudPlugin/Search/PresentableContent.cs +++ b/EasyTranslate.DalamudPlugin/Search/PresentableContent.cs @@ -1,7 +1,7 @@ -namespace EasyTranslate.DalamudPlugin.Search; +using Dalamud.Interface.Internal; +using EasyTranslate.Domain.Entities; -using Dalamud.Interface.Internal; -using Domain.Entities; +namespace EasyTranslate.DalamudPlugin.Search; public record PresentableContent( ContentType Type, diff --git a/EasyTranslate.DalamudPlugin/Search/SearchContextMenuItem.cs b/EasyTranslate.DalamudPlugin/Search/SearchContextMenuItem.cs index d0eca73..12e70da 100644 --- a/EasyTranslate.DalamudPlugin/Search/SearchContextMenuItem.cs +++ b/EasyTranslate.DalamudPlugin/Search/SearchContextMenuItem.cs @@ -1,23 +1,22 @@ -namespace EasyTranslate.DalamudPlugin.Search; - -using System; -using Attributes; +using System; using Dalamud.Game.Gui.ContextMenu; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Plugin.Services; using Dalamud.Utility; -using Localisation; +using EasyTranslate.DalamudPlugin.Attributes; +using EasyTranslate.DalamudPlugin.Localisation; +using EasyTranslate.DalamudPlugin.Resources; using Lumina.Excel; using Lumina.Excel.GeneratedSheets2; -using Resources; + +namespace EasyTranslate.DalamudPlugin.Search; [EntryPoint] public sealed class SearchContextMenuItem { - private readonly IDataManager dataManager; - private readonly SearchView searchView; - private MenuItem menuItem; + private readonly IDataManager _dataManager; + private readonly SearchView _searchView; public SearchContextMenuItem( IDataManager dataManager, @@ -26,10 +25,10 @@ public sealed class SearchContextMenuItem IContextMenu contextMenu ) { - this.dataManager = dataManager; - this.searchView = searchView; + _dataManager = dataManager; + _searchView = searchView; - menuItem = CreateMenuItem(); + MenuItem menuItem = CreateMenuItem(); contextMenu.OnMenuOpened += args => { if (args.MenuType == ContextMenuType.Inventory) @@ -52,7 +51,7 @@ private MenuItem CreateMenuItem() Prefix = null, PrefixChar = 'T', PrefixColor = 1, - Priority = 10000, + Priority = 10000 }; } @@ -64,7 +63,7 @@ private void SearchTranslations(MenuItemClickedArgs menuItemClickedArgs) return; } - var itemId = (menuItemClickedArgs.Target as MenuTargetInventory)?.TargetItem?.ItemId; + uint? itemId = (menuItemClickedArgs.Target as MenuTargetInventory)?.TargetItem?.ItemId; if (itemId is null) { return; @@ -74,12 +73,12 @@ private void SearchTranslations(MenuItemClickedArgs menuItemClickedArgs) if (itemId >= 2000000) { // Event items are stuff in the key items tab of inventory afaik - item = dataManager.Excel.GetSheet()?.GetRow(itemId.Value); + item = _dataManager.Excel.GetSheet()?.GetRow(itemId.Value); } else { // Not sure why we modulo by 500000, but I stole the code from simple tweaks so i'll trust it lol - item = dataManager.Excel.GetSheet()?.GetRow(itemId.Value % 500000); + item = _dataManager.Excel.GetSheet()?.GetRow(itemId.Value % 500000); } if (item is null) @@ -87,13 +86,13 @@ private void SearchTranslations(MenuItemClickedArgs menuItemClickedArgs) return; } - var itemName = item switch + string itemName = item switch { Item item1 => item1.Name.ToDalamudString().TextValue, EventItem eventItem => eventItem.Name.ToDalamudString().TextValue, - _ => throw new InvalidOperationException(), + _ => throw new InvalidOperationException() }; - searchView.ShowAndSearch(itemName); + _searchView.ShowAndSearch(itemName); } } diff --git a/EasyTranslate.DalamudPlugin/Search/SearchView.cs b/EasyTranslate.DalamudPlugin/Search/SearchView.cs index 4384034..7b47e73 100644 --- a/EasyTranslate.DalamudPlugin/Search/SearchView.cs +++ b/EasyTranslate.DalamudPlugin/Search/SearchView.cs @@ -1,22 +1,22 @@ -namespace EasyTranslate.DalamudPlugin.Search; - -using System; +using System; using System.Numerics; using Dalamud.Interface; using Dalamud.Interface.Internal; using Dalamud.Interface.Windowing; +using EasyTranslate.DalamudPlugin.Localisation; +using EasyTranslate.DalamudPlugin.Resources; using ImGuiNET; -using Localisation; -using Resources; + +namespace EasyTranslate.DalamudPlugin.Search; public sealed class SearchView : Window, IDisposable { private const int MaxImageSize = 80; - private readonly SearchViewModel searchViewModel; - private readonly UiBuilder uiBuilder; - private readonly WindowSystem windowSystem; + private readonly SearchViewModel _searchViewModel; + private readonly UiBuilder _uiBuilder; + private readonly WindowSystem _windowSystem; - private bool windowJustOpened; + private bool _windowJustOpened; public SearchView( SearchViewModel searchViewModel, @@ -25,39 +25,39 @@ public sealed class SearchView : Window, IDisposable LanguageSwitcher languageSwitcher ) : base(Strings.SearchWindowTitle) { - this.searchViewModel = searchViewModel; - this.uiBuilder = uiBuilder; - this.windowSystem = windowSystem; + _searchViewModel = searchViewModel; + _uiBuilder = uiBuilder; + _windowSystem = windowSystem; - this.windowSystem.AddWindow(this); - this.uiBuilder.OpenMainUi += Show; + _windowSystem.AddWindow(this); + _uiBuilder.OpenMainUi += Show; languageSwitcher.OnLanguageChangedEvent += (_, _) => WindowName = Strings.SearchWindowTitle; SizeConstraints = new WindowSizeConstraints { MinimumSize = new Vector2(300, 200), - MaximumSize = new Vector2(float.MaxValue, float.MaxValue), + MaximumSize = new Vector2(float.MaxValue, float.MaxValue) }; } public void Dispose() { - windowSystem.RemoveWindow(this); - uiBuilder.OpenMainUi -= Show; + _windowSystem.RemoveWindow(this); + _uiBuilder.OpenMainUi -= Show; GC.SuppressFinalize(this); } public override void OnOpen() { base.OnOpen(); - windowJustOpened = true; + _windowJustOpened = true; } public override void Draw() { DrawSearchBar(); DrawSearchResults(); - windowJustOpened = false; + _windowJustOpened = false; } public void Show() @@ -68,88 +68,91 @@ public void Show() public void ShowAndSearch(string searchText) { IsOpen = true; - searchViewModel.SearchText = searchText; - searchViewModel.ExecuteSearch(); + _searchViewModel.SearchText = searchText; + _searchViewModel.ExecuteSearch(); } private void DrawSearchBar() { - var searchText = searchViewModel.SearchText; - var enterPressed = ImGui.InputText( + string? searchText = _searchViewModel.SearchText; + bool enterPressed = ImGui.InputText( "", ref searchText, 100, ImGuiInputTextFlags.EnterReturnsTrue | ImGuiInputTextFlags.AutoSelectAll ); - searchViewModel.SearchText = searchText; + _searchViewModel.SearchText = searchText; - if (enterPressed || windowJustOpened) + if (enterPressed || _windowJustOpened) { ImGui.SetKeyboardFocusHere(-1); } ImGui.SameLine(); - var searchButtonPressed = ImGui.Button(Strings.Search); + bool searchButtonPressed = ImGui.Button(Strings.Search); if (enterPressed || searchButtonPressed) { - searchViewModel.ExecuteSearch(); + _searchViewModel.ExecuteSearch(); } } private void DrawSearchResults() { - if (searchViewModel.SearchResultsAreLoading) + if (_searchViewModel.SearchResultsAreLoading) { ImGui.Text(Strings.Loading); + return; } - if (searchViewModel.SearchResults is not null) + if (_searchViewModel.SearchResults is null) { - if (searchViewModel.SearchResults.Length != 0) + return; + } + + if (_searchViewModel.SearchResults.Length != 0) + { + ImGui.BeginTable( + "SearchResults", + 3, + ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg | ImGuiTableFlags.SizingFixedFit + ); + ImGui.TableSetupColumn(Strings.Icon, ImGuiTableColumnFlags.WidthFixed); + ImGui.TableSetupColumn(Strings.Names, ImGuiTableColumnFlags.WidthStretch); + ImGui.TableSetupColumn(Strings.Type, ImGuiTableColumnFlags.WidthFixed); + ImGui.TableHeadersRow(); + foreach (PresentableContent searchResult in _searchViewModel.SearchResults) { - ImGui.BeginTable( - "SearchResults", - 3, - ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg | ImGuiTableFlags.SizingFixedFit - ); - ImGui.TableSetupColumn(Strings.Icon, ImGuiTableColumnFlags.WidthFixed); - ImGui.TableSetupColumn(Strings.Names, ImGuiTableColumnFlags.WidthStretch); - ImGui.TableSetupColumn(Strings.Type, ImGuiTableColumnFlags.WidthFixed); - ImGui.TableHeadersRow(); - foreach (var searchResult in searchViewModel.SearchResults) + ImGui.TableNextColumn(); + if (searchResult.IconTexture is not null) { - ImGui.TableNextColumn(); - if (searchResult.IconTexture is not null) - { - ImGui.Image(searchResult.IconTexture.ImGuiHandle, CalculateImageSize(searchResult.IconTexture)); - } - - ImGui.TableNextColumn(); - ImGui.Text($"{Strings.English}:\n{Strings.French}:\n{Strings.German}:\n{Strings.Japanese}:\n"); - ImGui.SameLine(); - ImGui.Text( - $"{searchResult.EnglishName}\n{searchResult.FrenchName}\n{searchResult.GermanName}\n{searchResult.JapaneseName}" - ); - - ImGui.TableNextColumn(); - ImGui.Text(searchResult.Type.LocalisedName()); - ImGui.SameLine(); - ImGui.Text(" "); // Fake padding lol + ImGui.Image(searchResult.IconTexture.ImGuiHandle, CalculateImageSize(searchResult.IconTexture)); } - ImGui.EndTable(); - } - else - { - ImGui.Text(Strings.NoResults); + ImGui.TableNextColumn(); + ImGui.Text($"{Strings.English}:\n{Strings.French}:\n{Strings.German}:\n{Strings.Japanese}:\n"); + ImGui.SameLine(); + ImGui.Text( + $"{searchResult.EnglishName}\n{searchResult.FrenchName}\n{searchResult.GermanName}\n{searchResult.JapaneseName}" + ); + + ImGui.TableNextColumn(); + ImGui.Text(searchResult.Type.LocalisedName()); + ImGui.SameLine(); + ImGui.Text(" "); // Fake padding lol } + + ImGui.EndTable(); + } + else + { + ImGui.Text(Strings.NoResults); } } private static Vector2 CalculateImageSize(IDalamudTextureWrap image) { - var scaleRatio = Math.Min(MaxImageSize / (float)image.Width, MaxImageSize / (float)image.Height); + float scaleRatio = Math.Min(MaxImageSize / (float)image.Width, MaxImageSize / (float)image.Height); return new Vector2(image.Width * scaleRatio, image.Height * scaleRatio); } diff --git a/EasyTranslate.DalamudPlugin/Search/SearchViewModel.cs b/EasyTranslate.DalamudPlugin/Search/SearchViewModel.cs index 77c83e0..4a15ba0 100644 --- a/EasyTranslate.DalamudPlugin/Search/SearchViewModel.cs +++ b/EasyTranslate.DalamudPlugin/Search/SearchViewModel.cs @@ -1,11 +1,11 @@ -namespace EasyTranslate.DalamudPlugin.Search; - -using System; +using System; using System.Threading; using System.Threading.Tasks; -using Domain.Entities; -using Settings; -using UseCase; +using EasyTranslate.DalamudPlugin.Settings; +using EasyTranslate.Domain.Entities; +using EasyTranslate.UseCase; + +namespace EasyTranslate.DalamudPlugin.Search; public sealed class SearchViewModel( SearchContentByNameUseCase searchContentByNameUseCase, @@ -13,66 +13,69 @@ public sealed class SearchViewModel( UserSettingsRepository userSettingsRepository ) : IDisposable { - private Task? currentSearchTask; - private CancellationTokenSource? searchCancellationToken; - private PresentableContent[]? searchResults; + private Task? _currentSearchTask; + private CancellationTokenSource? _searchCancellationToken; + private PresentableContent[]? _searchResults; private Language SearchLanguage => userSettingsRepository.Get().DefaultSearchLanguage; + public string SearchText { get; set; } = ""; public PresentableContent[]? SearchResults { get { - if (searchResults is not null) + if (_searchResults is not null) { - return searchResults; + return _searchResults; } - if (currentSearchTask is { IsCompletedSuccessfully: true }) + if (_currentSearchTask is { IsCompletedSuccessfully: true }) { - searchResults = currentSearchTask.Result; + _searchResults = _currentSearchTask.Result; - searchCancellationToken?.Dispose(); - searchCancellationToken = null; - currentSearchTask.Dispose(); - currentSearchTask = null; + _searchCancellationToken?.Dispose(); + _searchCancellationToken = null; + _currentSearchTask.Dispose(); + _currentSearchTask = null; - return searchResults; + return _searchResults; } - searchResults = null; + _searchResults = null; - return searchResults; + return _searchResults; } } - public bool SearchResultsAreLoading => currentSearchTask is { IsCompleted: false }; + public bool SearchResultsAreLoading => _currentSearchTask is { IsCompleted: false }; public void Dispose() { - currentSearchTask?.Dispose(); - currentSearchTask = null; - searchCancellationToken?.Dispose(); - searchCancellationToken = null; + _currentSearchTask?.Dispose(); + _currentSearchTask = null; + _searchCancellationToken?.Dispose(); + _searchCancellationToken = null; GC.SuppressFinalize(this); } public void ExecuteSearch() { - searchResults = null; - searchCancellationToken = new CancellationTokenSource(); - currentSearchTask = Task.Run( - () => searchContentByNameUseCase.Execute( - SearchText, - SearchLanguage, - searchCancellationToken.Token - ), - searchCancellationToken.Token) - .ContinueWith( - searchResultsTask => - contentMapper.ConvertToPresentableContents(searchResultsTask.Result), - searchCancellationToken.Token); + _searchResults = null; + _searchCancellationToken = new CancellationTokenSource(); + _currentSearchTask = Task.Run( + () => searchContentByNameUseCase.Execute( + SearchText, + SearchLanguage, + _searchCancellationToken.Token + ), + _searchCancellationToken.Token + ) + .ContinueWith( + searchResultsTask => + contentMapper.ConvertToPresentableContents(searchResultsTask.Result), + _searchCancellationToken.Token + ); } ~SearchViewModel() diff --git a/EasyTranslate.DalamudPlugin/Settings/OpenSettingsCommand.cs b/EasyTranslate.DalamudPlugin/Settings/OpenSettingsCommand.cs index 6d5949b..1b7051c 100644 --- a/EasyTranslate.DalamudPlugin/Settings/OpenSettingsCommand.cs +++ b/EasyTranslate.DalamudPlugin/Settings/OpenSettingsCommand.cs @@ -1,35 +1,32 @@ -namespace EasyTranslate.DalamudPlugin.Settings; - -using System; -using Attributes; +using System; using Dalamud.Game.Command; using Dalamud.Plugin.Services; -using Resources; +using EasyTranslate.DalamudPlugin.Attributes; +using EasyTranslate.DalamudPlugin.Resources; + +namespace EasyTranslate.DalamudPlugin.Settings; [EntryPoint] public sealed class OpenSettingsCommand : IDisposable { - private readonly ICommandManager commandManager; - private readonly SettingsView settingsView; + private readonly ICommandManager _commandManager; + private readonly SettingsView _settingsView; public OpenSettingsCommand(ICommandManager commandManager, SettingsView settingsView) { - this.commandManager = commandManager; - this.settingsView = settingsView; - this.commandManager.AddHandler( + _commandManager = commandManager; + _settingsView = settingsView; + _commandManager.AddHandler( Strings.SettingsCommand, - new CommandInfo(HandleCommand) - { - HelpMessage = Strings.SettingsCommandDescription, - } + new CommandInfo(HandleCommand) { HelpMessage = Strings.SettingsCommandDescription } ); } public void Dispose() { - if (commandManager.Commands.ContainsKey(Strings.SettingsCommand)) + if (_commandManager.Commands.ContainsKey(Strings.SettingsCommand)) { - commandManager.RemoveHandler(Strings.SettingsCommand); + _commandManager.RemoveHandler(Strings.SettingsCommand); } GC.SuppressFinalize(this); @@ -37,7 +34,7 @@ public void Dispose() private void HandleCommand(string command, string args) { - settingsView.Show(); + _settingsView.Show(); } ~OpenSettingsCommand() diff --git a/EasyTranslate.DalamudPlugin/Settings/SettingsView.cs b/EasyTranslate.DalamudPlugin/Settings/SettingsView.cs index c0d78ed..5a70d38 100644 --- a/EasyTranslate.DalamudPlugin/Settings/SettingsView.cs +++ b/EasyTranslate.DalamudPlugin/Settings/SettingsView.cs @@ -1,19 +1,19 @@ -namespace EasyTranslate.DalamudPlugin.Settings; - -using System; +using System; using System.Numerics; using Dalamud.Interface; using Dalamud.Interface.Windowing; -using Domain.Entities; +using EasyTranslate.DalamudPlugin.Localisation; +using EasyTranslate.DalamudPlugin.Resources; +using EasyTranslate.Domain.Entities; using ImGuiNET; -using Localisation; -using Resources; + +namespace EasyTranslate.DalamudPlugin.Settings; public sealed class SettingsView : Window, IDisposable { - private readonly SettingsViewModel settingsViewModel; - private readonly UiBuilder uiBuilder; - private readonly WindowSystem windowSystem; + private readonly SettingsViewModel _settingsViewModel; + private readonly UiBuilder _uiBuilder; + private readonly WindowSystem _windowSystem; public SettingsView( SettingsViewModel settingsViewModel, @@ -22,25 +22,25 @@ public sealed class SettingsView : Window, IDisposable LanguageSwitcher languageSwitcher ) : base(Strings.SettingsWindowTitle) { - this.settingsViewModel = settingsViewModel; - this.uiBuilder = uiBuilder; - this.windowSystem = windowSystem; + _settingsViewModel = settingsViewModel; + _uiBuilder = uiBuilder; + _windowSystem = windowSystem; - this.windowSystem.AddWindow(this); - this.uiBuilder.OpenConfigUi += Show; + _windowSystem.AddWindow(this); + _uiBuilder.OpenConfigUi += Show; languageSwitcher.OnLanguageChangedEvent += (_, _) => WindowName = Strings.SettingsWindowTitle; SizeConstraints = new WindowSizeConstraints { MinimumSize = new Vector2(300, 200), - MaximumSize = new Vector2(float.MaxValue, float.MaxValue), + MaximumSize = new Vector2(float.MaxValue, float.MaxValue) }; } public void Dispose() { - windowSystem.RemoveWindow(this); - uiBuilder.OpenConfigUi -= Show; + _windowSystem.RemoveWindow(this); + _uiBuilder.OpenConfigUi -= Show; GC.SuppressFinalize(this); } @@ -48,26 +48,26 @@ public override void Draw() { ImGui.Text(Strings.ChooseSearchLanguage); - var currentLanguage = settingsViewModel.PreferredLanguage; + Language currentLanguage = _settingsViewModel.PreferredLanguage; if (ImGui.RadioButton(Strings.English, currentLanguage == Language.English)) { - settingsViewModel.SetPreferredLanguage(Language.English); + _settingsViewModel.SetPreferredLanguage(Language.English); } if (ImGui.RadioButton(Strings.French, currentLanguage == Language.French)) { - settingsViewModel.SetPreferredLanguage(Language.French); + _settingsViewModel.SetPreferredLanguage(Language.French); } if (ImGui.RadioButton(Strings.German, currentLanguage == Language.German)) { - settingsViewModel.SetPreferredLanguage(Language.German); + _settingsViewModel.SetPreferredLanguage(Language.German); } if (ImGui.RadioButton(Strings.Japanese, currentLanguage == Language.Japanese)) { - settingsViewModel.SetPreferredLanguage(Language.Japanese); + _settingsViewModel.SetPreferredLanguage(Language.Japanese); } } diff --git a/EasyTranslate.DalamudPlugin/Settings/SettingsViewModel.cs b/EasyTranslate.DalamudPlugin/Settings/SettingsViewModel.cs index d897d11..05666dc 100644 --- a/EasyTranslate.DalamudPlugin/Settings/SettingsViewModel.cs +++ b/EasyTranslate.DalamudPlugin/Settings/SettingsViewModel.cs @@ -1,6 +1,6 @@ -namespace EasyTranslate.DalamudPlugin.Settings; +using EasyTranslate.Domain.Entities; -using Domain.Entities; +namespace EasyTranslate.DalamudPlugin.Settings; public class SettingsViewModel(UserSettingsRepository userSettingsRepository) { @@ -9,11 +9,7 @@ public class SettingsViewModel(UserSettingsRepository userSettingsRepository) public void SetPreferredLanguage(Language language) { userSettingsRepository.Save( - new UserSettings - { - DefaultSearchLanguage = language, - Version = userSettingsRepository.Get().Version, - } + new UserSettings { DefaultSearchLanguage = language, Version = userSettingsRepository.Get().Version } ); } } diff --git a/EasyTranslate.DalamudPlugin/Settings/UserSettings.cs b/EasyTranslate.DalamudPlugin/Settings/UserSettings.cs index 55459fb..ea9e0eb 100644 --- a/EasyTranslate.DalamudPlugin/Settings/UserSettings.cs +++ b/EasyTranslate.DalamudPlugin/Settings/UserSettings.cs @@ -1,12 +1,13 @@ -namespace EasyTranslate.DalamudPlugin.Settings; - -using System; +using System; using Dalamud.Configuration; -using Domain.Entities; +using EasyTranslate.Domain.Entities; + +namespace EasyTranslate.DalamudPlugin.Settings; [Serializable] public class UserSettings : IPluginConfiguration { public Language DefaultSearchLanguage { get; set; } + public int Version { get; set; } } diff --git a/EasyTranslate.DalamudPlugin/Settings/UserSettingsRepository.cs b/EasyTranslate.DalamudPlugin/Settings/UserSettingsRepository.cs index f0d37d5..c807b87 100644 --- a/EasyTranslate.DalamudPlugin/Settings/UserSettingsRepository.cs +++ b/EasyTranslate.DalamudPlugin/Settings/UserSettingsRepository.cs @@ -1,42 +1,42 @@ -namespace EasyTranslate.DalamudPlugin.Settings; - -using Dalamud; +using Dalamud; using Dalamud.Game.Config; using Dalamud.Plugin; using Dalamud.Plugin.Services; -using Domain.Entities; +using EasyTranslate.Domain.Entities; + +namespace EasyTranslate.DalamudPlugin.Settings; public class UserSettingsRepository { - private readonly IGameConfig gameConfig; - private readonly DalamudPluginInterface pluginInterface; + private readonly IGameConfig _gameConfig; + private readonly DalamudPluginInterface _pluginInterface; - private UserSettings userSettings; + private UserSettings _userSettings; public UserSettingsRepository(DalamudPluginInterface pluginInterface, IGameConfig gameConfig) { - this.gameConfig = gameConfig; - this.pluginInterface = pluginInterface; - userSettings = this.pluginInterface.GetPluginConfig() as UserSettings ?? CreateDefaultUserPreferences(); + _gameConfig = gameConfig; + _pluginInterface = pluginInterface; + _userSettings = _pluginInterface.GetPluginConfig() as UserSettings ?? CreateDefaultUserPreferences(); } public UserSettings Get() { - return userSettings; + return _userSettings; } public void Save(UserSettings newSettings) { - userSettings = newSettings; - pluginInterface.SavePluginConfig(userSettings); + _userSettings = newSettings; + _pluginInterface.SavePluginConfig(_userSettings); } private UserSettings CreateDefaultUserPreferences() { - var success = gameConfig.TryGet(SystemConfigOption.Language, out uint gameLanguageCode); - var gameLanguage = success ? (ClientLanguage)gameLanguageCode : ClientLanguage.English; + bool success = _gameConfig.TryGet(SystemConfigOption.Language, out uint gameLanguageCode); + ClientLanguage gameLanguage = success ? (ClientLanguage)gameLanguageCode : ClientLanguage.English; - var newPreferences = new UserSettings + UserSettings newPreferences = new() { Version = 1, DefaultSearchLanguage = gameLanguage switch @@ -45,8 +45,8 @@ private UserSettings CreateDefaultUserPreferences() ClientLanguage.English => Language.English, ClientLanguage.German => Language.German, ClientLanguage.French => Language.French, - _ => Language.English, - }, + _ => Language.English + } }; Save(newPreferences); diff --git a/EasyTranslate.DalamudPlugin/packages.lock.json b/EasyTranslate.DalamudPlugin/packages.lock.json index 9611050..84098db 100644 --- a/EasyTranslate.DalamudPlugin/packages.lock.json +++ b/EasyTranslate.DalamudPlugin/packages.lock.json @@ -1,44 +1,50 @@ { - "version": 1, - "dependencies": { - "net8.0-windows7.0": { - "DalamudPackager": { - "type": "Direct", - "requested": "[2.1.12, )", - "resolved": "2.1.12", - "contentHash": "Sc0PVxvgg4NQjcI8n10/VfUQBAS4O+Fw2pZrAqBdRMbthYGeogzu5+xmIGCGmsEZ/ukMOBuAqiNiB5qA3MRalg==" - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + "version": 1, + "dependencies": { + "net8.0-windows7.0": { + "DalamudPackager": { + "type": "Direct", + "requested": "[2.1.12, )", + "resolved": "2.1.12", + "contentHash": "Sc0PVxvgg4NQjcI8n10/VfUQBAS4O+Fw2pZrAqBdRMbthYGeogzu5+xmIGCGmsEZ/ukMOBuAqiNiB5qA3MRalg==" + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + } + }, + "SonarAnalyzer.CSharp": { + "type": "Direct", + "requested": "[9.25.1.91650, )", + "resolved": "9.25.1.91650", + "contentHash": "Z1/H8vGk2FZ8m6TK++A1Tn5npEw0L0ZNVAgf0aPI/nkq4mTER+enRZcgrkhdSo1mGbFDFgEh5ym/j3Onk6mROA==" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" + }, + "easytranslate.domain": { + "type": "Project" + }, + "easytranslate.infrastructure": { + "type": "Project", + "dependencies": { + "EasyTranslate.Domain": "[1.0.0, )", + "Microsoft.Extensions.DependencyInjection": "[8.0.0, )" + } + }, + "easytranslate.usecase": { + "type": "Project", + "dependencies": { + "EasyTranslate.Domain": "[1.0.0, )", + "Microsoft.Extensions.DependencyInjection": "[8.0.0, )" + } + } } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" - }, - "easytranslate.domain": { - "type": "Project" - }, - "easytranslate.infrastructure": { - "type": "Project", - "dependencies": { - "EasyTranslate.Domain": "[1.0.0, )", - "Microsoft.Extensions.DependencyInjection": "[8.0.0, )" - } - }, - "easytranslate.usecase": { - "type": "Project", - "dependencies": { - "EasyTranslate.Domain": "[1.0.0, )", - "Microsoft.Extensions.DependencyInjection": "[8.0.0, )" - } - } } - } } diff --git a/EasyTranslate.Domain.Tests/Comparers/LongestCommonSubstringComparerTest.cs b/EasyTranslate.Domain.Tests/Comparers/LongestCommonSubstringComparerTest.cs index a7eeb41..e1b0ebc 100644 --- a/EasyTranslate.Domain.Tests/Comparers/LongestCommonSubstringComparerTest.cs +++ b/EasyTranslate.Domain.Tests/Comparers/LongestCommonSubstringComparerTest.cs @@ -1,11 +1,11 @@ -namespace EasyTranslate.Domain.Tests.Comparers; - -using Domain.Comparers; +using EasyTranslate.Domain.Comparers; using Xunit; +namespace EasyTranslate.Domain.Tests.Comparers; + public class LongestCommonSubstringComparerTest { - private readonly LongestCommonSubstringComparer longestCommonSubstringComparer = new(); + private readonly LongestCommonSubstringComparer _longestCommonSubstringComparer = new(); [Theory] [InlineData("")] @@ -13,7 +13,7 @@ public class LongestCommonSubstringComparerTest [InlineData("This is a longer string")] public void EqualStrings_Compare_ReturnsZero(string value) { - var result = longestCommonSubstringComparer.Compare(value, value); + int result = _longestCommonSubstringComparer.Compare(value, value); Assert.Equal(0, result); } @@ -37,7 +37,7 @@ public void EqualStrings_Compare_ReturnsZero(string value) int expected ) { - var result = longestCommonSubstringComparer.Compare(a, b); + int result = _longestCommonSubstringComparer.Compare(a, b); Assert.Equal(expected, result); } diff --git a/EasyTranslate.Domain.Tests/EasyTranslate.Domain.Tests.csproj b/EasyTranslate.Domain.Tests/EasyTranslate.Domain.Tests.csproj index 17dad14..ffa162a 100644 --- a/EasyTranslate.Domain.Tests/EasyTranslate.Domain.Tests.csproj +++ b/EasyTranslate.Domain.Tests/EasyTranslate.Domain.Tests.csproj @@ -1,22 +1,22 @@ - - net8.0 + + net8.0 - false - + false + - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - + + + diff --git a/EasyTranslate.Domain.Tests/Entities/ContentTest.cs b/EasyTranslate.Domain.Tests/Entities/ContentTest.cs index d268472..cd244b4 100644 --- a/EasyTranslate.Domain.Tests/Entities/ContentTest.cs +++ b/EasyTranslate.Domain.Tests/Entities/ContentTest.cs @@ -1,17 +1,17 @@ -namespace EasyTranslate.Domain.Tests.Entities; - -using System.ComponentModel; -using Domain.Entities; +using System.ComponentModel; +using EasyTranslate.Domain.Entities; using Xunit; +namespace EasyTranslate.Domain.Tests.Entities; + public class ContentTest { [Fact] public void English_NameForLanguage_ReturnsEnglishName() { - var content = GivenContent(); + Content content = GivenContent(); - var result = content.NameForLanguage(Language.English); + string result = content.NameForLanguage(Language.English); Assert.Equal(content.EnglishName, result); } @@ -19,9 +19,9 @@ public void English_NameForLanguage_ReturnsEnglishName() [Fact] public void French_NameForLanguage_ReturnsFrenchName() { - var content = GivenContent(); + Content content = GivenContent(); - var result = content.NameForLanguage(Language.French); + string result = content.NameForLanguage(Language.French); Assert.Equal(content.FrenchName, result); } @@ -29,9 +29,9 @@ public void French_NameForLanguage_ReturnsFrenchName() [Fact] public void German_NameForLanguage_ReturnsGermanName() { - var content = GivenContent(); + Content content = GivenContent(); - var result = content.NameForLanguage(Language.German); + string result = content.NameForLanguage(Language.German); Assert.Equal(content.GermanName, result); } @@ -39,9 +39,9 @@ public void German_NameForLanguage_ReturnsGermanName() [Fact] public void Japanese_NameForLanguage_ReturnsJapaneseName() { - var content = GivenContent(); + Content content = GivenContent(); - var result = content.NameForLanguage(Language.Japanese); + string result = content.NameForLanguage(Language.Japanese); Assert.Equal(content.JapaneseName, result); } @@ -49,7 +49,7 @@ public void Japanese_NameForLanguage_ReturnsJapaneseName() [Fact] public void UnknownLanguage_NameForLanguage_ThrowsArgumentOutOfRangeException() { - var content = GivenContent(); + Content content = GivenContent(); Assert.Throws(() => content.NameForLanguage((Language)100)); } diff --git a/EasyTranslate.Domain/Comparers/LongestCommonSubstringComparer.cs b/EasyTranslate.Domain/Comparers/LongestCommonSubstringComparer.cs index d99bc38..addb3f1 100644 --- a/EasyTranslate.Domain/Comparers/LongestCommonSubstringComparer.cs +++ b/EasyTranslate.Domain/Comparers/LongestCommonSubstringComparer.cs @@ -9,15 +9,15 @@ public int Compare(string a, string b) return 0; } - var substringLengths = new int[a.Length, b.Length]; - var maxLength = 0; + int[,] substringLengths = new int[a.Length, b.Length]; + int maxLength = 0; - for (var i = 0; i < a.Length; i++) + for (int i = 0; i < a.Length; i++) { - for (var j = 0; j < b.Length; j++) + for (int j = 0; j < b.Length; j++) { - var previousLength = GetPreviousLength(substringLengths, i, j); - var currentLen = CalculateCurrentLength(a[i], b[j], previousLength); + int previousLength = GetPreviousLength(substringLengths, i, j); + int currentLen = CalculateCurrentLength(a[i], b[j], previousLength); if (currentLen > maxLength) { diff --git a/EasyTranslate.Domain/EasyTranslate.Domain.csproj b/EasyTranslate.Domain/EasyTranslate.Domain.csproj index a03ca6c..1105851 100644 --- a/EasyTranslate.Domain/EasyTranslate.Domain.csproj +++ b/EasyTranslate.Domain/EasyTranslate.Domain.csproj @@ -1,10 +1,10 @@  - - net8.0 - enable - enable - 12 - + + net8.0 + enable + enable + 12 + diff --git a/EasyTranslate.Domain/Entities/Content.cs b/EasyTranslate.Domain/Entities/Content.cs index 83349a2..0d2405e 100644 --- a/EasyTranslate.Domain/Entities/Content.cs +++ b/EasyTranslate.Domain/Entities/Content.cs @@ -1,6 +1,6 @@ -namespace EasyTranslate.Domain.Entities; +using System.ComponentModel; -using System.ComponentModel; +namespace EasyTranslate.Domain.Entities; public record Content( ContentType Type, @@ -19,7 +19,7 @@ public string NameForLanguage(Language language) Language.French => FrenchName, Language.German => GermanName, Language.Japanese => JapaneseName, - _ => throw new InvalidEnumArgumentException(nameof(language), (int)language, typeof(Language)), + _ => throw new InvalidEnumArgumentException(nameof(language), (int)language, typeof(Language)) }; } } diff --git a/EasyTranslate.Domain/Entities/ContentType.cs b/EasyTranslate.Domain/Entities/ContentType.cs index 05d4478..21b8516 100644 --- a/EasyTranslate.Domain/Entities/ContentType.cs +++ b/EasyTranslate.Domain/Entities/ContentType.cs @@ -1,4 +1,4 @@ -namespace EasyTranslate.Domain.Entities; +namespace EasyTranslate.Domain.Entities; public enum ContentType { @@ -18,5 +18,5 @@ public enum ContentType Status, Title, Trait, - Weather, + Weather } diff --git a/EasyTranslate.Domain/Entities/Language.cs b/EasyTranslate.Domain/Entities/Language.cs index 8b48873..873ec41 100644 --- a/EasyTranslate.Domain/Entities/Language.cs +++ b/EasyTranslate.Domain/Entities/Language.cs @@ -5,5 +5,5 @@ public enum Language English, French, German, - Japanese, + Japanese } diff --git a/EasyTranslate.Domain/Repositories/IContentRepository.cs b/EasyTranslate.Domain/Repositories/IContentRepository.cs index 49a3e08..66a1151 100644 --- a/EasyTranslate.Domain/Repositories/IContentRepository.cs +++ b/EasyTranslate.Domain/Repositories/IContentRepository.cs @@ -1,6 +1,6 @@ -namespace EasyTranslate.Domain.Repositories; +using EasyTranslate.Domain.Entities; -using Entities; +namespace EasyTranslate.Domain.Repositories; public interface IContentRepository { diff --git a/EasyTranslate.Infrastructure.Tests/EasyTranslate.Infrastructure.Tests.csproj b/EasyTranslate.Infrastructure.Tests/EasyTranslate.Infrastructure.Tests.csproj index 5f3f8bf..379b54b 100644 --- a/EasyTranslate.Infrastructure.Tests/EasyTranslate.Infrastructure.Tests.csproj +++ b/EasyTranslate.Infrastructure.Tests/EasyTranslate.Infrastructure.Tests.csproj @@ -1,34 +1,33 @@ - - - net8.0 + + net8.0 - false - + false + - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - + + + - - - $(DalamudLibPath)\Lumina.dll - true - - - $(DalamudLibPath)\Lumina.Excel.dll - true - - - \ No newline at end of file + + + $(DalamudLibPath)\Lumina.dll + true + + + $(DalamudLibPath)\Lumina.Excel.dll + true + + + diff --git a/EasyTranslate.Infrastructure.Tests/GameData/GameDataContentRepositoryTest.cs b/EasyTranslate.Infrastructure.Tests/GameData/GameDataContentRepositoryTest.cs index b56fbf0..67ff9f6 100644 --- a/EasyTranslate.Infrastructure.Tests/GameData/GameDataContentRepositoryTest.cs +++ b/EasyTranslate.Infrastructure.Tests/GameData/GameDataContentRepositoryTest.cs @@ -1,21 +1,23 @@ -namespace EasyTranslate.Infrastructure.Tests.GameData; - -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using Domain.Entities; -using Infrastructure.GameData; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData; using Moq; using Xunit; + +namespace EasyTranslate.Infrastructure.Tests.GameData; + +using Language = Language; using Lumina_Language = Lumina.Data.Language; public class GameDataContentRepositoryTest { private const string SearchName = "popoto"; - private static readonly Content Content1 = new(ContentType.Item, 25204, "Popoto", "Popoto", "Toffel", "ポポト"); + private readonly Content _content1 = new(ContentType.Item, 25204, "Popoto", "Popoto", "Toffel", "ポポト"); - private static readonly Content Content2 = new( + private readonly Content _content2 = new( ContentType.Item, 27455, "Popoto Set", @@ -23,7 +25,7 @@ public class GameDataContentRepositoryTest "Toffel-Knollen", "ポポトの種芋"); - private static readonly Content Content3 = new( + private readonly Content _content3 = new( ContentType.Emote, 64371, "Popoto Step", @@ -31,25 +33,23 @@ public class GameDataContentRepositoryTest "Toffel-Tanz", "ポポトステップ"); - private readonly CancellationToken fakeCancellationToken = CancellationToken.None; + private readonly CancellationToken _fakeCancellationToken = CancellationToken.None; - private readonly GameDataContentRepository gameDataContentRepository; - private readonly Mock mockSearchQuery1; - private readonly Mock mockSearchQuery2; - private readonly Mock mockSearchQuery3; + private readonly GameDataContentRepository _gameDataContentRepository; + private readonly Mock _mockSearchQuery1; + private readonly Mock _mockSearchQuery2; + private readonly Mock _mockSearchQuery3; public GameDataContentRepositoryTest() { - mockSearchQuery1 = new Mock(); - mockSearchQuery2 = new Mock(); - mockSearchQuery3 = new Mock(); + _mockSearchQuery1 = new Mock(); + _mockSearchQuery2 = new Mock(); + _mockSearchQuery3 = new Mock(); - gameDataContentRepository = new GameDataContentRepository( + _gameDataContentRepository = new GameDataContentRepository( new List { - mockSearchQuery1.Object, - mockSearchQuery2.Object, - mockSearchQuery3.Object, + _mockSearchQuery1.Object, _mockSearchQuery2.Object, _mockSearchQuery3.Object }); } @@ -58,11 +58,21 @@ public async Task ResultsFromManyQueries_SearchByName_CombinesResultsAndRemovesD { const Language searchLanguage = Language.English; const Lumina_Language luminaLanguage = Lumina_Language.English; - GivenSearchNameAndLanguageQueriesWillReturn(SearchName, luminaLanguage, [Content1, Content3], [Content2], []); - - var result = await gameDataContentRepository.SearchByName(SearchName, searchLanguage, fakeCancellationToken); - - Assert.Equivalent(new List { Content1, Content2, Content3 }, result, true); + GivenSearchNameAndLanguageQueriesWillReturn( + SearchName, + luminaLanguage, + [_content1, _content3], + [_content2], + [] + ); + + IEnumerable result = await _gameDataContentRepository.SearchByName( + SearchName, + searchLanguage, + _fakeCancellationToken + ); + + Assert.Equivalent(new List { _content1, _content2, _content3 }, result, true); } [Fact] @@ -72,7 +82,11 @@ public async Task NoResultsFromQueries_SearchByName_ReturnsEmptyEnumerable() const Lumina_Language luminaLanguage = Lumina_Language.English; GivenSearchNameAndLanguageQueriesWillReturn(SearchName, luminaLanguage, [], [], []); - var result = await gameDataContentRepository.SearchByName(SearchName, searchLanguage, fakeCancellationToken); + IEnumerable result = await _gameDataContentRepository.SearchByName( + SearchName, + searchLanguage, + _fakeCancellationToken + ); Assert.Empty(result); } @@ -87,14 +101,24 @@ public async Task NoResultsFromQueries_SearchByName_ReturnsEmptyEnumerable() Lumina_Language luminaLanguage ) { - GivenSearchNameAndLanguageQueriesWillReturn(SearchName, luminaLanguage, [Content1, Content3], [Content2], []); - - var results = await gameDataContentRepository.SearchByName(SearchName, searchLanguage, fakeCancellationToken); + GivenSearchNameAndLanguageQueriesWillReturn( + SearchName, + luminaLanguage, + [_content1, _content3], + [_content2], + [] + ); + + IEnumerable results = await _gameDataContentRepository.SearchByName( + SearchName, + searchLanguage, + _fakeCancellationToken + ); _ = results.ToList(); // Enumeration required to verify query execution - mockSearchQuery1.Verify(query => query.Execute(SearchName, luminaLanguage)); - mockSearchQuery2.Verify(query => query.Execute(SearchName, luminaLanguage)); - mockSearchQuery3.Verify(query => query.Execute(SearchName, luminaLanguage)); + _mockSearchQuery1.Verify(query => query.Execute(SearchName, luminaLanguage)); + _mockSearchQuery2.Verify(query => query.Execute(SearchName, luminaLanguage)); + _mockSearchQuery3.Verify(query => query.Execute(SearchName, luminaLanguage)); } private void GivenSearchNameAndLanguageQueriesWillReturn( @@ -105,8 +129,8 @@ Lumina_Language luminaLanguage IEnumerable query3Result ) { - mockSearchQuery1.Setup(query => query.Execute(searchName, searchLanguage)).Returns(query1Result); - mockSearchQuery2.Setup(query => query.Execute(searchName, searchLanguage)).Returns(query2Result); - mockSearchQuery3.Setup(query => query.Execute(searchName, searchLanguage)).Returns(query3Result); + _mockSearchQuery1.Setup(query => query.Execute(searchName, searchLanguage)).Returns(query1Result); + _mockSearchQuery2.Setup(query => query.Execute(searchName, searchLanguage)).Returns(query2Result); + _mockSearchQuery3.Setup(query => query.Execute(searchName, searchLanguage)).Returns(query3Result); } } diff --git a/EasyTranslate.Infrastructure/Configuration/InfrastructureModule.cs b/EasyTranslate.Infrastructure/Configuration/InfrastructureModule.cs index d7875fc..5bdd3d4 100644 --- a/EasyTranslate.Infrastructure/Configuration/InfrastructureModule.cs +++ b/EasyTranslate.Infrastructure/Configuration/InfrastructureModule.cs @@ -1,66 +1,66 @@ -namespace EasyTranslate.Infrastructure.Configuration; - -using Domain.Repositories; -using GameData; -using GameData.Adapters; -using GameData.Sheets; +using EasyTranslate.Domain.Repositories; +using EasyTranslate.Infrastructure.GameData; +using EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Infrastructure.GameData.Sheets; using Microsoft.Extensions.DependencyInjection; +namespace EasyTranslate.Infrastructure.Configuration; + public static class InfrastructureModule { public static IServiceCollection AddInfrastructureServices(this IServiceCollection serviceCollection) { return serviceCollection - .AddSingleton() - .AddQueries() - .AddAdapters(); + .AddSingleton() + .AddQueries() + .AddAdapters(); } private static IServiceCollection AddQueries(this IServiceCollection serviceCollection) { return serviceCollection - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>() - .AddSingleton>(); + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>() + .AddSingleton>(); } private static IServiceCollection AddAdapters(this IServiceCollection serviceCollection) { return serviceCollection - .AddSingleton, AchievementAdapter>() - .AddSingleton, ActionAdapter>() - .AddSingleton, BNpcNameAdapter>() - .AddSingleton, CompanionAdapter>() - .AddSingleton, ContentFinderConditionAdapter>() - .AddSingleton, CraftActionAdapter>() - .AddSingleton, EmoteAdapter>() - .AddSingleton, ENpcResidentAdapter>() - .AddSingleton, FateAdapter>() - .AddSingleton, ItemAdapter>() - .AddSingleton, LeveAdapter>() - .AddSingleton, MountAdapter>() - .AddSingleton, OrchestrionAdapter>() - .AddSingleton, PlaceNameAdapter>() - .AddSingleton, QuestAdapter>() - .AddSingleton, StatusAdapter>() - .AddSingleton, TitleAdapter>() - .AddSingleton, TraitAdapter>() - .AddSingleton, WeatherAdapter>(); + .AddSingleton, AchievementAdapter>() + .AddSingleton, ActionAdapter>() + .AddSingleton, BNpcNameAdapter>() + .AddSingleton, CompanionAdapter>() + .AddSingleton, ContentFinderConditionAdapter>() + .AddSingleton, CraftActionAdapter>() + .AddSingleton, EmoteAdapter>() + .AddSingleton, ENpcResidentAdapter>() + .AddSingleton, FateAdapter>() + .AddSingleton, ItemAdapter>() + .AddSingleton, LeveAdapter>() + .AddSingleton, MountAdapter>() + .AddSingleton, OrchestrionAdapter>() + .AddSingleton, PlaceNameAdapter>() + .AddSingleton, QuestAdapter>() + .AddSingleton, StatusAdapter>() + .AddSingleton, TitleAdapter>() + .AddSingleton, TraitAdapter>() + .AddSingleton, WeatherAdapter>(); } } diff --git a/EasyTranslate.Infrastructure/EasyTranslate.Infrastructure.csproj b/EasyTranslate.Infrastructure/EasyTranslate.Infrastructure.csproj index dc04586..af46852 100644 --- a/EasyTranslate.Infrastructure/EasyTranslate.Infrastructure.csproj +++ b/EasyTranslate.Infrastructure/EasyTranslate.Infrastructure.csproj @@ -1,30 +1,29 @@  - - - net8.0 - enable - enable - 12 - + + net8.0 + enable + enable + 12 + - - - + + + - - - + + + - - - $(DalamudLibPath)\Lumina.dll - false - - - $(DalamudLibPath)\Lumina.Excel.dll - false - - + + + $(DalamudLibPath)\Lumina.dll + false + + + $(DalamudLibPath)\Lumina.Excel.dll + false + + diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/AchievementAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/AchievementAdapter.cs index c8c78d7..4d656f0 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/AchievementAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/AchievementAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class AchievementAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs index 8b062fd..cbfe432 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/ActionAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class ActionAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/BNpcNameAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/BNpcNameAdapter.cs index edaad15..35afe1a 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/BNpcNameAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/BNpcNameAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class BNpcNameAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/CompanionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/CompanionAdapter.cs index a9fc41e..e369b7a 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/CompanionAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/CompanionAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class CompanionAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/ContentFinderConditionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/ContentFinderConditionAdapter.cs index 64478c9..f062f4e 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/ContentFinderConditionAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/ContentFinderConditionAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class ContentFinderConditionAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/CraftActionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/CraftActionAdapter.cs index 51e76f1..a56d35e 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/CraftActionAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/CraftActionAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class CraftActionAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/ENpcResidentAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/ENpcResidentAdapter.cs index 0d89352..a91b110 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/ENpcResidentAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/ENpcResidentAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class ENpcResidentAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/EmoteAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/EmoteAdapter.cs index f95a0d5..1d5b2f3 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/EmoteAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/EmoteAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class EmoteAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/FateAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/FateAdapter.cs index 1d2e2e9..6b4553e 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/FateAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/FateAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class FateAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/ItemAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/ItemAdapter.cs index 3467820..3e9ff53 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/ItemAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/ItemAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class ItemAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/LeveAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/LeveAdapter.cs index 552235d..4312ed6 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/LeveAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/LeveAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class LeveAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/MountAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/MountAdapter.cs index 8be0acc..9c638b2 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/MountAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/MountAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class MountAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/OrchestrionAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/OrchestrionAdapter.cs index ff23440..bfa45e5 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/OrchestrionAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/OrchestrionAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class OrchestrionAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/PlaceNameAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/PlaceNameAdapter.cs index d183573..6349a74 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/PlaceNameAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/PlaceNameAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class PlaceNameAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/QuestAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/QuestAdapter.cs index bc29027..b856003 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/QuestAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/QuestAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class QuestAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/StatusAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/StatusAdapter.cs index 5d9431b..494f585 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/StatusAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/StatusAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class StatusAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/TitleAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/TitleAdapter.cs index 4dce6ce..fdcd3ef 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/TitleAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/TitleAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class TitleAdapter : IContentTypeAdapter { @@ -32,7 +31,7 @@ TitleLite japanese private static string FormatTitle(TitleLite title) { return title.Masculine.RawString == title.Feminine.RawString - ? title.Feminine.RawString - : $"{title.Masculine.RawString} / {title.Feminine.RawString}"; + ? title.Feminine.RawString + : $"{title.Masculine.RawString} / {title.Feminine.RawString}"; } } diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/TraitAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/TraitAdapter.cs index 6429dd5..0572337 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/TraitAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/TraitAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class TraitAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/Adapters/WeatherAdapter.cs b/EasyTranslate.Infrastructure/GameData/Adapters/WeatherAdapter.cs index 968d191..940ff60 100644 --- a/EasyTranslate.Infrastructure/GameData/Adapters/WeatherAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/Adapters/WeatherAdapter.cs @@ -1,8 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData.Adapters; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Infrastructure.GameData.Sheets; -using Domain.Entities; -using Sheets; -using ContentType = Domain.Entities.ContentType; +namespace EasyTranslate.Infrastructure.GameData.Adapters; public class WeatherAdapter : IContentTypeAdapter { diff --git a/EasyTranslate.Infrastructure/GameData/GameDataContentRepository.cs b/EasyTranslate.Infrastructure/GameData/GameDataContentRepository.cs index b4d877b..ee221de 100644 --- a/EasyTranslate.Infrastructure/GameData/GameDataContentRepository.cs +++ b/EasyTranslate.Infrastructure/GameData/GameDataContentRepository.cs @@ -1,7 +1,7 @@ -namespace EasyTranslate.Infrastructure.GameData; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Domain.Repositories; -using Domain.Entities; -using Domain.Repositories; +namespace EasyTranslate.Infrastructure.GameData; public class GameDataContentRepository(IEnumerable searhQueries) : IContentRepository { @@ -13,7 +13,7 @@ CancellationToken cancellationToken { return Task.FromResult( searhQueries.SelectMany(searchQuery => searchQuery.Execute(searchName, searchLanguage.ToLuminaLanguage())) - .Distinct() + .Distinct() ); } } diff --git a/EasyTranslate.Infrastructure/GameData/IContentTypeAdapter.cs b/EasyTranslate.Infrastructure/GameData/IContentTypeAdapter.cs index ce249c4..4fbfb02 100644 --- a/EasyTranslate.Infrastructure/GameData/IContentTypeAdapter.cs +++ b/EasyTranslate.Infrastructure/GameData/IContentTypeAdapter.cs @@ -1,8 +1,8 @@ -namespace EasyTranslate.Infrastructure.GameData; - -using Domain.Entities; +using EasyTranslate.Domain.Entities; using Lumina.Excel; +namespace EasyTranslate.Infrastructure.GameData; + public interface IContentTypeAdapter where T : ExcelRow { public Func WhereClause(string searchName); diff --git a/EasyTranslate.Infrastructure/GameData/ISearchByNameQuery.cs b/EasyTranslate.Infrastructure/GameData/ISearchByNameQuery.cs index 3e12e00..4ac71ff 100644 --- a/EasyTranslate.Infrastructure/GameData/ISearchByNameQuery.cs +++ b/EasyTranslate.Infrastructure/GameData/ISearchByNameQuery.cs @@ -1,8 +1,10 @@ -namespace EasyTranslate.Infrastructure.GameData; - -using Domain.Entities; +using EasyTranslate.Domain.Entities; using Language = Lumina.Data.Language; +namespace EasyTranslate.Infrastructure.GameData; + +using Language = Language; + public interface ISearchByNameQuery { IEnumerable Execute(string searchName, Language searchLanguage); diff --git a/EasyTranslate.Infrastructure/GameData/LuminaLanguageExtension.cs b/EasyTranslate.Infrastructure/GameData/LuminaLanguageExtension.cs index 92fa8f4..14861c5 100644 --- a/EasyTranslate.Infrastructure/GameData/LuminaLanguageExtension.cs +++ b/EasyTranslate.Infrastructure/GameData/LuminaLanguageExtension.cs @@ -1,7 +1,9 @@ -namespace EasyTranslate.Infrastructure.GameData; +using System.ComponentModel; +using EasyTranslate.Domain.Entities; -using System.ComponentModel; -using Domain.Entities; +namespace EasyTranslate.Infrastructure.GameData; + +using Language = Language; using Lumina_Language = Lumina.Data.Language; internal static class LuminaLanguageExtension @@ -14,7 +16,8 @@ public static Lumina_Language ToLuminaLanguage(this Language language) Language.French => Lumina_Language.French, Language.German => Lumina_Language.German, Language.Japanese => Lumina_Language.Japanese, - _ => throw new InvalidEnumArgumentException(nameof(language), (int)language, typeof(Language)), + _ => throw new InvalidEnumArgumentException(nameof(language), (int)language, + typeof(Language)) }; } } diff --git a/EasyTranslate.Infrastructure/GameData/SearchByNameQuery.cs b/EasyTranslate.Infrastructure/GameData/SearchByNameQuery.cs index cf3dc02..778d7bf 100644 --- a/EasyTranslate.Infrastructure/GameData/SearchByNameQuery.cs +++ b/EasyTranslate.Infrastructure/GameData/SearchByNameQuery.cs @@ -1,29 +1,28 @@ +using EasyTranslate.Domain.Entities; using ExcelModule = Lumina.Excel.ExcelModule; using ExcelRow = Lumina.Excel.ExcelRow; using Lumina_Language = Lumina.Data.Language; namespace EasyTranslate.Infrastructure.GameData; -using Domain.Entities; - public class SearchByNameQuery(ExcelModule excelModule, IContentTypeAdapter adapter) : ISearchByNameQuery where T : ExcelRow { public IEnumerable Execute(string searchName, Lumina_Language searchLanguage) { return excelModule - .GetSheet(searchLanguage) - ?.Where(adapter.WhereClause(searchName)) - .Take(100) - .Select( - result => - adapter.MapToContent( - excelModule.GetSheet(Lumina_Language.English)!.GetRow(result.RowId)!, - excelModule.GetSheet(Lumina_Language.French)!.GetRow(result.RowId)!, - excelModule.GetSheet(Lumina_Language.German)!.GetRow(result.RowId)!, - excelModule.GetSheet(Lumina_Language.Japanese)!.GetRow(result.RowId)! - ).Invoke(result) - ) + .GetSheet(searchLanguage) + ?.Where(adapter.WhereClause(searchName)) + .Take(100) + .Select( + result => + adapter.MapToContent( + excelModule.GetSheet(Lumina_Language.English)!.GetRow(result.RowId)!, + excelModule.GetSheet(Lumina_Language.French)!.GetRow(result.RowId)!, + excelModule.GetSheet(Lumina_Language.German)!.GetRow(result.RowId)!, + excelModule.GetSheet(Lumina_Language.Japanese)!.GetRow(result.RowId)! + ).Invoke(result) + ) ?? []; } } diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/AchievementLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/AchievementLite.cs index ecdc45c..c010efc 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/AchievementLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/AchievementLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Achievement")] // ReSharper disable once ClassNeverInstantiated.Global public class AchievementLite : ExcelRow { public SeString Name { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/ActionLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/ActionLite.cs index 2e51f64..2761397 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/ActionLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/ActionLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Action")] // ReSharper disable once ClassNeverInstantiated.Global public class ActionLite : ExcelRow { public SeString Name { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/BNpcNameLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/BNpcNameLite.cs index f246f83..3c38d96 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/BNpcNameLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/BNpcNameLite.cs @@ -1,17 +1,16 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("BNpcName")] // ReSharper disable once ClassNeverInstantiated.Global public class BNpcNameLite : ExcelRow { public SeString Singular { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Singular = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/CompanionLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/CompanionLite.cs index 2ea844c..2ea12e0 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/CompanionLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/CompanionLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Companion")] // ReSharper disable once ClassNeverInstantiated.Global public class CompanionLite : ExcelRow { public SeString Singular { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Singular = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/ContentFinderConditionLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/ContentFinderConditionLite.cs index a88ca64..4dcd0a7 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/ContentFinderConditionLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/ContentFinderConditionLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("ContentFinderCondition")] // ReSharper disable once ClassNeverInstantiated.Global public class ContentFinderConditionLite : ExcelRow { public SeString Name { get; set; } = null!; + public LazyRow ContentType { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/ContentTypeLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/ContentTypeLite.cs index 891d70e..5f7c202 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/ContentTypeLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/ContentTypeLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("ContentType")] // ReSharper disable once ClassNeverInstantiated.Global public class ContentTypeLite : ExcelRow { public SeString Name { get; private set; } = null!; + public uint Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/CraftActionLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/CraftActionLite.cs index 640768f..a646466 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/CraftActionLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/CraftActionLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("CraftAction")] // ReSharper disable once ClassNeverInstantiated.Global public class CraftActionLite : ExcelRow { public SeString Name { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/ENpcResidentLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/ENpcResidentLite.cs index 867d07a..24a2f43 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/ENpcResidentLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/ENpcResidentLite.cs @@ -1,17 +1,16 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("ENpcResident")] // ReSharper disable once ClassNeverInstantiated.Global public class ENpcResidentLite : ExcelRow { public SeString Singular { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Singular = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/EmoteLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/EmoteLite.cs index 82bece0..2b496c9 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/EmoteLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/EmoteLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Emote")] // ReSharper disable once ClassNeverInstantiated.Global public class EmoteLite : ExcelRow { public SeString Name { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/FateLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/FateLite.cs index d65c7f1..e558f23 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/FateLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/FateLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Fate")] // ReSharper disable once ClassNeverInstantiated.Global public class FateLite : ExcelRow { public SeString Name { get; private set; } = null!; + public uint Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/ItemLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/ItemLite.cs index fa8ce96..afb683c 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/ItemLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/ItemLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Item")] // ReSharper disable once ClassNeverInstantiated.Global public class ItemLite : ExcelRow { public SeString Name { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(12)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/LeveLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/LeveLite.cs index 3f2e8b4..a628a9c 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/LeveLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/LeveLite.cs @@ -1,17 +1,16 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Leve")] // ReSharper disable once ClassNeverInstantiated.Global public class LeveLite : ExcelRow { public SeString Name { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/MountLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/MountLite.cs index 74d2c63..56047a4 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/MountLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/MountLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Mount")] // ReSharper disable once ClassNeverInstantiated.Global public class MountLite : ExcelRow { public SeString Singular { get; private set; } = null!; + public ushort Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Singular = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/OrchestrionLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/OrchestrionLite.cs index 74b09fa..a97a1a6 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/OrchestrionLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/OrchestrionLite.cs @@ -1,17 +1,16 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Orchestrion")] // ReSharper disable once ClassNeverInstantiated.Global public class OrchestrionLite : ExcelRow { public SeString Name { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/PlaceNameLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/PlaceNameLite.cs index 659b17a..22ce955 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/PlaceNameLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/PlaceNameLite.cs @@ -1,17 +1,16 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("PlaceName")] // ReSharper disable once ClassNeverInstantiated.Global public class PlaceNameLite : ExcelRow { public SeString Name { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/QuestLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/QuestLite.cs index fe5dc82..59d278d 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/QuestLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/QuestLite.cs @@ -1,17 +1,16 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Quest")] // ReSharper disable once ClassNeverInstantiated.Global public class QuestLite : ExcelRow { public SeString Name { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/StatusLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/StatusLite.cs index 368cb8b..ac0f1e1 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/StatusLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/StatusLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Status")] // ReSharper disable once ClassNeverInstantiated.Global public class StatusLite : ExcelRow { public SeString Name { get; private set; } = null!; + public uint Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/TitleLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/TitleLite.cs index 4857f2b..44d859c 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/TitleLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/TitleLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Title")] // ReSharper disable once ClassNeverInstantiated.Global public class TitleLite : ExcelRow { public SeString Masculine { get; private set; } = null!; + public SeString Feminine { get; private set; } = null!; - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Masculine = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/TraitLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/TraitLite.cs index bfbcf3a..fe88435 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/TraitLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/TraitLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Trait")] // ReSharper disable once ClassNeverInstantiated.Global public class TraitLite : ExcelRow { public SeString Name { get; private set; } = null!; + public int Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Infrastructure/GameData/Sheets/WeatherLite.cs b/EasyTranslate.Infrastructure/GameData/Sheets/WeatherLite.cs index 9c14500..c1b440f 100644 --- a/EasyTranslate.Infrastructure/GameData/Sheets/WeatherLite.cs +++ b/EasyTranslate.Infrastructure/GameData/Sheets/WeatherLite.cs @@ -1,18 +1,18 @@ -namespace EasyTranslate.Infrastructure.GameData.Sheets; - -using Lumina; -using Lumina.Data; +using Lumina.Data; using Lumina.Excel; using Lumina.Text; +namespace EasyTranslate.Infrastructure.GameData.Sheets; + [Sheet("Weather")] // ReSharper disable once ClassNeverInstantiated.Global public class WeatherLite : ExcelRow { public SeString Name { get; private set; } = null!; + public int Icon { get; private set; } - public override void PopulateData(RowParser parser, GameData gameData, Language language) + public override void PopulateData(RowParser parser, Lumina.GameData gameData, Language language) { base.PopulateData(parser, gameData, language); Name = parser.ReadOffset(0)!; diff --git a/EasyTranslate.Standalone/EasyTranslate.Standalone.csproj b/EasyTranslate.Standalone/EasyTranslate.Standalone.csproj index 4b4f4b1..3781a19 100644 --- a/EasyTranslate.Standalone/EasyTranslate.Standalone.csproj +++ b/EasyTranslate.Standalone/EasyTranslate.Standalone.csproj @@ -1,31 +1,30 @@  - - - Exe - net8.0 - enable - enable - + + Exe + net8.0 + enable + enable + - - - - + + + + - - - + + + - - - $(DalamudLibPath)\Lumina.dll - true - - - $(DalamudLibPath)\Lumina.Excel.dll - true - - + + + $(DalamudLibPath)\Lumina.dll + true + + + $(DalamudLibPath)\Lumina.Excel.dll + true + + diff --git a/EasyTranslate.Standalone/Program.cs b/EasyTranslate.Standalone/Program.cs index 96cb2fa..d6e983d 100644 --- a/EasyTranslate.Standalone/Program.cs +++ b/EasyTranslate.Standalone/Program.cs @@ -11,7 +11,7 @@ Console.OutputEncoding = Encoding.UTF8; -var gameDataPath = Environment.GetEnvironmentVariable("GAME_DATA_PATH"); +string? gameDataPath = Environment.GetEnvironmentVariable("GAME_DATA_PATH"); if (gameDataPath is null) { Console.WriteLine( @@ -20,26 +20,27 @@ return; } -var lumina = new GameData(gameDataPath); +GameData lumina = new(gameDataPath); -var serviceCollection = new ServiceCollection() - .AddSingleton(lumina.Excel) - .AddInfrastructureServices() - .AddUseCaseServices() - .BuildServiceProvider(); -var searchByName = serviceCollection.GetService()!; +ServiceProvider serviceCollection = new ServiceCollection() + .AddSingleton(lumina.Excel) + .AddInfrastructureServices() + .AddUseCaseServices() + .BuildServiceProvider(); +SearchContentByNameUseCase searchByName = serviceCollection.GetService()!; -var serializerOptions = new JsonSerializerOptions +JsonSerializerOptions serializerOptions = new() { - WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, - Converters = { new JsonStringEnumConverter() }, + WriteIndented = true, + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + Converters = { new JsonStringEnumConverter() } }; while (true) { Console.Write("Search anything: "); - var search = Console.ReadLine() ?? ""; - var results = await searchByName.Execute(search, Language.English); + string search = Console.ReadLine() ?? ""; + IEnumerable results = await searchByName.Execute(search, Language.English); Console.WriteLine(JsonSerializer.Serialize(results, serializerOptions)); } diff --git a/EasyTranslate.UseCase.Tests/EasyTranslate.UseCase.Tests.csproj b/EasyTranslate.UseCase.Tests/EasyTranslate.UseCase.Tests.csproj index 53a3842..4c46435 100644 --- a/EasyTranslate.UseCase.Tests/EasyTranslate.UseCase.Tests.csproj +++ b/EasyTranslate.UseCase.Tests/EasyTranslate.UseCase.Tests.csproj @@ -1,30 +1,30 @@ - - net8.0 - enable - enable + + net8.0 + enable + enable - false - true - + false + true + - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - + + + - - - + + + diff --git a/EasyTranslate.UseCase.Tests/SearchContentByNameUseCaseTest.cs b/EasyTranslate.UseCase.Tests/SearchContentByNameUseCaseTest.cs index fd0b6d2..8d8e76e 100644 --- a/EasyTranslate.UseCase.Tests/SearchContentByNameUseCaseTest.cs +++ b/EasyTranslate.UseCase.Tests/SearchContentByNameUseCaseTest.cs @@ -1,15 +1,15 @@ -namespace EasyTranslate.UseCase.Tests; - -using Domain.Comparers; -using Domain.Entities; -using Domain.Repositories; +using EasyTranslate.Domain.Comparers; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Domain.Repositories; using Moq; +namespace EasyTranslate.UseCase.Tests; + public class SearchContentByNameUseCaseTest { - private static readonly Content Content1 = new(ContentType.Item, 25204, "Popoto", "Popoto", "Toffel", "ポポト"); + private static readonly Content s_content1 = new(ContentType.Item, 25204, "Popoto", "Popoto", "Toffel", "ポポト"); - private static readonly Content Content2 = new( + private static readonly Content s_content2 = new( ContentType.Item, 27455, "Popoto Set", @@ -17,7 +17,7 @@ public class SearchContentByNameUseCaseTest "Toffel-Knollen", "ポポトの種芋"); - private static readonly Content Content3 = new( + private static readonly Content s_content3 = new( ContentType.Emote, 64371, "Popoto Step", @@ -25,14 +25,14 @@ public class SearchContentByNameUseCaseTest "Toffel-Tanz", "ポポトステップ"); - private readonly Mock mockContentRepository; - private readonly SearchContentByNameUseCase searchContentByNameUseCase; + private readonly Mock _mockContentRepository; + private readonly SearchContentByNameUseCase _searchContentByNameUseCase; public SearchContentByNameUseCaseTest() { - mockContentRepository = new Mock(); - searchContentByNameUseCase = new SearchContentByNameUseCase( - mockContentRepository.Object, + _mockContentRepository = new Mock(); + _searchContentByNameUseCase = new SearchContentByNameUseCase( + _mockContentRepository.Object, new LongestCommonSubstringComparer() ); } @@ -47,22 +47,26 @@ public static TheoryData SearchLanguages() public async Task SearchQueryEmpty_Execute_ReturnsEmptyEnumerable(Language searchLanguage) { const string searchQuery = ""; - var cancellationToken = CancellationToken.None; + CancellationToken cancellationToken = CancellationToken.None; - var result = await searchContentByNameUseCase.Execute(searchQuery, searchLanguage, cancellationToken); + IEnumerable result = await _searchContentByNameUseCase.Execute( + searchQuery, + searchLanguage, + cancellationToken + ); Assert.Empty(result); - mockContentRepository.VerifyNoOtherCalls(); + _mockContentRepository.VerifyNoOtherCalls(); } public static TheoryData SearchQueries() { return new TheoryData { - { "popoto", Language.English, [Content1, Content2, Content3] }, - { "popoto", Language.French, [Content1, Content3, Content2] }, - { "toffel", Language.German, [Content1, Content3, Content2] }, - { "ポポト", Language.Japanese, [Content1, Content2, Content3] }, + { "popoto", Language.English, [s_content1, s_content2, s_content3] }, + { "popoto", Language.French, [s_content1, s_content3, s_content2] }, + { "toffel", Language.German, [s_content1, s_content3, s_content2] }, + { "ポポト", Language.Japanese, [s_content1, s_content2, s_content3] } }; } @@ -74,14 +78,18 @@ public async Task SearchQueryEmpty_Execute_ReturnsEmptyEnumerable(Language searc Content[] expected ) { - var cancellationToken = CancellationToken.None; - mockContentRepository.Setup( - repository => repository.SearchByName(searchQuery, searchLanguage, cancellationToken) - .Result - ) - .Returns([Content3, Content1, Content2]); - - var result = await searchContentByNameUseCase.Execute(searchQuery, searchLanguage, cancellationToken); + CancellationToken cancellationToken = CancellationToken.None; + _mockContentRepository.Setup( + repository => repository.SearchByName(searchQuery, searchLanguage, cancellationToken) + .Result + ) + .Returns([s_content3, s_content1, s_content2]); + + IEnumerable result = await _searchContentByNameUseCase.Execute( + searchQuery, + searchLanguage, + cancellationToken + ); Assert.Equal(expected, result); } @@ -91,27 +99,27 @@ public async Task OverOneHundreadSearchResults_Execute_ReturnsTopOneHundreadResu { const string searchQuery = "popoto"; const Language searchLanguage = Language.English; - var cancellationToken = CancellationToken.None; - var searchResults = GenerateALotOfContent().ToList(); - mockContentRepository.Setup( - repository => repository.SearchByName(searchQuery, searchLanguage, cancellationToken) - .Result) - .Returns(searchResults); - - var result = await searchContentByNameUseCase.Execute(searchQuery, searchLanguage, cancellationToken); + CancellationToken cancellationToken = CancellationToken.None; + List searchResults = GenerateALotOfContent().ToList(); + _mockContentRepository.Setup( + repository => repository.SearchByName(searchQuery, searchLanguage, cancellationToken) + .Result) + .Returns(searchResults); + + IEnumerable result = await _searchContentByNameUseCase.Execute( + searchQuery, + searchLanguage, + cancellationToken + ); Assert.Equal(searchResults.Take(100), result); } private static IEnumerable GenerateALotOfContent() { - var baseContent = Content1; + Content baseContent = s_content1; return Enumerable.Range(0, 101) - .Select( - i => baseContent with - { - EnglishName = baseContent.EnglishName + new string('o', i), - }); + .Select(i => baseContent with { EnglishName = baseContent.EnglishName + new string('o', i) }); } } diff --git a/EasyTranslate.UseCase/Configuration/UseCaseModule.cs b/EasyTranslate.UseCase/Configuration/UseCaseModule.cs index 76d965a..7e00053 100644 --- a/EasyTranslate.UseCase/Configuration/UseCaseModule.cs +++ b/EasyTranslate.UseCase/Configuration/UseCaseModule.cs @@ -1,13 +1,13 @@ -namespace EasyTranslate.UseCase.Configuration; - -using Domain.Comparers; +using EasyTranslate.Domain.Comparers; using Microsoft.Extensions.DependencyInjection; +namespace EasyTranslate.UseCase.Configuration; + public static class UseCaseModule { public static IServiceCollection AddUseCaseServices(this IServiceCollection serviceCollection) { return serviceCollection.AddSingleton() - .AddSingleton(); + .AddSingleton(); } } diff --git a/EasyTranslate.UseCase/EasyTranslate.UseCase.csproj b/EasyTranslate.UseCase/EasyTranslate.UseCase.csproj index 3584b60..137f788 100644 --- a/EasyTranslate.UseCase/EasyTranslate.UseCase.csproj +++ b/EasyTranslate.UseCase/EasyTranslate.UseCase.csproj @@ -1,18 +1,18 @@  - - net8.0 - enable - enable - 12 - + + net8.0 + enable + enable + 12 + - - - + + + - - - + + + diff --git a/EasyTranslate.UseCase/SearchContentByNameUseCase.cs b/EasyTranslate.UseCase/SearchContentByNameUseCase.cs index c30d849..8f98304 100644 --- a/EasyTranslate.UseCase/SearchContentByNameUseCase.cs +++ b/EasyTranslate.UseCase/SearchContentByNameUseCase.cs @@ -1,8 +1,8 @@ -namespace EasyTranslate.UseCase; +using EasyTranslate.Domain.Comparers; +using EasyTranslate.Domain.Entities; +using EasyTranslate.Domain.Repositories; -using Domain.Comparers; -using Domain.Entities; -using Domain.Repositories; +namespace EasyTranslate.UseCase; public class SearchContentByNameUseCase( IContentRepository contentRepository, @@ -21,12 +21,18 @@ IStringSimilarityComparer nameComparer return []; } - var searchResults = await contentRepository.SearchByName(searchQuery, searchLanguage, cancellationToken); + IEnumerable searchResults = await contentRepository.SearchByName( + searchQuery, + searchLanguage, + cancellationToken + ); + return searchResults.OrderBy( - content => nameComparer.Compare( - content.NameForLanguage(searchLanguage).ToUpperInvariant(), - searchQuery.ToUpperInvariant()) - ) - .Take(100); + content => nameComparer.Compare( + content.NameForLanguage(searchLanguage).ToUpperInvariant(), + searchQuery.ToUpperInvariant() + ) + ) + .Take(100); } } diff --git a/EasyTranslate.sln.DotSettings b/EasyTranslate.sln.DotSettings deleted file mode 100644 index d1f6379..0000000 --- a/EasyTranslate.sln.DotSettings +++ /dev/null @@ -1,35 +0,0 @@ - - Required - Required - Required - public private protected internal new abstract virtual readonly async override static extern unsafe volatile sealed file required - Remove - 0 - True - True - True - True - 0 - TOGETHER_SAME_LINE - True - True - NEVER - ALWAYS - NEVER - False - False - True - True - CHOP_IF_LONG - True - True - True - CHOP_IF_LONG - CHOP_ALWAYS - CHOP_IF_LONG - True - True - True - True - True - True \ No newline at end of file