mirror of
https://github.com/BeyondDimension/SteamTools.git
synced 2026-10-27 21:43:14 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0509d2b843 | ||
|
|
f0a14e332d | ||
|
|
948016c84f | ||
|
|
98da730c18 | ||
|
|
ab6bfd45b7 | ||
|
|
8abfc81ba2 | ||
|
|
d4d6c2fb51 | ||
|
|
8da01ac3dd | ||
|
|
2ab26f7848 | ||
|
|
d646eacda1 | ||
|
|
fb029f729b | ||
|
|
5ef6663269 | ||
|
|
5c86b53000 | ||
|
|
efb6adbd9b | ||
|
|
209202b5cf | ||
|
|
c0a081e226 |
-242
@@ -1,242 +0,0 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*.{sh}]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
# Matches multiple files with brace expansion notation
|
||||
# Set default charset
|
||||
[*]
|
||||
charset = utf-8
|
||||
|
||||
# Tab indentation (no size specified)
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
|
||||
[*.{js,json,xaml,axaml,xml,resx,resw,csproj,wapproj,appxmanifest,.props}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# c# 文件
|
||||
[*.cs]
|
||||
|
||||
#### Core EditorConfig 选项 ####
|
||||
|
||||
# 缩进和间距
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
tab_width = 4
|
||||
|
||||
# 新行首选项
|
||||
end_of_line = crlf
|
||||
insert_final_newline = false
|
||||
|
||||
#### .NET 编码约定 ####
|
||||
|
||||
# 组织 Using
|
||||
dotnet_separate_import_directive_groups = false
|
||||
dotnet_sort_system_directives_first = false
|
||||
file_header_template = unset
|
||||
|
||||
# this. 和 Me. 首选项
|
||||
dotnet_style_qualification_for_event = false:suggestion
|
||||
dotnet_style_qualification_for_field = false
|
||||
dotnet_style_qualification_for_method = false:suggestion
|
||||
dotnet_style_qualification_for_property = false:suggestion
|
||||
|
||||
# 语言关键字与 bcl 类型首选项
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
||||
dotnet_style_predefined_type_for_member_access = true:suggestion
|
||||
|
||||
# 括号首选项
|
||||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
|
||||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
|
||||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
|
||||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
|
||||
|
||||
# 修饰符首选项
|
||||
dotnet_style_require_accessibility_modifiers = never
|
||||
|
||||
# 表达式级首选项
|
||||
dotnet_style_coalesce_expression = true
|
||||
dotnet_style_collection_initializer = true
|
||||
dotnet_style_explicit_tuple_names = true
|
||||
dotnet_style_null_propagation = true
|
||||
dotnet_style_object_initializer = true
|
||||
dotnet_style_operator_placement_when_wrapping = beginning_of_line
|
||||
dotnet_style_prefer_auto_properties = true
|
||||
dotnet_style_prefer_compound_assignment = true
|
||||
dotnet_style_prefer_conditional_expression_over_assignment = true
|
||||
dotnet_style_prefer_conditional_expression_over_return = true
|
||||
dotnet_style_prefer_inferred_anonymous_type_member_names = true
|
||||
dotnet_style_prefer_inferred_tuple_names = true
|
||||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true
|
||||
dotnet_style_prefer_simplified_boolean_expressions = true
|
||||
dotnet_style_prefer_simplified_interpolation = true
|
||||
|
||||
# 字段首选项
|
||||
dotnet_style_readonly_field = true
|
||||
|
||||
# 参数首选项
|
||||
dotnet_code_quality_unused_parameters = all
|
||||
|
||||
# 禁止显示首选项
|
||||
dotnet_remove_unnecessary_suppression_exclusions = none
|
||||
|
||||
#### c# 编码约定 ####
|
||||
|
||||
# var 首选项
|
||||
csharp_style_var_elsewhere = true
|
||||
csharp_style_var_for_built_in_types = true
|
||||
csharp_style_var_when_type_is_apparent = true
|
||||
|
||||
# Expression-bodied 成员
|
||||
csharp_style_expression_bodied_accessors = true
|
||||
csharp_style_expression_bodied_constructors = false
|
||||
csharp_style_expression_bodied_indexers = true
|
||||
csharp_style_expression_bodied_lambdas = true
|
||||
csharp_style_expression_bodied_local_functions = false
|
||||
csharp_style_expression_bodied_methods = false
|
||||
csharp_style_expression_bodied_operators = false
|
||||
csharp_style_expression_bodied_properties = true
|
||||
|
||||
# 模式匹配首选项
|
||||
csharp_style_pattern_matching_over_as_with_null_check = true
|
||||
csharp_style_pattern_matching_over_is_with_cast_check = true
|
||||
csharp_style_prefer_not_pattern = true
|
||||
csharp_style_prefer_pattern_matching = true
|
||||
csharp_style_prefer_switch_expression = true
|
||||
|
||||
# Null 检查首选项
|
||||
csharp_style_conditional_delegate_call = true
|
||||
|
||||
# 修饰符首选项
|
||||
csharp_prefer_static_local_function = true
|
||||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
|
||||
|
||||
# 代码块首选项
|
||||
csharp_prefer_braces = false
|
||||
csharp_prefer_simple_using_statement = true
|
||||
|
||||
# 表达式级首选项
|
||||
csharp_prefer_simple_default_expression = true
|
||||
csharp_style_deconstructed_variable_declaration = true
|
||||
csharp_style_implicit_object_creation_when_type_is_apparent = true
|
||||
csharp_style_inlined_variable_declaration = true
|
||||
csharp_style_pattern_local_over_anonymous_function = true
|
||||
csharp_style_prefer_index_operator = true
|
||||
csharp_style_prefer_range_operator = true
|
||||
csharp_style_throw_expression = true
|
||||
csharp_style_unused_value_assignment_preference = discard_variable
|
||||
csharp_style_unused_value_expression_statement_preference = discard_variable
|
||||
|
||||
# "using" 指令首选项
|
||||
csharp_using_directive_placement = outside_namespace
|
||||
|
||||
#### C# 格式规则 ####
|
||||
|
||||
# 新行首选项
|
||||
csharp_new_line_before_catch = true
|
||||
csharp_new_line_before_else = true
|
||||
csharp_new_line_before_finally = true
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_open_brace = all
|
||||
csharp_new_line_between_query_expression_clauses = true
|
||||
|
||||
# 缩进首选项
|
||||
csharp_indent_block_contents = true
|
||||
csharp_indent_braces = false
|
||||
csharp_indent_case_contents = true
|
||||
csharp_indent_case_contents_when_block = true
|
||||
csharp_indent_labels = one_less_than_current
|
||||
csharp_indent_switch_labels = true
|
||||
|
||||
# 空格键首选项
|
||||
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 = false
|
||||
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_method_declaration_name_and_open_parenthesis = false
|
||||
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
||||
csharp_space_between_parentheses = false
|
||||
csharp_space_between_square_brackets = false
|
||||
|
||||
# 包装首选项
|
||||
csharp_preserve_single_line_blocks = true
|
||||
csharp_preserve_single_line_statements = true
|
||||
|
||||
#### 命名样式 ####
|
||||
|
||||
# 命名规则
|
||||
|
||||
dotnet_naming_rule.interface_should_be_以_i_开始.severity = suggestion
|
||||
dotnet_naming_rule.interface_should_be_以_i_开始.symbols = interface
|
||||
dotnet_naming_rule.interface_should_be_以_i_开始.style = 以_i_开始
|
||||
|
||||
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.severity = suggestion
|
||||
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.symbols = 类型
|
||||
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
|
||||
|
||||
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.severity = suggestion
|
||||
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.symbols = 非字段成员
|
||||
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
|
||||
|
||||
# 符号规范
|
||||
|
||||
dotnet_naming_symbols.interface.applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum
|
||||
dotnet_naming_symbols.类型.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.类型.required_modifiers =
|
||||
|
||||
dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method
|
||||
dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.非字段成员.required_modifiers =
|
||||
|
||||
# 命名样式
|
||||
|
||||
dotnet_naming_style.帕斯卡拼写法.required_prefix =
|
||||
dotnet_naming_style.帕斯卡拼写法.required_suffix =
|
||||
dotnet_naming_style.帕斯卡拼写法.word_separator =
|
||||
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_style.以_i_开始.required_prefix = I
|
||||
dotnet_naming_style.以_i_开始.required_suffix =
|
||||
dotnet_naming_style.以_i_开始.word_separator =
|
||||
dotnet_naming_style.以_i_开始.capitalization = pascal_case
|
||||
|
||||
# IDE0010: 添加缺失的事例
|
||||
dotnet_diagnostic.IDE0010.severity = none
|
||||
|
||||
# IDE0011: 添加大括号
|
||||
dotnet_diagnostic.IDE0011.severity = none
|
||||
|
||||
# IDE0040: 添加可访问性修饰符
|
||||
dotnet_diagnostic.IDE0040.severity = none
|
||||
|
||||
# IDE0130: 命名空间与文件夹结构不匹配
|
||||
dotnet_style_namespace_match_folder = false
|
||||
|
||||
# IDE0130: 命名空间与文件夹结构不匹配
|
||||
dotnet_diagnostic.IDE0130.severity = none
|
||||
@@ -2,7 +2,6 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
*.sh text eol=lf
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
# github: rmbadmin
|
||||
ko_fi: rmbgame
|
||||
patreon: rmbgame
|
||||
|
||||
# "https://paypal.me/rmbgame"
|
||||
custom: ["https://afdian.net/@rmbgame"]
|
||||
@@ -1,40 +0,0 @@
|
||||
---
|
||||
name: "Bug Report \U0001F41B"
|
||||
about: 创建 Bug 报告以帮助我们改进 / Create a report to help us improve
|
||||
title: "\U0001F41B[BUG] "
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
### 🐛 描述(Description)
|
||||
|
||||
<!--
|
||||
详细地描述 bug,让大家都能理解
|
||||
Describe the bug in detail so that everyone can understand it
|
||||
-->
|
||||
|
||||
### 📷 复现步骤(Steps to Reproduce)
|
||||
|
||||
<!--
|
||||
清晰描述复现步骤,让别人也能看到问题
|
||||
Clearly describe the reproduction steps so that others can see the problem
|
||||
-->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### 📄 [异常/日志]信息([Exception/Log] Information)
|
||||
|
||||
### 🚑 基本信息(Basic Information)
|
||||
|
||||
- 程序版本(Program Version):
|
||||
- 系统版本号(OS Version): <!-- example Windows 10.19042.844(see winver) / macOS Monterey 12 / Ubuntu 20.04.2 LTS -->
|
||||
- 是否为应用商店版本(Whether it is a Store version): <!--是(Yes)/否(No)-->
|
||||
|
||||
### 🖼 截图(Screenshots)
|
||||
|
||||
<!--
|
||||
截图可以贴在这里
|
||||
Screenshots can be posted here
|
||||
-->
|
||||
@@ -1,29 +0,0 @@
|
||||
---
|
||||
name: "Feature request \U0001F451"
|
||||
about: 对程序的需求或建议 / Suggest an idea for program
|
||||
title: "\U0001F451[Enhancement] "
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
### 🥰 需求描述(Description)
|
||||
|
||||
<!--
|
||||
详细地描述需求,让大家都能理解
|
||||
Describe the requirements in detail so that everyone can understand them
|
||||
-->
|
||||
|
||||
### 🧐 解决方案(Solution)
|
||||
|
||||
<!--
|
||||
如果你有解决方案,在这里清晰地阐述
|
||||
If you have a solution, explain it clearly here
|
||||
-->
|
||||
|
||||
### 🚑 其他信息(Other Information)
|
||||
|
||||
<!--
|
||||
如截图等其他信息可以贴在这里
|
||||
Other information such as screenshots can be posted here
|
||||
-->
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
name: Milestone
|
||||
about: Issue a summary of the fixes recorded for the next release
|
||||
title: "vTBD Milestone"
|
||||
labels: documentation
|
||||
assignees: rmbadmin, AigioL, Mossimos
|
||||
|
||||
---
|
||||
|
||||
## New release previous preparations | 发行新版本前准备工作
|
||||
- [ ] Translate resx | 翻译 resx
|
||||
- [ ] Compile msixupload package | 编译 msixupload 包
|
||||
- [ ] Github release / Gitee release | 在 Github 与 Gitee 上发布
|
||||
- [ ] Upload network disk | 上传网盘
|
||||
- [ ] Update the official website | 更新官网
|
||||
- [ ] Server publishing tool enable new version | 服务器发布工具启用新版本
|
||||
- [ ] ~~Enable MS store channel new version notification after waiting for MS store approval | 等待微软商店审核完成后启用该渠道新版本通知~~
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: "Question \U0001F9D0"
|
||||
about: 对程序使用的疑问或需要帮助 / Questions about the use of the program or need help
|
||||
title: "\U0001F9D0[Question] "
|
||||
labels: question
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
### 🧐 问题描述(Description)
|
||||
|
||||
<!--
|
||||
详细地描述需求,让大家都能理解
|
||||
Describe the requirements in detail so that everyone can understand them
|
||||
-->
|
||||
|
||||
### 🚑 其他信息(Other Information)
|
||||
|
||||
<!--
|
||||
如截图等其他信息可以贴在这里
|
||||
Other information such as screenshots can be posted here
|
||||
-->
|
||||
|
||||
- 程序版本(Program Version):
|
||||
- 系统版本号(OS Version): <!-- example Windows 10.19042.844(see winver) / macOS Monterey 12 / Ubuntu 20.04.2 LTS -->
|
||||
- 是否为应用商店版本(Whether it is a Store version): <!--是(Yes)/否(No)-->
|
||||
@@ -1,37 +0,0 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
time: "07:00"
|
||||
timezone: "Asia/Shanghai"
|
||||
labels:
|
||||
- "automatic"
|
||||
open-pull-requests-limit: 99
|
||||
- package-ecosystem: "nuget"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
time: "07:15"
|
||||
timezone: "Asia/Shanghai"
|
||||
labels:
|
||||
- "automatic"
|
||||
- "dependencies"
|
||||
- ".NET"
|
||||
open-pull-requests-limit: 99
|
||||
- package-ecosystem: "gitsubmodule"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
time: "07:30"
|
||||
timezone: "Asia/Shanghai"
|
||||
labels:
|
||||
- "automatic"
|
||||
- "dependencies"
|
||||
open-pull-requests-limit: 99
|
||||
@@ -1,163 +0,0 @@
|
||||
name: Build
|
||||
|
||||
env:
|
||||
ProjectName: Steam++
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main, develop ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration: [ Debug, Release ]
|
||||
os: [ windows-latest, macOS-latest, ubuntu-latest ]
|
||||
# rid: [ fd-win-x64, win-x64, osx-x64, linux-x64,linux-arm64 ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
- name: Install macOS SDK(macOS)
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: sudo dotnet workload install macos
|
||||
|
||||
- name: Install macOS SDK(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install macos
|
||||
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
|
||||
- name: Checkout Credentials repository
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: SteamTools-Team/Credentials
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
path: ./Credentials
|
||||
|
||||
- name: Copy pfx and snk To Source
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
run: |
|
||||
copy ".\Credentials\*.pfx" .
|
||||
copy ".\Credentials\*.snk" .
|
||||
dir *.pfx -s
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.sln
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.sln
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Linux.sln
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Linux.slnf
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Mac.sln
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Mac.slnf
|
||||
|
||||
- name: Build AvaloniaApp ${{ matrix.configuration }}
|
||||
run: dotnet build ./src/ST.Client.Desktop.Avalonia.App/ST.Client.Avalonia.App.csproj -c "${{ matrix.configuration }}"
|
||||
|
||||
- name: Run CommonUnit
|
||||
run: dotnet test ./tests/Common.UnitTest/Common.UnitTest.csproj -c "${{ matrix.configuration }}"
|
||||
|
||||
- name: Run ST.Client.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.UnitTest/ST.Client.UnitTest.csproj -c "${{ matrix.configuration }}"
|
||||
|
||||
- name: Run ST.Client.Desktop.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj -c "${{ matrix.configuration }}"
|
||||
|
||||
# - name: dotnet ST.Client.Desktop.UnitTest test
|
||||
# if: matrix.os != 'windows-latest'
|
||||
# run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj
|
||||
|
||||
- name: Get Short CommitId
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
shell: pwsh
|
||||
run: Write-Output "GITHUB_SHA_SHORT=$(${env:GITHUB_SHA}.Substring(0,7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Build ST.Tools.Publish Release
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
run: dotnet build ./src/ST.Tools.Publish/ST.Tools.Publish.csproj -c Release
|
||||
|
||||
- name: Build ${{ matrix.configuration }} & Package All
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
shell: pwsh
|
||||
run: .\packaging\build.ps1 -configuration ${{ matrix.configuration }}
|
||||
|
||||
- name: All Package
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
$dev = $(if ('${{ matrix.configuration }}' -eq 'Debug') {"-dev"})
|
||||
$pexe=".\src\ST.Tools.Publish\bin\Release\net6.0\p.exe"
|
||||
& $pexe hp $dev
|
||||
& $pexe sta $dev
|
||||
& $pexe 7z -buildpackage ${env:GITHUB_SHA_SHORT} $dev
|
||||
|
||||
- name: Upload fd-win-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x64_fde_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x64_fde_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload win-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload macos-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_macos_x64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_macos_x64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload macos-arm64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_macos_arm64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_macos_arm64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload linux-x64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_linux_x64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_linux_x64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload linux-arm64 App ${{ matrix.configuration }}
|
||||
continue-on-error: true
|
||||
if: ${{ matrix.os == 'windows-latest' && !startsWith(github.ref, 'refs/tags/') && github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_linux_arm64_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_linux_arm64_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
@@ -1,331 +0,0 @@
|
||||
name: Publish
|
||||
|
||||
env:
|
||||
ProjectName: Steam++
|
||||
Configuration: Release
|
||||
PublishFilePath: C:\PublishFiles
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
Publish:
|
||||
name: Publish
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ windows-latest ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
- name: Install macOS SDK(macOS)
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: sudo dotnet workload install macos
|
||||
|
||||
- name: Install macOS SDK(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install macos
|
||||
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
|
||||
- name: Shell Version
|
||||
run: sh --version
|
||||
|
||||
- name: Checkout NSIS-Build repository
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: SteamTools-Team/NSIS-Build
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
path: ./NSIS-Build
|
||||
|
||||
- name: Checkout Credentials repository
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: SteamTools-Team/Credentials
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
path: ./Credentials
|
||||
|
||||
- name: Copy pfx and snk To Source
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
copy ".\Credentials\*.pfx" .
|
||||
copy ".\Credentials\*.snk" .
|
||||
dir *.pfx -s
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.sln
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.sln
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Linux.sln
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Linux.slnf
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Mac.sln
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Mac.slnf
|
||||
|
||||
- name: Build AvaloniaApp
|
||||
run: dotnet build ./src/ST.Client.Desktop.Avalonia.App/ST.Client.Avalonia.App.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Run CommonUnit
|
||||
run: dotnet test ./tests/Common.UnitTest/Common.UnitTest.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Run ST.Client.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.UnitTest/ST.Client.UnitTest.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Run ST.Client.Desktop.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Get tag
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
id: tag
|
||||
uses: dawidd6/action-get-tag@v1
|
||||
|
||||
- name: Build ST.Tools.Publish Release
|
||||
run: dotnet build ./src/ST.Tools.Publish/ST.Tools.Publish.csproj -c Release
|
||||
|
||||
- name: Build Release & Package All & Publish Server
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: .\packaging\build.ps1 -version ${{ steps.tag.outputs.tag }} -configuration ${{ env.Configuration }} -isPublish $true
|
||||
env:
|
||||
Token: ${{ secrets.PUBLISH_TOKEN }}
|
||||
|
||||
- name: Package fd-win-x64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_win_x64_fde_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "fd_win_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x64_fde_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package fd-win-x64 exe
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_win_x64_fde_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_fd_win_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x64_fde_v${{ steps.tag.outputs.tag }}.exe)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package win-x64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_win_x64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "win_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package win-x64 exe
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_win_x64_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_win_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x64_v${{ steps.tag.outputs.tag }}.exe)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package osx-x64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_macos_x64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "macos_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_macos_x64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package osx-arm64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_macos_arm64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "macos_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_macos_arm64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-x64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "linux_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-arm64 7z
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "linux_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-x64 deb
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.deb" "${env:PublishFilePath}"
|
||||
Write-Output "deb_linux_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.deb)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-arm64 deb
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.deb" "${env:PublishFilePath}"
|
||||
Write-Output "deb_linux_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.deb)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-x64 rpm
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.rpm" "${env:PublishFilePath}"
|
||||
Write-Output "rpm_linux_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.rpm)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-arm64 rpm
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
New-Item -ItemType Directory -Path ${env:PublishFilePath} -Force > $null
|
||||
Copy-Item ".\src\ST.Client.Desktop.Avalonia.App\bin\${env:Configuration}\Publish\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.rpm" "${env:PublishFilePath}"
|
||||
Write-Output "rpm_linux_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.rpm)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Changelog
|
||||
uses: glennawatson/ChangeLog@v1
|
||||
id: changelog
|
||||
|
||||
- name: Create a new GitHub release
|
||||
uses: ncipollo/release-action@v1
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
name: ${{ steps.tag.outputs.tag }}
|
||||
prerelease: false
|
||||
draft: true
|
||||
artifacts: ${{ env.PublishFilePath }}\*
|
||||
body: |
|
||||
## 版本亮点
|
||||
* 此版本由 GitHub Action 自动化部署发布,更新日志会在一段时间后手动更新。
|
||||
|
||||
|
||||
${{ steps.changelog.outputs.commitLog }}
|
||||
|
||||
|
||||
## 文件校验
|
||||
| File | Checksum (SHA256) |
|
||||
| :- | :- |
|
||||
| <sub>${{ env.ProjectName }}_win_x64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.win_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x64_fde_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.fd_win_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x64_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_win_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x64_fde_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_fd_win_x64_SHA256 }}</sub> |
|
||||
|||
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.linux_arm64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.deb</sub> | <sub>${{ env.deb_linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.deb</sub> | <sub>${{ env.deb_linux_arm64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.rpm</sub> | <sub>${{ env.rpm_linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.rpm</sub> | <sub>${{ env.rpm_linux_arm64_SHA256 }}</sub> |
|
||||
|||
|
||||
| <sub>${{ env.ProjectName }}_macos_x64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.macos_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_macos_arm64_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.macos_arm64_SHA256 }}</sub> |
|
||||
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
|
||||
##### [不知道该下载哪个文件?](https://github.com/BeyondDimension/SteamTools/blob/develop/download-guide.md)
|
||||
|
||||
WindowsStore:
|
||||
name: WindowsStore Publish
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: ${{ false }} #未做完暂时禁用
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ windows-latest ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
if: matrix.os == 'windows-latest'
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: |
|
||||
dotnet --info
|
||||
msbuild --version
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.sln
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.sln
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Linux.sln
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Linux.slnf
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Mac.sln
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: dotnet restore ./SteamToolsV2+.Mac.slnf
|
||||
|
||||
- name: Build AvaloniaApp
|
||||
run: dotnet build ./src/ST.Client.Desktop.Avalonia.App/ST.Client.Avalonia.App.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Run CommonUnit
|
||||
run: dotnet test ./tests/Common.UnitTest/Common.UnitTest.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Run ST.Client.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.UnitTest/ST.Client.UnitTest.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Run ST.Client.Desktop.UnitTest
|
||||
run: dotnet test ./tests/ST.Client.Desktop.UnitTest/ST.Client.Desktop.UnitTest.csproj -c "${{ env.Configuration }}"
|
||||
|
||||
- name: Get tag
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
id: tag
|
||||
uses: dawidd6/action-get-tag@v1
|
||||
|
||||
- name: Checkout Credentials repository
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: SteamTools-Team/Credentials
|
||||
token: ${{ secrets.REPO_TOKEN }}
|
||||
path: ./Credentials
|
||||
|
||||
- name: Copy pfx and snk To Source
|
||||
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') }}
|
||||
run: |
|
||||
copy ".\Credentials\*.pfx" .
|
||||
copy ".\Credentials\*.snk" .
|
||||
dir *.pfx -s
|
||||
|
||||
#- name: Build MSIX Package
|
||||
# run: msbuild .\src\ST.Client.Desktop.Avalonia.App.Bridge.Package\ST.Client.Avalonia.App.Bridge.Package.wapproj /t:rebuild /p:Platform=x64 /p:AppxBundlePlatforms="x64" /p:AppxBundle=Always /p:configuration="release" /t:Publish /p:UapAppxPackageBuildMode=StoreUpload
|
||||
@@ -1,21 +0,0 @@
|
||||
name: Sync To Gitee
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop, www ]
|
||||
delete:
|
||||
branches: [ main, develop, www ]
|
||||
create:
|
||||
branches: [ main, develop, www ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Sync to Gitee
|
||||
uses: wearerequired/git-mirror-action@master
|
||||
env:
|
||||
SSH_PRIVATE_KEY: ${{ secrets.GITEE_PRIVATE_KEY }}
|
||||
with:
|
||||
source-repo: "git@github.com:BeyondDimension/SteamTools.git"
|
||||
destination-repo: "git@gitee.com:rmbgame/SteamTools"
|
||||
@@ -1,87 +0,0 @@
|
||||
name: Build Xamarin app
|
||||
#https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-xamarin-applications
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main, develop ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration: [ Debug, Release ]
|
||||
os: [ macOS-latest ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
if: matrix.os == 'windows-latest'
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
|
||||
# - name: Install macOS SDK(macOS)
|
||||
# if: matrix.os == 'macOS-latest'
|
||||
# run: sudo dotnet workload install macos
|
||||
|
||||
# - name: Install macOS SDK(Windows)
|
||||
# if: matrix.os == 'windows-latest'
|
||||
# run: dotnet workload install macos
|
||||
|
||||
# - name: Install Maui(Windows)
|
||||
# if: matrix.os == 'windows-latest'
|
||||
# run: dotnet workload install maui
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: |
|
||||
nuget help
|
||||
dotnet --info
|
||||
msbuild -version
|
||||
|
||||
# - name: Install dependencies
|
||||
# run: nuget restore ./SteamToolsV2+.sln
|
||||
|
||||
- name: Setup Xamarin
|
||||
uses: maxim-lobanov/setup-xamarin@v1
|
||||
with:
|
||||
# mono-version: '6.12' # specify version in '<major>.<minor>' format
|
||||
# xamarin-ios-version: '14.14' # specify version in '<major>' format
|
||||
# xamarin-mac-version: latest # specify 'latest' keyword to pick up the latest available version
|
||||
xamarin-android-version: '11.2' # specify full version; it is not recomended option because your pipeline can be broken suddenly in future
|
||||
# xcode-version: '12.x' # set the latest available Xcode 12
|
||||
|
||||
- name: Setup Android NDK
|
||||
uses: nttld/setup-ndk@v1.0.6
|
||||
id: setup-ndk
|
||||
with:
|
||||
ndk-version: r21e
|
||||
add-to-path: false
|
||||
env:
|
||||
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
|
||||
- name: dotnet restore SteamToolsV2+.Mac.slnf
|
||||
run: dotnet restore ./SteamToolsV2+.Mac.slnf
|
||||
|
||||
# - name: Build ST.Client
|
||||
# run: dotnet msbuild ./src/ST.Client/ST.Client.csproj /p:Configuration=${{ matrix.configuration }}
|
||||
|
||||
- name: Build ST.Client.XamarinForms
|
||||
run: dotnet msbuild ./src/ST.Client.XamarinForms/ST.Client.XamarinForms.csproj /p:Configuration=${{ matrix.configuration }}
|
||||
|
||||
- name: Build Android app
|
||||
run: msbuild ./src/ST.Client.Mobile.Droid.App/ST.Client.Android.App.csproj /t:PackageForAndroid /p:Configuration=${{ matrix.configuration }}
|
||||
|
||||
#- name: Build iOS app
|
||||
# run: msbuild <csproj_file_path> /p:Configuration=${{ matrix.configuration }} /p:Platform=iPhoneSimulator /t:Rebuild
|
||||
+1
-24
@@ -338,27 +338,4 @@ ASALocalRun/
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
# Design Resource
|
||||
*.psd
|
||||
|
||||
# Android Resource Designer
|
||||
Resource.designer.cs
|
||||
|
||||
# csproject launchSettings
|
||||
launchSettings.json
|
||||
|
||||
# Android KeyStore
|
||||
*.jks
|
||||
/Xamarin.Android.KeyStore.props
|
||||
*.ts
|
||||
healthchecksdb
|
||||
+1
-34
@@ -1,39 +1,6 @@
|
||||
[submodule "references/Titanium-Web-Proxy"]
|
||||
path = references/Titanium-Web-Proxy
|
||||
url = https://github.com/SteamTools-Team/Titanium-Web-Proxy.git
|
||||
url = https://github.com/rmbadmin/Titanium-Web-Proxy.git
|
||||
[submodule "references/MetroRadiance"]
|
||||
path = references/MetroRadiance
|
||||
url = https://github.com/rmbadmin/MetroRadiance.git
|
||||
[submodule "references/SteamAchievementManager"]
|
||||
path = references/SteamAchievementManager
|
||||
url = https://github.com/SteamTools-Team/SteamAchievementManager.git
|
||||
[submodule "references/Steam4NET"]
|
||||
path = references/Steam4NET
|
||||
url = https://github.com/SteamTools-Team/Steam4NET.git
|
||||
[submodule "references/Depressurizer"]
|
||||
path = references/Depressurizer
|
||||
url = https://github.com/SteamTools-Team/Depressurizer.git
|
||||
[submodule "references/AvaloniaGif"]
|
||||
path = references/AvaloniaGif
|
||||
url = https://github.com/SteamTools-Team/AvaloniaGif
|
||||
[submodule "references/WinAuth"]
|
||||
path = references/WinAuth
|
||||
url = https://github.com/SteamTools-Team/WinAuth
|
||||
[submodule "references/ArchiSteamFarm"]
|
||||
path = references/ArchiSteamFarm
|
||||
url = https://github.com/SteamTools-Team/ArchiSteamFarm.git
|
||||
[submodule "references/sqlite-net"]
|
||||
path = references/sqlite-net
|
||||
url = https://github.com/SteamTools-Team/sqlite-net.git
|
||||
[submodule "references/FluentAvalonia"]
|
||||
path = references/FluentAvalonia
|
||||
url = https://github.com/SteamTools-Team/FluentAvalonia.git
|
||||
[submodule "references/reactive"]
|
||||
path = references/reactive
|
||||
url = https://github.com/SteamTools-Team/reactive.git
|
||||
[submodule "references/dotnet-packaging"]
|
||||
path = references/dotnet-packaging
|
||||
url = https://github.com/qmfrederik/dotnet-packaging.git
|
||||
[submodule "references/SevenZipSharp"]
|
||||
path = references/SevenZipSharp
|
||||
url = https://github.com/SteamTools-Team/SevenZipSharp.git
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31729.503
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Native", "src\Avalonia.Native\Avalonia.Native.csproj", "{6D1B84EF-D58A-41B1-A442-249FBA9720CD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Themes.Default", "src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj", "{61A4D91B-1C05-444C-B587-353BAA582DF3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Themes.Fluent", "src\Avalonia.Themes.Fluent\Avalonia.Themes.Fluent.csproj", "{690B15C0-F622-443E-B793-BDD6AF2DCDB2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Win32", "src\Avalonia.Win32\Avalonia.Win32.csproj", "{4A6AD260-611E-4106-8E91-16750DA76A75}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.X11", "src\Avalonia.X11\Avalonia.X11.csproj", "{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6D1B84EF-D58A-41B1-A442-249FBA9720CD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{61A4D91B-1C05-444C-B587-353BAA582DF3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{690B15C0-F622-443E-B793-BDD6AF2DCDB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A6AD260-611E-4106-8E91-16750DA76A75}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7B75CDE0-3A5C-4433-A8AF-78431ED8B397}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E3C313BF-6EBC-4070-99BC-C86656B6C8CE}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,17 +1,16 @@
|
||||
<Project>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<DebugType>none</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<LangVersion>9.0</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<TrimMode>link</TrimMode>
|
||||
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" Exists('$(MSBuildProjectDirectory)\..\..\Unicorn.snk') ">
|
||||
<DefineConstants>SIGN_ASSEMBLY;$(DefineConstants)</DefineConstants>
|
||||
<SignAssembly>false</SignAssembly>
|
||||
<PropertyGroup Condition="Exists('..\Unicorn.pfx')">
|
||||
<SignAssembly>true</SignAssembly>
|
||||
<DelaySign>false</DelaySign>
|
||||
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\Unicorn.snk</AssemblyOriginatorKeyFile>
|
||||
<AssemblyOriginatorKeyFile>..\Unicorn.pfx</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -1,287 +0,0 @@
|
||||
<Project>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp3.1'))">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NETCOREAPP31) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.22" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.22" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net5.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET50) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.12" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.12" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NET60) -->
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.1" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
|
||||
<!-- Entity Framework Plus -->
|
||||
<!-- A FREE & Open Source library to enhance EF6 and EF Core -->
|
||||
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.13.7" />
|
||||
|
||||
<!-- AspNetCore 6 OpenId/OAuth -->
|
||||
<PackageVersion Include="AspNet.Security.OpenId.Steam" Version="6.0.0" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.3" />
|
||||
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net48' Or '$(TargetFramework)' == 'net472' Or '$(TargetFramework)' == 'net471' Or '$(TargetFramework)' == 'net46' Or '$(TargetFramework)' == 'net462' Or '$(TargetFramework)' == 'net461' Or '$(TargetFramework)' == 'net45' Or '$(TargetFramework)' == 'net452' Or '$(TargetFramework)' == 'net451' ">
|
||||
<!-- WindowsRuntime(NETFX) & PowerShell 5 -->
|
||||
<PackageVersion Include="System.Runtime.WindowsRuntime" Version="4.7.0" />
|
||||
<PackageVersion Include="System.Runtime.WindowsRuntime.UI.Xaml" Version="4.7.0" />
|
||||
<PackageVersion Include="Microsoft.PowerShell.5.ReferenceAssemblies" Version="1.1.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('net5.0')) Or $(TargetFramework.StartsWith('netcoreapp3.1')) Or $(TargetFramework.StartsWith('netcoreapp3.0')) Or $(TargetFramework.StartsWith('netcoreapp2.2')) Or $(TargetFramework.StartsWith('netcoreapp2.1')) Or $(TargetFramework.StartsWith('netcoreapp2.0')) ">
|
||||
<!-- .NET Platform Extensions 5 -->
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
|
||||
<!-- BCL(NETSTANDARD) -->
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Text.Encodings.Web" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Drawing.Common" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.5.1" />
|
||||
<PackageVersion Include="System.Memory" Version="4.5.4" />
|
||||
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
|
||||
<PackageVersion Include="System.Diagnostics.Tracing" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<!-- Microsoft.* -->
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
|
||||
<!--<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="1.4.1" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.NET.Ref" Version="10.0.19041.22" />-->
|
||||
<!--<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />-->
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22000.197" />
|
||||
|
||||
<!-- AppCenter.* -->
|
||||
<PackageVersion Include="Microsoft.AppCenter" Version="4.5.0" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="4.5.0" />
|
||||
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Analytics" Version="4.5.0" />
|
||||
<PackageVersion Include="Aigio.Avalonia.AppCenter.Crashes" Version="4.5.0" />
|
||||
<!--<PackageVersion Include="nor0x.AppCenter" Version="4.4.0-XMAC" />
|
||||
<PackageVersion Include="nor0x.AppCenter.Analytics" Version="4.4.0-XMAC" />
|
||||
<PackageVersion Include="nor0x.AppCenter.Crashes" Version="4.4.0-XMAC" />-->
|
||||
|
||||
<!-- .NET Platform Extensions 6 -->
|
||||
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="6.0.0" />
|
||||
|
||||
<!-- Xamarin -->
|
||||
<PackageVersion Include="Xamarin.Essentials" Version="1.7.1" />
|
||||
<!-- Xamarin.Forms -->
|
||||
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2244" />
|
||||
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2244" />
|
||||
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
|
||||
|
||||
<!-- NUnit & NUnit.Xamarin & Moq -->
|
||||
<PackageVersion Include="NUnit" Version="3.13.2" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="nunit.xamarin" Version="3.6.1" />
|
||||
<PackageVersion Include="PCLStorage" Version="1.0.2" />
|
||||
<PackageVersion Include="Moq" Version="4.16.1" />
|
||||
|
||||
<!-- NLog -->
|
||||
<PackageVersion Include="NLog" Version="4.7.13" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
|
||||
<!-- ReactiveUI -->
|
||||
<PackageVersion Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageVersion Include="Splat" Version="14.1.17" />
|
||||
<PackageVersion Include="DynamicData" Version="7.4.11" />
|
||||
<PackageVersion Include="ReactiveUI" Version="17.1.17" />
|
||||
<!--<PackageVersion Include="ReactiveUI.Fody" Version="17.1.17" /> -->
|
||||
<PackageVersion Include="ReactiveUI.XamForms" Version="17.1.17" />
|
||||
<PackageVersion Include="ReactiveUI.AndroidX" Version="17.1.17" />
|
||||
|
||||
<!-- SkiaSharp & HarfBuzzSharp -->
|
||||
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2-preview.179" />
|
||||
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2-preview.179" />
|
||||
<PackageVersion Include="SkiaSharp" Version="2.88.0-preview.179" />
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.0-preview.179" />
|
||||
|
||||
<!-- AutoMapper -->
|
||||
<PackageVersion Include="AutoMapper" Version="10.1.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection" Version="7.0.1" />
|
||||
<PackageVersion Include="AutoMapper.Collection.EntityFrameworkCore" Version="7.1.3" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="4.1.3" />
|
||||
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
|
||||
|
||||
<!-- QRCode -->
|
||||
<!--<PackageVersion Include="QRCoder" Version="1.4.2" />-->
|
||||
<PackageVersion Include="Net.Codecrete.QrCodeGenerator" Version="2.0.1" />
|
||||
|
||||
<!-- NotifyIcon -->
|
||||
<PackageVersion Include="NotifyIcon.Base" Version="1.0.5.1" />
|
||||
<!--<PackageVersion Include="NotifyIcon.Linux" Version="1.0.5.1" />-->
|
||||
<!--<PackageVersion Include="NotifyIcon.Mac" Version="1.0.5.1" />-->
|
||||
<PackageVersion Include="NotifyIcon.Windows" Version="1.0.5.1" />
|
||||
<!--<PackageVersion Include="GtkSharp" Version="3.24.24.34" />-->
|
||||
|
||||
<!-- Compression -->
|
||||
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
|
||||
<PackageVersion Include="Squid-Box.SevenZipSharp.Lite" Version="1.5.0.366" />
|
||||
<PackageVersion Include="ZstdNet" Version="1.4.5" />
|
||||
|
||||
<!-- Algorithm -->
|
||||
<PackageVersion Include="Crc32.NET" Version="1.2.0" />
|
||||
<PackageVersion Include="gfoidl.Base64" Version="1.1.1" />
|
||||
|
||||
<!--Command Line Tools-->
|
||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta1.21308.1" />
|
||||
|
||||
<!-- Pinyin -->
|
||||
<PackageVersion Include="TinyPinyin.Net" Version="1.0.2" />
|
||||
|
||||
<!-- Win32/Windows -->
|
||||
<PackageVersion Include="TaskScheduler" Version="2.10.0" />
|
||||
|
||||
<!-- Swagger -->
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.2.3" />
|
||||
|
||||
<!-- Pay -->
|
||||
<!--<PackageVersion Include="AlipaySDKNet.Standard" Version="4.6.109" />-->
|
||||
|
||||
<!-- Excel -->
|
||||
<PackageVersion Include="NPOI" Version="2.5.5" />
|
||||
|
||||
<!-- Github API -->
|
||||
<PackageVersion Include="Octokit" Version="0.50.0" />
|
||||
|
||||
<!-- ORM -->
|
||||
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
|
||||
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.0.7" />
|
||||
|
||||
<!-- MonoMac(NETSTANDARD) -->
|
||||
<PackageVersion Include="MonoMac.NetStandard" Version="0.0.4" />
|
||||
|
||||
<!-- .NET Compat -->
|
||||
<PackageVersion Include="OperatingSystem2" Version="1.4.3" />
|
||||
<PackageVersion Include="JustArchiNET.Madness" Version="3.2.1" />
|
||||
|
||||
<!-- Serialize -->
|
||||
<PackageVersion Include="MessagePack" Version="2.3.85" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
|
||||
<!-- Html Parser -->
|
||||
<PackageVersion Include="HtmlAgilityPack" Version="1.11.42" />
|
||||
|
||||
<!-- Clipboard -->
|
||||
<PackageVersion Include="TextCopy" Version="6.1.0" />
|
||||
|
||||
<!-- Nito.* -->
|
||||
<PackageVersion Include="Nito.Comparers" Version="6.2.2" />
|
||||
<!--<PackageVersion Include="Nito.Disposables" Version="2.2.1" />-->
|
||||
|
||||
<!-- Valve Data File -->
|
||||
<PackageVersion Include="Gameloop.Vdf" Version="0.6.1" />
|
||||
|
||||
<!-- WebSocket -->
|
||||
<PackageVersion Include="Fleck" Version="1.2.0" />
|
||||
|
||||
<!-- DNS -->
|
||||
<PackageVersion Include="DnsClient" Version="1.6.0" />
|
||||
|
||||
<!-- Cryptographic Algorithms & Protocols -->
|
||||
<PackageVersion Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||
|
||||
<!-- Resilience & Transient Fault Handling -->
|
||||
<PackageVersion Include="Polly" Version="7.2.3" />
|
||||
|
||||
<!--Avalonia Start-->
|
||||
<PackageVersion Include="Avalonia" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Skia" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.12" />
|
||||
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.12" />-->
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.12" />
|
||||
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.12" />
|
||||
<!--<PackageVersion Include="Avalonia.AvaloniaEdit" Version="0.10.4" />-->
|
||||
<!--<PackageVersion Include="CefNet.Avalonia" Version="93.1.21240.857" />-->
|
||||
<!--<PackageVersion Include="LibVLCSharp.Avalonia" Version="3.5.1" />-->
|
||||
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.1.8" />-->
|
||||
<PackageVersion Include="JumpLists.Win32.Avalonia" Version="1.0.0" />
|
||||
<!--Avalonia End-->
|
||||
|
||||
<!-- Xamarin.Android -->
|
||||
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.39.1" />
|
||||
<PackageVersion Include="Xamarin.Google.MLKit.BarcodeScanning" Version="116.1.2.3" />
|
||||
<PackageVersion Include="Plugin.CurrentActivity" Version="2.1.0.4" />
|
||||
<PackageVersion Include="de.hdodenhof.circleimageview" Version="3.1.0" />
|
||||
<PackageVersion Include="Square.OkHttp3" Version="4.9.2" />
|
||||
<PackageVersion Include="Square.Picasso" Version="2.71828.0" />
|
||||
<!--<PackageVersion Include="LeakCanaryBinding" Version="1.5.1.1" />-->
|
||||
<!--<PackageVersion Include="TencentOpenApiSDK.Android" Version="3.5.4.11" />-->
|
||||
|
||||
<!-- Xamarin.AndroidX -->
|
||||
<PackageVersion Include="Xamarin.AndroidX.Migration" Version="1.0.8" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.AppCompat" Version="1.3.1.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Emoji.AppCompat" Version="1.1.0.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Fragment" Version="1.3.6.4" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.Fragment" Version="2.3.5.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.RecyclerView" Version="1.2.1.4" />
|
||||
<PackageVersion Include="Xamarin.Google.Android.Material" Version="1.4.0.5" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.SwipeRefreshLayout" Version="1.1.0.6" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ConstraintLayout" Version="2.1.2.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Navigation.UI" Version="2.3.5.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ViewPager2" Version="1.0.0.13" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Activity" Version="1.4.0.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Biometric" Version="1.1.0.6" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.ExifInterface" Version="1.3.3.3" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Legacy.Support.Core.UI" Version="1.0.0.12" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.4.0.1" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Camera2" Version="1.0.2.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.Lifecycle" Version="1.0.2.2" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Camera.View" Version="1.0.0.5-alpha20" />
|
||||
<!--<PackageVersion Include="Xamarin.AndroidX.Window" Version="1.0.0.3-beta02" />-->
|
||||
|
||||
<!-- Xamarin.iOS -->
|
||||
<PackageVersion Include="Toast.iOS" Version="1.2.0" />
|
||||
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
+31
-191
@@ -2,38 +2,18 @@
|
||||
|
||||
<div align="center">
|
||||
|
||||
English | [简体中文](./README.md)
|
||||
|
||||
「Steam++」is a toolkit that contains a variety of Steam tools, most of which require you to download and install Steam in order to use them.
|
||||
|
||||

|
||||

|
||||
[](https://github.com/rmbadmin/SteamTools/releases/latest)
|
||||
[](LICENSE)
|
||||
[](https://github.com/rmbadmin/SteamTools/stargazers)
|
||||
[](https://github.com/rmbadmin/SteamTools/network/members)
|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/search?l=c%23)
|
||||
[](https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-6)
|
||||
[](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10)
|
||||

|
||||
|
||||
[](https://github.com/AvaloniaUI/Avalonia)
|
||||
[](https://github.com/xamarin/Xamarin.Forms)
|
||||
[](https://github.com/ant-design/ant-design)
|
||||
[](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
|
||||
[](https://actions-badge.atrox.dev/BeyondDimension/SteamTools/goto?ref=develop)
|
||||
[](https://github.com/BeyondDimension/SteamTools)
|
||||
[](https://gitee.com/rmbgame/SteamTools)
|
||||
</div>
|
||||
|
||||
<div align="center"><img src="./resources/screenshots.en.jpg" /></div>
|
||||
|
||||
## 🚀 Download channel
|
||||
- [GitHub Releases](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
- [](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [Arch Linux Package](https://aur.archlinux.org/packages/steam%2B%2B-bin)(By [zhanghua000](https://github.com/zhanghua000))
|
||||
English | [简体中文](./README.md)
|
||||
|
||||
## ✨ Functions
|
||||
1. Local reverse proxy for Steam's community webpage to enable normal access in **the Chinese Mainland, Mainland of China**
|
||||
@@ -44,141 +24,49 @@ English | [简体中文](./README.md)
|
||||
4. Steam Local Two-Step Authenticator
|
||||
- The function reference [WinAuth](https://github.com/winauth/winauth) is developed to enable you to view your token without launching the mobile version of Steam App, similar function software are [WinAuth](https://github.com/winauth/winauth), [SteamDesktopAuthenticator](https://github.com/Jessecar96/SteamDesktopAuthenticator).
|
||||
5. Some game tools
|
||||
- Currently there is a forced game borderless windowing.
|
||||
- Currently there is a forced game borderless windowing, CSGO fix VAC shield.
|
||||
|
||||
<!--Prerequisites Microsoft Visual C++ 2015-2019 Redistributable [64 bit](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 bit](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
|
||||
## 🖥 Supported Operating Systems
|
||||
### Windows
|
||||
## 🖥 Operating Environment
|
||||
- Windows 10 1607+
|
||||
- Windows 8.1 / Windows Server 2012 R2
|
||||
- Windows 7 SP1 [ESU](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq)
|
||||
- Prerequisites
|
||||
- KB3063858 [64 bit](https://www.microsoft.com/download/details.aspx?id=47442) / [32 bit](https://www.microsoft.com/download/details.aspx?id=47409)
|
||||
- ~~macOS 10.13 High Sierra Or Higher~~
|
||||
<!--
|
||||
- ~~Alpine Linux 3.11+~~
|
||||
- ~~CentOS 7+~~
|
||||
- ~~Debian 9+~~
|
||||
- ~~Fedora 32+~~
|
||||
- ~~Linux Mint 18+~~
|
||||
- ~~openSUSE 15+~~
|
||||
- ~~Red Hat Enterprise Linux 7+~~
|
||||
- ~~SUSE Enterprise Linux (SLES) 12 SP2+~~
|
||||
- ~~Ubuntu 20.10, 20.04, 18.04, 16.04~~
|
||||
- ~~Android 5.0+~~
|
||||
- ~~iOS 10.0+~~
|
||||
-->
|
||||
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|-------------------------|-----------------|----------
|
||||
[Windows Client][Windows-client] | 7 SP1(**\***), 8.1 | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 10 Client][Windows-client] | Version 1607+(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows Server][Windows-Server] | 2012+ | x64 | [Windows Server][Windows-Server-lifecycle]
|
||||
|
||||
**\*** Windows 7 SP1 is supported with [Extended Security Updates](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) installed.
|
||||
**\*** Microsoft Store/Desktop Bridge Version 1809+
|
||||
|
||||
[Windows-client]: https://www.microsoft.com/windows/
|
||||
[Windows-lifecycle]: https://support.microsoft.com/help/13853/windows-lifecycle-fact-sheet
|
||||
[win-client-docker]: https://hub.docker.com/_/microsoft-windows
|
||||
[Windows-Server-lifecycle]: https://docs.microsoft.com/windows-server/get-started/windows-server-release-info
|
||||
[Nano-Server]: https://docs.microsoft.com/windows-server/get-started/getting-started-with-nano-server
|
||||
[Windows-Server]: https://docs.microsoft.com/windows-server/
|
||||
|
||||
### Linux
|
||||
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|-----------------------|-------------------|----------
|
||||
[Alpine Linux][Alpine] | 3.13+ | x64, Arm64 | [Alpine][Alpine-lifecycle]
|
||||
[CentOS][CentOS] | 7+ | x64 | [CentOS][CentOS-lifecycle]
|
||||
[Debian][Debian] | 10+ | x64, Arm64 | [Debian][Debian-lifecycle]
|
||||
[Fedora][Fedora] | 33+ | x64 | [Fedora][Fedora-lifecycle]
|
||||
[openSUSE][OpenSUSE] | 15+ | x64 | [OpenSUSE][OpenSUSE-lifecycle]
|
||||
[Red Hat Enterprise Linux][RHEL] | 7+ | x64, Arm64 | [Red Hat][RHEL-lifecycle]
|
||||
[SUSE Enterprise Linux (SLES)][SLES] | 12 SP2+ | x64 | [SUSE][SLES-lifecycle]
|
||||
[Ubuntu][Ubuntu] | 16.04, 18.04, 20.04+ | x64, Arm64 | [Ubuntu][Ubuntu-lifecycle]
|
||||
[Deepin / UOS][Deepin] | 20+ | x64 | [Deepin][Deepin-lifecycle]
|
||||
[Arch Linux][Arch] | | x64 |
|
||||
|
||||
[Alpine]: https://alpinelinux.org/
|
||||
[Alpine-lifecycle]: https://wiki.alpinelinux.org/wiki/Alpine_Linux:Releases
|
||||
[CentOS]: https://www.centos.org/
|
||||
[CentOS-lifecycle]:https://wiki.centos.org/FAQ/General
|
||||
[CentOS-docker]: https://hub.docker.com/_/centos
|
||||
[CentOS-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-centos8
|
||||
[Debian]: https://www.debian.org/
|
||||
[Debian-lifecycle]: https://wiki.debian.org/DebianReleases
|
||||
[Debian-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-debian10
|
||||
[Fedora]: https://getfedora.org/
|
||||
[Fedora-lifecycle]: https://fedoraproject.org/wiki/End_of_life
|
||||
[Fedora-docker]: https://hub.docker.com/_/fedora
|
||||
[Fedora-msft-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-fedora32
|
||||
[Fedora-pm]: https://fedoraproject.org/wiki/DotNet
|
||||
[OpenSUSE]: https://opensuse.org/
|
||||
[OpenSUSE-lifecycle]: https://en.opensuse.org/Lifetime
|
||||
[OpenSUSE-docker]: https://hub.docker.com/r/opensuse/leap
|
||||
[OpenSUSE-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-opensuse15
|
||||
[RHEL]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux
|
||||
[RHEL-lifecycle]: https://access.redhat.com/support/policy/updates/errata/
|
||||
[RHEL-msft-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-rhel8
|
||||
[RHEL-pm]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/developing_.net_applications_in_rhel_8/using-net-core-on-rhel_gsg#installing-net-core_gsg
|
||||
[SLES]: https://www.suse.com/products/server/
|
||||
[SLES-lifecycle]: https://www.suse.com/lifecycle/
|
||||
[SLES-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-sles15
|
||||
[Ubuntu]: https://ubuntu.com/
|
||||
[Ubuntu-lifecycle]: https://wiki.ubuntu.com/Releases
|
||||
[Ubuntu-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-ubuntu-2004
|
||||
[Deepin]: https://www.deepin.org/
|
||||
[Deepin-lifecycle]: https://www.deepin.org/release-notes
|
||||
[Arch]: https://archlinux.org/
|
||||
|
||||
### macOS
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|---------------------------|-------------------|
|
||||
[macOS][macOS] | 10.14+ | x64 |
|
||||
|
||||
[macOS]: https://support.apple.com/macos
|
||||
|
||||
### Android
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|-------------------------|--------------------------------------------------------------------|
|
||||
[Android][Android] | 5.0(API 21)+ | [x64][Android-x64], [Arm64][Android-Arm64], [Arm32][Android-Arm32] |
|
||||
|
||||
[Android]: https://support.google.com/android
|
||||
[Android-x64]: https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#86-64
|
||||
[Android-Arm32]: https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#v7a
|
||||
[Android-Arm64]: https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#arm64-v8a
|
||||
|
||||
### ~~iOS / iPadOS~~
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|-------------------------|-------------------|
|
||||
[iOS][iOS] | 10.0+ | x64, Arm64, Arm32 |
|
||||
|
||||
[iOS]: https://support.apple.com/ios
|
||||
|
||||
## ⛔ Unsupported Operating System
|
||||
- Windows 8
|
||||
- [Due to Microsoft's official support for the product has ended](https://docs.microsoft.com/lifecycle/products/windows-8), so this program cannot run on this operating system, [It is recommended to upgrade to Windows 8.1](https://support.microsoft.com/windows/update-to-windows-8-1-from-windows-8-17fc54a7-a465-6b5a-c1a0-34140afd0669)
|
||||
- Windows Server 2008 R2 SP1
|
||||
- Only version 1.x is available, 2.x is not supported at first, and it is recommended to upgrade to a higher version
|
||||
- Windows Server / Linux version without desktop GUI
|
||||
- Xbox or Windows Mobile / Phone
|
||||
|
||||
## 🌏 Roadmap
|
||||
Read what we [milestones](https://github.com/BeyondDimension/SteamTools/milestones), and feel free to ask questions.
|
||||
## 🌎 Roadmap
|
||||
Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/milestones), and feel free to ask questions.
|
||||
|
||||
## ⌨️ Development Environment
|
||||
[Visual Studio 2022](https://visualstudio.microsoft.com/vs/)
|
||||
[JetBrains Rider](https://www.jetbrains.com/rider/)
|
||||
~~[Visual Studio 2022 for Mac Preview](https://visualstudio.microsoft.com/zh-hans/vs/mac/preview/)~~
|
||||
~~[Visual Studio Code](https://code.visualstudio.com/)~~
|
||||
- Supported Operating Systems
|
||||
- [Windows 10 Version 2004 Or Higher: Home, Professional, Education, and Enterprise (LTSC and S are not supported)](https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements)
|
||||
- [macOS 10.14 Mojave Or Higher](https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
[Visual Studio 2019 Version 16.8 Or Higher](https://visualstudio.microsoft.com/vs/) Or [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/) Or [JetBrains Rider](https://www.jetbrains.com/rider/) Or [Visual Studio Code](https://code.visualstudio.com/)
|
||||
- Workload
|
||||
- Web and Cloud
|
||||
- ASP.NET and Web Development
|
||||
- Desktop and Mobile Applications
|
||||
- .NET Desktop Development
|
||||
- UWP Development
|
||||
- Mobile Development using .Net
|
||||
- Other Toolsets
|
||||
- .NET Core Cross Platform Development
|
||||
- Single Component
|
||||
- GitHub Extension for Visual Studio
|
||||
- Windows 10 SDK (10.0.19041.0)
|
||||
- [Visual Studio Marketplace](https://marketplace.visualstudio.com/)
|
||||
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[OpenJDK 11](https://docs.microsoft.com/java/openjdk/download#openjdk-11)
|
||||
[Android Studio 2021.1.1 Or Higher](https://developer.android.com/studio/)
|
||||
[Xcode 13 Or Higher](https://developer.apple.com/xcode/)
|
||||
|
||||
## 📄 Thanks to the following Open Source Projects
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
* [MetroRadiance](https://github.com/Grabacr07/MetroRadiance)
|
||||
@@ -188,76 +76,28 @@ Read what we [milestones](https://github.com/BeyondDimension/SteamTools/mileston
|
||||
* [Hardcodet.NotifyIcon](https://github.com/HavenDV/Hardcodet.NotifyIcon.Wpf.NetCore)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [Ninject](https://github.com/ninject/Ninject)
|
||||
* [log4net](https://github.com/apache/logging-log4net)
|
||||
* [SteamDB-API](https://github.com/SteamDB-API/api)
|
||||
* [SteamAchievementManager](https://github.com/gibbed/SteamAchievementManager)
|
||||
* [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm)
|
||||
* [Steam4NET](https://github.com/SteamRE/Steam4NET)
|
||||
* [WinAuth](https://github.com/winauth/winauth)
|
||||
* [SteamDesktopAuthenticator](https://github.com/Jessecar96/SteamDesktopAuthenticator)
|
||||
* [Gameloop.Vdf](https://github.com/shravan2x/Gameloop.Vdf)
|
||||
* [DnsClient.NET](https://github.com/MichaCo/DnsClient.NET)
|
||||
* [Costura.Fody](https://github.com/Fody/Costura)
|
||||
* [MessagePack-CSharp](https://github.com/neuecc/MessagePack-CSharp)
|
||||
* [CSharpVitamins.ShortGuid](https://github.com/AigioL/CSharpVitamins.ShortGuid)
|
||||
* [Nito.Comparers](https://github.com/StephenCleary/Comparers)
|
||||
* [Nito.Disposables](https://github.com/StephenCleary/Disposables)
|
||||
* [Crc32.NET](https://github.com/force-net/Crc32.NET)
|
||||
* [gfoidl.Base64](https://github.com/gfoidl/Base64)
|
||||
* [sqlite-net-pcl](https://github.com/praeclarum/sqlite-net)
|
||||
* [AutoMapper](https://github.com/AutoMapper/AutoMapper)
|
||||
* [Polly](https://github.com/App-vNext/Polly)
|
||||
* [TaskScheduler](https://github.com/dahall/taskscheduler)
|
||||
* [SharpZipLib](https://github.com/icsharpcode/SharpZipLib)
|
||||
* [SevenZipSharp](https://github.com/squid-box/SevenZipSharp)
|
||||
* [ZstdNet](https://github.com/skbkontur/ZstdNet)
|
||||
* [Depressurizer](https://github.com/Depressurizer/Depressurizer)
|
||||
* [NLog](https://github.com/nlog/NLog)
|
||||
* [NUnit](https://github.com/nunit/nunit)
|
||||
* [ReactiveUI](https://github.com/reactiveui/reactiveui)
|
||||
* [MessageBox.Avalonia](https://github.com/AvaloniaUtils/MessageBox.Avalonia)
|
||||
* [AvaloniaUI](https://github.com/AvaloniaUI/Avalonia)
|
||||
* [AvaloniaGif](https://github.com/jmacato/AvaloniaGif)
|
||||
* [Avalonia XAML Behaviors](https://github.com/wieslawsoltes/AvaloniaBehaviors)
|
||||
* [FluentAvalonia](https://github.com/amwx/FluentAvalonia)
|
||||
* [APNG.NET](https://github.com/jz5/APNG.NET)
|
||||
* [Moq](https://github.com/moq/moq4)
|
||||
* [NPOI](https://github.com/nissl-lab/npoi)
|
||||
* [Fleck](https://github.com/statianzo/Fleck)
|
||||
* [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
|
||||
* [AspNet.Security.OpenId.Providers](https://github.com/aspnet-contrib/AspNet.Security.OpenId.Providers)
|
||||
* [AspNet.Security.OAuth.Providers](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers)
|
||||
* [ZXing.Net](https://github.com/micjahn/ZXing.Net)
|
||||
* [QRCoder](https://github.com/codebude/QRCoder)
|
||||
* [QR Code Generator for .NET](https://github.com/manuelbl/QrCodeGenerator)
|
||||
* [TinyPinyin](https://github.com/promeG/TinyPinyin)
|
||||
* [TinyPinyin.Net](https://github.com/hueifeng/TinyPinyin.Net)
|
||||
* [Packaging utilities for .NET Core](https://github.com/qmfrederik/dotnet-packaging)
|
||||
* [React](https://github.com/facebook/react)
|
||||
* [Ant Design](https://github.com/ant-design/ant-design)
|
||||
* [Ant Design Blazor](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
* [Toast messages for Xamarin.iOS](https://github.com/andrius-k/Toast)
|
||||
* [ImageCirclePlugin](https://github.com/jamesmontemagno/ImageCirclePlugin)
|
||||
* [Visual Studio App Center SDK for .NET](https://github.com/microsoft/appcenter-sdk-dotnet)
|
||||
* [AppCenter-XMac](https://github.com/nor0x/AppCenter-XMac)
|
||||
* [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras)
|
||||
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
|
||||
* [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)
|
||||
* [Open Source Components for Xamarin](https://github.com/xamarin/XamarinComponents)
|
||||
* [Google Play Services / Firebase / ML Kit for Xamarin.Android](https://github.com/xamarin/GooglePlayServicesComponents)
|
||||
* [Picasso](https://github.com/square/picasso)
|
||||
* [OkHttp](https://github.com/square/okhttp)
|
||||
* [Material Components for Android](https://github.com/material-components/material-components-android)
|
||||
* [AndroidX for Xamarin.Android](https://github.com/xamarin/AndroidX)
|
||||
* [Android Jetpack](https://github.com/androidx/androidx)
|
||||
* [ConstraintLayout](https://github.com/androidx/constraintlayout)
|
||||
* [Entity Framework Core](https://github.com/dotnet/efcore)
|
||||
* [EntityFrameworkCore](https://github.com/dotnet/efcore)
|
||||
* [ASP.NET Core](https://github.com/dotnet/aspnetcore)
|
||||
* [Windows Forms](https://github.com/dotnet/winforms)
|
||||
* [Windows Presentation Foundation (WPF)](https://github.com/dotnet/wpf)
|
||||
* [C#/WinRT](https://github.com/microsoft/CsWinRT)
|
||||
* [command-line-api](https://github.com/dotnet/command-line-api)
|
||||
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
|
||||
* [.NET Extensions](https://github.com/dotnet/extensions)
|
||||
* [.NET Runtime](https://github.com/dotnet/runtime)
|
||||
* [Fluent UI System Icons](https://github.com/microsoft/fluentui-system-icons)
|
||||
* [Material design icons](https://github.com/google/material-design-icons)
|
||||
@@ -2,44 +2,25 @@
|
||||
|
||||
<div align="center">
|
||||
|
||||
[English](./README.en.md) | 简体中文
|
||||
|
||||
「Steam++」是一个包含多种Steam工具功能的工具箱,此工具的大部分功能都是需要您下载安装Steam才能使用。
|
||||
|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/releases/latest)
|
||||
[](LICENSE)
|
||||
[](https://github.com/BeyondDimension/SteamTools/stargazers)
|
||||
[](https://github.com/BeyondDimension/SteamTools/network/members)
|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/search?l=c%23)
|
||||
[](https://docs.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-6)
|
||||
[](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10)
|
||||

|
||||
[](https://github.com/rmbadmin/SteamTools/releases/latest)
|
||||
[](LICENSE)
|
||||
[](https://github.com/rmbadmin/SteamTools/stargazers)
|
||||
[](https://github.com/rmbadmin/SteamTools/network/members)
|
||||

|
||||
|
||||
[](https://github.com/AvaloniaUI/Avalonia)
|
||||
[](https://github.com/xamarin/Xamarin.Forms)
|
||||
[](https://github.com/ant-design/ant-design)
|
||||
[](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
|
||||
[](https://actions-badge.atrox.dev/BeyondDimension/SteamTools/goto?ref=develop)
|
||||
[](https://github.com/BeyondDimension/SteamTools)
|
||||
[](https://gitee.com/rmbgame/SteamTools)
|
||||
[](https://jq.qq.com/?_wv=1027&k=3JKPt4xC)
|
||||
</div>
|
||||
|
||||
<div align="center"><img src="./resources/screenshots.jpg" /></div>
|
||||
|
||||
## 🚀 下载渠道
|
||||
- [GitHub Releases](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
- [Official WebSite](https://steampp.net)
|
||||
- [](https://www.microsoft.com/store/apps/9MTCFHS560NG)
|
||||
- [Arch Linux Package](https://aur.archlinux.org/packages/steam%2B%2B-bin)(By [zhanghua000](https://github.com/zhanghua000))
|
||||
[English](./README.en.md) | 简体中文
|
||||
|
||||
## ✨ 功能
|
||||
1. 反代 Steam 的社区网页使其能正常访问
|
||||
- 功能类似羽翼城大佬的 [steamcommunity_302](https://www.dogfight360.com/blog/686/)
|
||||
- 使用 [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) 开源项目进行本地反代,使国内用户可以正常访问 Steam 社区页
|
||||
- 使用 [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) 开源项目进行本地反代,使国内用户可以正常访问steam社区页
|
||||
- 相比 **302工具** 具有更快的启动速度,以及支持简单的脚本注入(还顺便支持了Pixiv、Discord、Twitch等网站的反代支持)
|
||||
2. 快速切换当前设备已记住登陆的 Steam 账号
|
||||
- 该功能是读取 Steam 路径下存储的本地用户登录记录直接展示操作,可以多账号切换无需重新输入密码和令牌
|
||||
@@ -52,151 +33,50 @@
|
||||
- [WinAuth](https://github.com/winauth/winauth)
|
||||
- [SteamDesktopAuthenticator](https://github.com/Jessecar96/SteamDesktopAuthenticator)
|
||||
5. 其他游戏工具
|
||||
- 目前已有强制游戏无边框窗口化
|
||||
- 目前已有强制游戏无边框窗口化,CSGO 修复 VAC 屏蔽
|
||||
|
||||
<!--发布配置SelfContained=true时会自动打包VC++相关程序集-->
|
||||
<!--先决条件 Microsoft Visual C++ 2015-2019 Redistributable [64 位](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 位](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
|
||||
## 🖥 系统要求
|
||||
### Windows
|
||||
- Windows 10 1607+
|
||||
- Windows 8.1 / Windows Server 2012 R2
|
||||
- Windows 7 SP1 [ESU](https://docs.microsoft.com/zh-cn/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq)
|
||||
- 先决条件
|
||||
- KB3063858 [64 位](https://www.microsoft.com/zh-cn/download/details.aspx?id=47442) / [32 位](https://www.microsoft.com/zh-cn/download/details.aspx?id=47409)
|
||||
- ~~macOS 10.13 High Sierra 或更高版本~~
|
||||
<!--
|
||||
- ~~Alpine Linux 3.11+~~
|
||||
- ~~CentOS 7+~~
|
||||
- ~~Debian 9+~~
|
||||
- ~~Fedora 32+~~
|
||||
- ~~Linux Mint 18+~~
|
||||
- ~~openSUSE 15+~~
|
||||
- ~~Red Hat Enterprise Linux 7+~~
|
||||
- ~~SUSE Enterprise Linux (SLES) 12 SP2+~~
|
||||
- ~~Ubuntu 20.10, 20.04, 18.04, 16.04~~
|
||||
- ~~Android 5.0+~~
|
||||
- ~~iOS 10.0+~~
|
||||
-->
|
||||
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|-------------------------|-----------------|----------
|
||||
[Windows Client][Windows-client] | 7 SP1(**\***), 8.1 | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows 10 Client][Windows-client] | Version 1607+(**\***) | x64 | [Windows][Windows-lifecycle]
|
||||
[Windows Server][Windows-Server] | 2012+ | x64 | [Windows Server][Windows-Server-lifecycle]
|
||||
|
||||
**\*** Windows 7 SP1 is supported with [Extended Security Updates](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq) installed.
|
||||
**\*** Microsoft Store/Desktop Bridge Version 1809+
|
||||
|
||||
[Windows-client]: https://www.microsoft.com/windows/
|
||||
[Windows-lifecycle]: https://support.microsoft.com/help/13853/windows-lifecycle-fact-sheet
|
||||
[win-client-docker]: https://hub.docker.com/_/microsoft-windows
|
||||
[Windows-Server-lifecycle]: https://docs.microsoft.com/windows-server/get-started/windows-server-release-info
|
||||
[Nano-Server]: https://docs.microsoft.com/windows-server/get-started/getting-started-with-nano-server
|
||||
[Windows-Server]: https://docs.microsoft.com/windows-server/
|
||||
|
||||
### Linux
|
||||
|
||||
OS | Version | Architectures | Lifecycle
|
||||
--------------------------------------|-----------------------|-------------------|----------
|
||||
[Alpine Linux][Alpine] | 3.13+ | x64, Arm64 | [Alpine][Alpine-lifecycle]
|
||||
[CentOS][CentOS] | 7+ | x64 | [CentOS][CentOS-lifecycle]
|
||||
[Debian][Debian] | 10+ | x64, Arm64 | [Debian][Debian-lifecycle]
|
||||
[Fedora][Fedora] | 33+ | x64 | [Fedora][Fedora-lifecycle]
|
||||
[openSUSE][OpenSUSE] | 15+ | x64 | [OpenSUSE][OpenSUSE-lifecycle]
|
||||
[Red Hat Enterprise Linux][RHEL] | 7+ | x64, Arm64 | [Red Hat][RHEL-lifecycle]
|
||||
[SUSE Enterprise Linux (SLES)][SLES] | 12 SP2+ | x64 | [SUSE][SLES-lifecycle]
|
||||
[Ubuntu][Ubuntu] | 16.04, 18.04, 20.04+ | x64, Arm64 | [Ubuntu][Ubuntu-lifecycle]
|
||||
[Deepin / UOS][Deepin] | 20+ | x64 | [Deepin][Deepin-lifecycle]
|
||||
[Arch Linux][Arch] | | x64 |
|
||||
|
||||
[Alpine]: https://alpinelinux.org/
|
||||
[Alpine-lifecycle]: https://wiki.alpinelinux.org/wiki/Alpine_Linux:Releases
|
||||
[CentOS]: https://www.centos.org/
|
||||
[CentOS-lifecycle]:https://wiki.centos.org/FAQ/General
|
||||
[CentOS-docker]: https://hub.docker.com/_/centos
|
||||
[CentOS-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-centos8
|
||||
[Debian]: https://www.debian.org/
|
||||
[Debian-lifecycle]: https://wiki.debian.org/DebianReleases
|
||||
[Debian-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-debian10
|
||||
[Fedora]: https://getfedora.org/
|
||||
[Fedora-lifecycle]: https://fedoraproject.org/wiki/End_of_life
|
||||
[Fedora-docker]: https://hub.docker.com/_/fedora
|
||||
[Fedora-msft-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-fedora32
|
||||
[Fedora-pm]: https://fedoraproject.org/wiki/DotNet
|
||||
[OpenSUSE]: https://opensuse.org/
|
||||
[OpenSUSE-lifecycle]: https://en.opensuse.org/Lifetime
|
||||
[OpenSUSE-docker]: https://hub.docker.com/r/opensuse/leap
|
||||
[OpenSUSE-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-opensuse15
|
||||
[RHEL]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux
|
||||
[RHEL-lifecycle]: https://access.redhat.com/support/policy/updates/errata/
|
||||
[RHEL-msft-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-rhel8
|
||||
[RHEL-pm]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/developing_.net_applications_in_rhel_8/using-net-core-on-rhel_gsg#installing-net-core_gsg
|
||||
[SLES]: https://www.suse.com/products/server/
|
||||
[SLES-lifecycle]: https://www.suse.com/lifecycle/
|
||||
[SLES-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-sles15
|
||||
[Ubuntu]: https://ubuntu.com/
|
||||
[Ubuntu-lifecycle]: https://wiki.ubuntu.com/Releases
|
||||
[Ubuntu-pm]: https://docs.microsoft.com/dotnet/core/install/linux-package-manager-ubuntu-2004
|
||||
[Deepin]: https://www.deepin.org/
|
||||
[Deepin-lifecycle]: https://www.deepin.org/release-notes
|
||||
[Arch]: https://archlinux.org/
|
||||
|
||||
### macOS
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|---------------------------|-------------------|
|
||||
[macOS][macOS] | 10.14+ | x64 |
|
||||
|
||||
[macOS]: https://support.apple.com/macos
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|-------------------------|--------------------------------------------------------------------|
|
||||
[Android][Android] | 5.0(API 21)+ | [x64][Android-x64], [Arm64][Android-Arm64], [Arm32][Android-Arm32] |
|
||||
|
||||
[Android]: https://support.google.com/android
|
||||
[Android-x64]: https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#86-64
|
||||
[Android-Arm32]: https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#v7a
|
||||
[Android-Arm64]: https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#arm64-v8a
|
||||
|
||||
### ~~iOS / iPadOS~~
|
||||
|
||||
OS | Version | Architectures |
|
||||
------------------------------|-------------------------|-------------------|
|
||||
[iOS][iOS] | 10.0+ | x64, Arm32, Arm64 |
|
||||
|
||||
[iOS]: https://support.apple.com/ios
|
||||
|
||||
## ⛔ 不受支持的操作系统
|
||||
- Windows 8
|
||||
- [由于微软官方对该产品的支持已结束](https://docs.microsoft.com/zh-cn/lifecycle/products/windows-8),故本程序无法在此操作系统上运行,[建议升级到 Windows 8.1](https://support.microsoft.com/zh-cn/windows/%E4%BB%8E-windows-8-%E6%9B%B4%E6%96%B0%E5%88%B0-windows-8-1-17fc54a7-a465-6b5a-c1a0-34140afd0669)
|
||||
- Windows Server 2008 R2 SP1
|
||||
- 仅可使用 1.X 版本,2.X 开始不受支持,建议升级到更高版本
|
||||
- 无桌面 GUI 的 Windows Server / Linux 版本
|
||||
- Xbox or Windows Mobile / Phone
|
||||
|
||||
## 🌏 路线图
|
||||
查看这个 [milestones](https://github.com/BeyondDimension/SteamTools/milestones) 来了解我们下一步的开发计划,并随时提出问题。
|
||||
## 🌎 路线图
|
||||
查看这个 [milestones](https://github.com/SteamTools-Team/SteamTools/milestones) 来了解我们下一步的开发计划,并随时提出问题。
|
||||
|
||||
## ⌨️ 开发环境
|
||||
[Visual Studio 2022](https://visualstudio.microsoft.com/zh-hans/vs/)
|
||||
[JetBrains Rider](https://www.jetbrains.com/rider/)
|
||||
~~[Visual Studio 2022 for Mac Preview](https://visualstudio.microsoft.com/zh-hans/vs/mac/)~~
|
||||
~~[Visual Studio Code](https://code.visualstudio.com/)~~
|
||||
- 系统要求
|
||||
- [Windows 10 版本 2004 或更高版本:家庭版、专业版、教育版和企业版(不支持 LTSC 和 Windows 10 S,在较早的操作系统上可能不受支持)](https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements)
|
||||
- [macOS 10.14 Mojave 或更高版本](https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2019-system-requirements-mac)
|
||||
[Visual Studio 2019 版本 16.8 或更高版本](https://visualstudio.microsoft.com/zh-hans/vs/) 或 [Visual Studio for Mac](https://visualstudio.microsoft.com/zh-hans/vs/mac/) 或 [JetBrains Rider](https://www.jetbrains.com/rider/) 或 [Visual Studio Code](https://code.visualstudio.com/)
|
||||
- 工作负载
|
||||
- Web 和云
|
||||
- ASP.NET 和 Web 开发
|
||||
- 桌面应用和移动应用
|
||||
- .NET 桌面开发
|
||||
- 通用 Windows 平台开发
|
||||
- 使用 .NET 的移动开发
|
||||
- 其他工具集
|
||||
- .NET Core 跨平台开发
|
||||
- 单个组件
|
||||
- GitHub Extension for Visual Studio
|
||||
- Windows 10 SDK (10.0.19041.0)
|
||||
- [Visual Studio Marketplace](https://marketplace.visualstudio.com/)
|
||||
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[OpenJDK 11](https://docs.microsoft.com/zh-cn/java/openjdk/download#openjdk-11)
|
||||
[Android Studio 2021.1.1 或更高版本](https://developer.android.google.cn/studio/)
|
||||
[Xcode 13 或更高版本](https://developer.apple.com/xcode/)
|
||||
|
||||
## 🏗️ [项目结构](./src/README.md)
|
||||
|
||||
<!--
|
||||
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
|
||||
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
|
||||
* [CefNet](https://github.com/CefNet/CefNet)
|
||||
* [CefSharp](https://github.com/cefsharp/CefSharp)
|
||||
* [ZXing.Net.Mobile](https://github.com/Redth/ZXing.Net.Mobile)
|
||||
* [Floating Action Button Speed Dial](https://github.com/leinardi/FloatingActionButtonSpeedDial)
|
||||
-->
|
||||
<!--👇图标如果发生更改,还需更改 Tools.OpenSourceLibraryList(Program.OpenSourceLibraryListEmoji) -->
|
||||
## 📄 感谢以下开源项目
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
* [MetroRadiance](https://github.com/Grabacr07/MetroRadiance)
|
||||
@@ -206,76 +86,28 @@ OS | Version | Architectures |
|
||||
* [Hardcodet.NotifyIcon](https://github.com/HavenDV/Hardcodet.NotifyIcon.Wpf.NetCore)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [Ninject](https://github.com/ninject/Ninject)
|
||||
* [log4net](https://github.com/apache/logging-log4net)
|
||||
* [SteamDB-API](https://github.com/SteamDB-API/api)
|
||||
* [SteamAchievementManager](https://github.com/gibbed/SteamAchievementManager)
|
||||
* [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm)
|
||||
* [Steam4NET](https://github.com/SteamRE/Steam4NET)
|
||||
* [WinAuth](https://github.com/winauth/winauth)
|
||||
* [SteamDesktopAuthenticator](https://github.com/Jessecar96/SteamDesktopAuthenticator)
|
||||
* [Gameloop.Vdf](https://github.com/shravan2x/Gameloop.Vdf)
|
||||
* [DnsClient.NET](https://github.com/MichaCo/DnsClient.NET)
|
||||
* [Costura.Fody](https://github.com/Fody/Costura)
|
||||
* [MessagePack-CSharp](https://github.com/neuecc/MessagePack-CSharp)
|
||||
* [CSharpVitamins.ShortGuid](https://github.com/AigioL/CSharpVitamins.ShortGuid)
|
||||
* [Nito.Comparers](https://github.com/StephenCleary/Comparers)
|
||||
* [Nito.Disposables](https://github.com/StephenCleary/Disposables)
|
||||
* [Crc32.NET](https://github.com/force-net/Crc32.NET)
|
||||
* [gfoidl.Base64](https://github.com/gfoidl/Base64)
|
||||
* [sqlite-net-pcl](https://github.com/praeclarum/sqlite-net)
|
||||
* [AutoMapper](https://github.com/AutoMapper/AutoMapper)
|
||||
* [Polly](https://github.com/App-vNext/Polly)
|
||||
* [TaskScheduler](https://github.com/dahall/taskscheduler)
|
||||
* [SharpZipLib](https://github.com/icsharpcode/SharpZipLib)
|
||||
* [SevenZipSharp](https://github.com/squid-box/SevenZipSharp)
|
||||
* [ZstdNet](https://github.com/skbkontur/ZstdNet)
|
||||
* [Depressurizer](https://github.com/Depressurizer/Depressurizer)
|
||||
* [NLog](https://github.com/nlog/NLog)
|
||||
* [NUnit](https://github.com/nunit/nunit)
|
||||
* [ReactiveUI](https://github.com/reactiveui/reactiveui)
|
||||
* [MessageBox.Avalonia](https://github.com/AvaloniaUtils/MessageBox.Avalonia)
|
||||
* [AvaloniaUI](https://github.com/AvaloniaUI/Avalonia)
|
||||
* [AvaloniaGif](https://github.com/jmacato/AvaloniaGif)
|
||||
* [Avalonia XAML Behaviors](https://github.com/wieslawsoltes/AvaloniaBehaviors)
|
||||
* [FluentAvalonia](https://github.com/amwx/FluentAvalonia)
|
||||
* [APNG.NET](https://github.com/jz5/APNG.NET)
|
||||
* [Moq](https://github.com/moq/moq4)
|
||||
* [NPOI](https://github.com/nissl-lab/npoi)
|
||||
* [Fleck](https://github.com/statianzo/Fleck)
|
||||
* [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
|
||||
* [AspNet.Security.OpenId.Providers](https://github.com/aspnet-contrib/AspNet.Security.OpenId.Providers)
|
||||
* [AspNet.Security.OAuth.Providers](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers)
|
||||
* [ZXing.Net](https://github.com/micjahn/ZXing.Net)
|
||||
* [QRCoder](https://github.com/codebude/QRCoder)
|
||||
* [QR Code Generator for .NET](https://github.com/manuelbl/QrCodeGenerator)
|
||||
* [TinyPinyin](https://github.com/promeG/TinyPinyin)
|
||||
* [TinyPinyin.Net](https://github.com/hueifeng/TinyPinyin.Net)
|
||||
* [Packaging utilities for .NET Core](https://github.com/qmfrederik/dotnet-packaging)
|
||||
* [React](https://github.com/facebook/react)
|
||||
* [Ant Design](https://github.com/ant-design/ant-design)
|
||||
* [Ant Design Blazor](https://github.com/ant-design-blazor/ant-design-blazor)
|
||||
* [Toast messages for Xamarin.iOS](https://github.com/andrius-k/Toast)
|
||||
* [ImageCirclePlugin](https://github.com/jamesmontemagno/ImageCirclePlugin)
|
||||
* [Visual Studio App Center SDK for .NET](https://github.com/microsoft/appcenter-sdk-dotnet)
|
||||
* [AppCenter-XMac](https://github.com/nor0x/AppCenter-XMac)
|
||||
* [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras)
|
||||
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
|
||||
* [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)
|
||||
* [Open Source Components for Xamarin](https://github.com/xamarin/XamarinComponents)
|
||||
* [Google Play Services / Firebase / ML Kit for Xamarin.Android](https://github.com/xamarin/GooglePlayServicesComponents)
|
||||
* [Picasso](https://github.com/square/picasso)
|
||||
* [OkHttp](https://github.com/square/okhttp)
|
||||
* [Material Components for Android](https://github.com/material-components/material-components-android)
|
||||
* [AndroidX for Xamarin.Android](https://github.com/xamarin/AndroidX)
|
||||
* [Android Jetpack](https://github.com/androidx/androidx)
|
||||
* [ConstraintLayout](https://github.com/androidx/constraintlayout)
|
||||
* [Entity Framework Core](https://github.com/dotnet/efcore)
|
||||
* [EntityFrameworkCore](https://github.com/dotnet/efcore)
|
||||
* [ASP.NET Core](https://github.com/dotnet/aspnetcore)
|
||||
* [Windows Forms](https://github.com/dotnet/winforms)
|
||||
* [Windows Presentation Foundation (WPF)](https://github.com/dotnet/wpf)
|
||||
* [C#/WinRT](https://github.com/microsoft/CsWinRT)
|
||||
* [command-line-api](https://github.com/dotnet/command-line-api)
|
||||
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
|
||||
* [.NET Extensions](https://github.com/dotnet/extensions)
|
||||
* [.NET Runtime](https://github.com/dotnet/runtime)
|
||||
* [Fluent UI System Icons](https://github.com/microsoft/fluentui-system-icons)
|
||||
* [Material design icons](https://github.com/google/material-design-icons)
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31005.135
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Blazor.BackManage.Server", "src\ST.Blazor.BackManage\Server\ST.Blazor.BackManage.Server.csproj", "{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Blazor.BackManage.Client", "src\ST.Blazor.BackManage\Client\ST.Blazor.BackManage.Client.csproj", "{AB1EB396-ABBE-4CEA-A650-950A68440391}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Root", "_Root", "{3449FCD6-B7EB-40DF-A76A-6E22A8FB3A2F}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
src\ST.Blazor.BackManage\README.md = src\ST.Blazor.BackManage\README.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x64.Build.0 = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AB1EB396-ABBE-4CEA-A650-950A68440391}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {10D95A49-D583-49CD-8224-15A402FBEE1D}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -7,47 +7,47 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI", "UI", "{45E5B6B2-0A6D-
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{350F425C-AF5A-4ED2-BDDC-B905A4E63A14}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Proxy", "SteamTool.Proxy\SteamTool.Proxy.csproj", "{A70C148D-042C-48DA-9963-0B777FC60215}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Proxy", "source\SteamTool.Proxy\SteamTool.Proxy.csproj", "{A70C148D-042C-48DA-9963-0B777FC60215}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Reference", "Reference", "{F62E508E-B374-4149-B9AC-0A8090AA6CD1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steam.Service", "SteamTool.Steam.Service\SteamTool.Steam.Service.csproj", "{2A155A7B-3DFD-4F16-929D-9693D2411B83}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steam.Service", "source\SteamTool.Steam.Service\SteamTool.Steam.Service.csproj", "{2A155A7B-3DFD-4F16-929D-9693D2411B83}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Core", "SteamTool.Core\SteamTool.Core.csproj", "{23E26040-19A5-4623-8863-B9ED539403B0}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Core", "source\SteamTool.Core\SteamTool.Core.csproj", "{23E26040-19A5-4623-8863-B9ED539403B0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTools", "SteamTools\SteamTools.csproj", "{0663899A-2EC5-4929-868C-9D9620FEA4FE}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTools", "source\SteamTools\SteamTools.csproj", "{0663899A-2EC5-4929-868C-9D9620FEA4FE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steam4NET.Test", "SteamTool.Steam4NET.Test\SteamTool.Steam4NET.Test.csproj", "{790D22D4-94B0-4575-8E2D-C451EC520407}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steam4NET.Test", "source\SteamTool.Steam4NET.Test\SteamTool.Steam4NET.Test.csproj", "{790D22D4-94B0-4575-8E2D-C451EC520407}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steam4NET", "SteamTool.Steam4NET\SteamTool.Steam4NET.csproj", "{D4157059-D31A-4A21-AF4C-2D458F768041}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steam4NET", "source\SteamTool.Steam4NET\SteamTool.Steam4NET.csproj", "{D4157059-D31A-4A21-AF4C-2D458F768041}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{D245A82C-66B2-4CD5-881C-3ED4332FC91D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steamworks.Test", "SteamTool.Steamworks.Test\SteamTool.Steamworks.Test.csproj", "{C03E4CF5-D68F-4CAC-B002-3A6799ED9E15}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Steamworks.Test", "source\SteamTool.Steamworks.Test\SteamTool.Steamworks.Test.csproj", "{C03E4CF5-D68F-4CAC-B002-3A6799ED9E15}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Proxy.Test", "SteamTool.Proxy.Test\SteamTool.Proxy.Test.csproj", "{4C441E34-FA65-4425-8242-4EB767BA9B95}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Proxy.Test", "source\SteamTool.Proxy.Test\SteamTool.Proxy.Test.csproj", "{4C441E34-FA65-4425-8242-4EB767BA9B95}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Model", "SteamTool.Model\SteamTool.Model.csproj", "{BDBACE3A-0138-4930-95F6-82562EA03F7A}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Model", "source\SteamTool.Model\SteamTool.Model.csproj", "{BDBACE3A-0138-4930-95F6-82562EA03F7A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.SteamAPI", "SteamTool.SteamAPI\SteamTool.SteamAPI.csproj", "{4E66F4F4-7771-4FFA-A907-3F99A95C6A7F}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.SteamAPI", "source\SteamTool.SteamAPI\SteamTool.SteamAPI.csproj", "{4E66F4F4-7771-4FFA-A907-3F99A95C6A7F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Authenticator", "SteamTool.Authenticator\SteamTool.Authenticator.csproj", "{86F6CF23-35C4-45AD-BC0D-6BD50C03F666}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamTool.Authenticator", "source\SteamTool.Authenticator\SteamTool.Authenticator.csproj", "{86F6CF23-35C4-45AD-BC0D-6BD50C03F666}"
|
||||
EndProject
|
||||
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "SteamTools.UWP", "SteamTools.UWP\SteamTools.UWP.wapproj", "{2E755C75-E472-44E0-8AC4-F40209A60172}"
|
||||
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "SteamTools.UWP", "source\SteamTools.UWP\SteamTools.UWP.wapproj", "{2E755C75-E472-44E0-8AC4-F40209A60172}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy", "..\references\Titanium-Web-Proxy\src\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj", "{BBB75CAC-2BA3-473D-935D-0E59406F5E61}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy", "references\Titanium-Web-Proxy\src\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj", "{BBB75CAC-2BA3-473D-935D-0E59406F5E61}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MetroRadiance", "MetroRadiance", "{2B74A2B2-148D-4518-BF74-3408095E920B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroTrilithon.Desktop", "..\references\MetroRadiance\source\MetroTrilithon.Desktop\MetroTrilithon.Desktop.csproj", "{4E2EB2E0-E5FE-4FEB-A3E5-5F2F05CD1A67}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroTrilithon.Desktop", "references\MetroRadiance\source\MetroTrilithon.Desktop\MetroTrilithon.Desktop.csproj", "{4E2EB2E0-E5FE-4FEB-A3E5-5F2F05CD1A67}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroRadiance.Core", "..\references\MetroRadiance\source\MetroRadiance.Core\MetroRadiance.Core.csproj", "{AF006EF5-D4BC-49C6-8E0E-DC2B882BE767}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroRadiance.Core", "references\MetroRadiance\source\MetroRadiance.Core\MetroRadiance.Core.csproj", "{AF006EF5-D4BC-49C6-8E0E-DC2B882BE767}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroRadiance.Chrome", "..\references\MetroRadiance\source\MetroRadiance.Chrome\MetroRadiance.Chrome.csproj", "{DE0B3A58-C301-4671-8B32-4F195C9457A7}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroRadiance.Chrome", "references\MetroRadiance\source\MetroRadiance.Chrome\MetroRadiance.Chrome.csproj", "{DE0B3A58-C301-4671-8B32-4F195C9457A7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroRadiance", "..\references\MetroRadiance\source\MetroRadiance\MetroRadiance.csproj", "{2E226B1E-80F6-448D-B02B-0A029C5BC09E}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroRadiance", "references\MetroRadiance\source\MetroRadiance\MetroRadiance.csproj", "{2E226B1E-80F6-448D-B02B-0A029C5BC09E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroTrilithon", "..\references\MetroRadiance\source\MetroTrilithon\MetroTrilithon.csproj", "{2EE1744F-2D3C-4032-9A9E-C57FA3B512B3}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetroTrilithon", "references\MetroRadiance\source\MetroTrilithon\MetroTrilithon.csproj", "{2EE1744F-2D3C-4032-9A9E-C57FA3B512B3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -0,0 +1,193 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31005.135
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.Repositories.sqlite-net-pcl", "System.Application.Repositories.sqlite-net-pcl\System.Application.Repositories.sqlite-net-pcl.csproj", "{512B0511-41AB-444D-BAD8-E19B7D3B52CB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Common.ClientLib", "System.Common.ClientLib\System.Common.ClientLib.csproj", "{8B9F2E93-B31B-4BA7-920D-732695A473E6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Common.CoreLib", "System.Common.CoreLib\System.Common.CoreLib.csproj", "{E7468FDD-75F7-4B08-BA47-B715BBCFCC11}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Common.ClientLib.Droid", "System.Common.ClientLib.Droid\System.Common.ClientLib.Droid.csproj", "{7C8D906E-426B-49AB-9072-178555370F62}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Common.ClientLib.iOS", "System.Common.ClientLib.iOS\System.Common.ClientLib.iOS.csproj", "{F8F6973C-5831-43D1-89C2-1AD543CE7408}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0_Common", "0_Common", "{2D44BDCF-B70C-4C02-BDC8-4F1DD5066A75}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0_Shared", "0_Shared", "{D40853F1-B3C5-418A-B1D3-E0FB70B2F394}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2_Client", "2_Client", "{9AF522B5-8923-41E6-8A0A-FAE8E8F83439}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4_Repositories.Implementation", "4_Repositories.Implementation", "{DA8EFCA8-5396-48C7-8DC0-CB28A09488D9}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "1_SteamTools", "1_SteamTools", "{B43459A1-709B-4623-9677-AAC2FEE4FBA3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Services.CloudService.Models", "System.Application.SteamTools.Services.CloudService.Models\System.Application.SteamTools.Services.CloudService.Models.csproj", "{6CD71E14-5036-4A16-8084-4AD108D34FF7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Services.CloudService", "System.Application.SteamTools.Services.CloudService\System.Application.SteamTools.Services.CloudService.csproj", "{65DE552F-5E62-4E4F-ADCB-F19AD3DB3F78}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "1_ServerApiClient", "1_ServerApiClient", "{F7AFD002-B231-4A5E-B320-56EFC3210E2C}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0_Launch", "0_Launch", "{1460800B-D9ED-4147-B1E7-ABF502BEF59A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3_Test", "3_Test", "{EBC9DD0C-F7D0-4A00-B263-E69CF4E194F1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Common.UnitTest", "System.Common.UnitTest\System.Common.UnitTest.csproj", "{B9D4C8C7-BF96-417B-A7F8-9A67AE75A38B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Common.UnitTest.Droid", "System.Common.UnitTest.Droid\System.Common.UnitTest.Droid.csproj", "{0073A08E-6336-4C09-99F9-2E808889D715}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Common.UnitTest.Droid.App", "System.Common.UnitTest.Droid.App\System.Common.UnitTest.Droid.App.csproj", "{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools", "System.Application.SteamTools\System.Application.SteamTools.csproj", "{66B7BFD6-6D4D-421B-BA5B-915348E53708}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client", "System.Application.SteamTools.Client\System.Application.SteamTools.Client.csproj", "{0A624994-B0A9-4F1F-B7D0-97FE2929936B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop", "System.Application.SteamTools.Client.Desktop\System.Application.SteamTools.Client.Desktop.csproj", "{D1F15D97-802E-4AA3-A4A5-B890ABE32897}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop.Avalonia.App", "System.Application.SteamTools.Client.Desktop.Avalonia.App\System.Application.SteamTools.Client.Desktop.Avalonia.App.csproj", "{2FFA5BCE-B3C3-46EA-8830-838C938BF814}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B4B548C1-9AFE-4EBB-96E4-990B57C0A953}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitignore = .gitignore
|
||||
Directory.Build.props = Directory.Build.props
|
||||
global.json = global.json
|
||||
README.md = README.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop.Avalonia", "System.Application.SteamTools.Client.Desktop.Avalonia\System.Application.SteamTools.Client.Desktop.Avalonia.csproj", "{4F09B6D1-3F83-45A0-AEC8-0F243E7CD263}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop.Platform", "System.Application.SteamTools.Client.Desktop.Platform\System.Application.SteamTools.Client.Desktop.Platform.csproj", "{DD2973AE-D1FC-4307-AFE2-EE2945183D3D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop.Platform.Linux", "System.Application.SteamTools.Client.Desktop.Platform.Linux\System.Application.SteamTools.Client.Desktop.Platform.Linux.csproj", "{D4CF08F5-8EAB-48FB-AAA3-1A221F7B2A82}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop.Platform.Mac", "System.Application.SteamTools.Client.Desktop.Platform.Mac\System.Application.SteamTools.Client.Desktop.Platform.Mac.csproj", "{948C1EA8-12DB-4F8A-A190-8615DFBD9FE4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Application.SteamTools.Client.Desktop.Platform.Windows", "System.Application.SteamTools.Client.Desktop.Platform.Windows\System.Application.SteamTools.Client.Desktop.Platform.Windows.csproj", "{141532E1-540E-4E50-8723-96936C191281}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Win7Troubleshoot", "Win7Troubleshoot\Win7Troubleshoot.csproj", "{60530AF8-4790-4A85-BCE2-C5673E9C601B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{512B0511-41AB-444D-BAD8-E19B7D3B52CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{512B0511-41AB-444D-BAD8-E19B7D3B52CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{512B0511-41AB-444D-BAD8-E19B7D3B52CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{512B0511-41AB-444D-BAD8-E19B7D3B52CB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8B9F2E93-B31B-4BA7-920D-732695A473E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8B9F2E93-B31B-4BA7-920D-732695A473E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8B9F2E93-B31B-4BA7-920D-732695A473E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8B9F2E93-B31B-4BA7-920D-732695A473E6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E7468FDD-75F7-4B08-BA47-B715BBCFCC11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E7468FDD-75F7-4B08-BA47-B715BBCFCC11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E7468FDD-75F7-4B08-BA47-B715BBCFCC11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E7468FDD-75F7-4B08-BA47-B715BBCFCC11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7C8D906E-426B-49AB-9072-178555370F62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7C8D906E-426B-49AB-9072-178555370F62}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7C8D906E-426B-49AB-9072-178555370F62}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7C8D906E-426B-49AB-9072-178555370F62}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F8F6973C-5831-43D1-89C2-1AD543CE7408}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F8F6973C-5831-43D1-89C2-1AD543CE7408}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F8F6973C-5831-43D1-89C2-1AD543CE7408}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F8F6973C-5831-43D1-89C2-1AD543CE7408}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6CD71E14-5036-4A16-8084-4AD108D34FF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6CD71E14-5036-4A16-8084-4AD108D34FF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6CD71E14-5036-4A16-8084-4AD108D34FF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6CD71E14-5036-4A16-8084-4AD108D34FF7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{65DE552F-5E62-4E4F-ADCB-F19AD3DB3F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{65DE552F-5E62-4E4F-ADCB-F19AD3DB3F78}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{65DE552F-5E62-4E4F-ADCB-F19AD3DB3F78}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{65DE552F-5E62-4E4F-ADCB-F19AD3DB3F78}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B9D4C8C7-BF96-417B-A7F8-9A67AE75A38B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B9D4C8C7-BF96-417B-A7F8-9A67AE75A38B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B9D4C8C7-BF96-417B-A7F8-9A67AE75A38B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B9D4C8C7-BF96-417B-A7F8-9A67AE75A38B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0073A08E-6336-4C09-99F9-2E808889D715}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0073A08E-6336-4C09-99F9-2E808889D715}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0073A08E-6336-4C09-99F9-2E808889D715}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0073A08E-6336-4C09-99F9-2E808889D715}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{66B7BFD6-6D4D-421B-BA5B-915348E53708}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{66B7BFD6-6D4D-421B-BA5B-915348E53708}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{66B7BFD6-6D4D-421B-BA5B-915348E53708}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{66B7BFD6-6D4D-421B-BA5B-915348E53708}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A624994-B0A9-4F1F-B7D0-97FE2929936B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0A624994-B0A9-4F1F-B7D0-97FE2929936B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0A624994-B0A9-4F1F-B7D0-97FE2929936B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A624994-B0A9-4F1F-B7D0-97FE2929936B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1F15D97-802E-4AA3-A4A5-B890ABE32897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1F15D97-802E-4AA3-A4A5-B890ABE32897}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1F15D97-802E-4AA3-A4A5-B890ABE32897}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D1F15D97-802E-4AA3-A4A5-B890ABE32897}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2FFA5BCE-B3C3-46EA-8830-838C938BF814}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2FFA5BCE-B3C3-46EA-8830-838C938BF814}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2FFA5BCE-B3C3-46EA-8830-838C938BF814}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2FFA5BCE-B3C3-46EA-8830-838C938BF814}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4F09B6D1-3F83-45A0-AEC8-0F243E7CD263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4F09B6D1-3F83-45A0-AEC8-0F243E7CD263}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4F09B6D1-3F83-45A0-AEC8-0F243E7CD263}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4F09B6D1-3F83-45A0-AEC8-0F243E7CD263}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD2973AE-D1FC-4307-AFE2-EE2945183D3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DD2973AE-D1FC-4307-AFE2-EE2945183D3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DD2973AE-D1FC-4307-AFE2-EE2945183D3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DD2973AE-D1FC-4307-AFE2-EE2945183D3D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D4CF08F5-8EAB-48FB-AAA3-1A221F7B2A82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D4CF08F5-8EAB-48FB-AAA3-1A221F7B2A82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D4CF08F5-8EAB-48FB-AAA3-1A221F7B2A82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D4CF08F5-8EAB-48FB-AAA3-1A221F7B2A82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{948C1EA8-12DB-4F8A-A190-8615DFBD9FE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{948C1EA8-12DB-4F8A-A190-8615DFBD9FE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{948C1EA8-12DB-4F8A-A190-8615DFBD9FE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{948C1EA8-12DB-4F8A-A190-8615DFBD9FE4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{141532E1-540E-4E50-8723-96936C191281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{141532E1-540E-4E50-8723-96936C191281}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{141532E1-540E-4E50-8723-96936C191281}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{141532E1-540E-4E50-8723-96936C191281}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{60530AF8-4790-4A85-BCE2-C5673E9C601B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{60530AF8-4790-4A85-BCE2-C5673E9C601B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{60530AF8-4790-4A85-BCE2-C5673E9C601B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{60530AF8-4790-4A85-BCE2-C5673E9C601B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{512B0511-41AB-444D-BAD8-E19B7D3B52CB} = {DA8EFCA8-5396-48C7-8DC0-CB28A09488D9}
|
||||
{8B9F2E93-B31B-4BA7-920D-732695A473E6} = {9AF522B5-8923-41E6-8A0A-FAE8E8F83439}
|
||||
{E7468FDD-75F7-4B08-BA47-B715BBCFCC11} = {D40853F1-B3C5-418A-B1D3-E0FB70B2F394}
|
||||
{7C8D906E-426B-49AB-9072-178555370F62} = {9AF522B5-8923-41E6-8A0A-FAE8E8F83439}
|
||||
{F8F6973C-5831-43D1-89C2-1AD543CE7408} = {9AF522B5-8923-41E6-8A0A-FAE8E8F83439}
|
||||
{D40853F1-B3C5-418A-B1D3-E0FB70B2F394} = {2D44BDCF-B70C-4C02-BDC8-4F1DD5066A75}
|
||||
{9AF522B5-8923-41E6-8A0A-FAE8E8F83439} = {2D44BDCF-B70C-4C02-BDC8-4F1DD5066A75}
|
||||
{DA8EFCA8-5396-48C7-8DC0-CB28A09488D9} = {2D44BDCF-B70C-4C02-BDC8-4F1DD5066A75}
|
||||
{6CD71E14-5036-4A16-8084-4AD108D34FF7} = {F7AFD002-B231-4A5E-B320-56EFC3210E2C}
|
||||
{65DE552F-5E62-4E4F-ADCB-F19AD3DB3F78} = {F7AFD002-B231-4A5E-B320-56EFC3210E2C}
|
||||
{F7AFD002-B231-4A5E-B320-56EFC3210E2C} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{1460800B-D9ED-4147-B1E7-ABF502BEF59A} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{EBC9DD0C-F7D0-4A00-B263-E69CF4E194F1} = {2D44BDCF-B70C-4C02-BDC8-4F1DD5066A75}
|
||||
{B9D4C8C7-BF96-417B-A7F8-9A67AE75A38B} = {EBC9DD0C-F7D0-4A00-B263-E69CF4E194F1}
|
||||
{0073A08E-6336-4C09-99F9-2E808889D715} = {EBC9DD0C-F7D0-4A00-B263-E69CF4E194F1}
|
||||
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA} = {EBC9DD0C-F7D0-4A00-B263-E69CF4E194F1}
|
||||
{66B7BFD6-6D4D-421B-BA5B-915348E53708} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{0A624994-B0A9-4F1F-B7D0-97FE2929936B} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{D1F15D97-802E-4AA3-A4A5-B890ABE32897} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{2FFA5BCE-B3C3-46EA-8830-838C938BF814} = {1460800B-D9ED-4147-B1E7-ABF502BEF59A}
|
||||
{4F09B6D1-3F83-45A0-AEC8-0F243E7CD263} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{DD2973AE-D1FC-4307-AFE2-EE2945183D3D} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{D4CF08F5-8EAB-48FB-AAA3-1A221F7B2A82} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{948C1EA8-12DB-4F8A-A190-8615DFBD9FE4} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{141532E1-540E-4E50-8723-96936C191281} = {B43459A1-709B-4623-9677-AAC2FEE4FBA3}
|
||||
{60530AF8-4790-4A85-BCE2-C5673E9C601B} = {1460800B-D9ED-4147-B1E7-ABF502BEF59A}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {3833E7C5-69BC-4CB3-92CE-A8854AA35D8A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"solution": {
|
||||
"path": "SteamToolsV2+.sln",
|
||||
"projects": [
|
||||
"references\\ArchiSteamFarm\\ArchiSteamFarm.Library\\ArchiSteamFarm.Library.csproj",
|
||||
"references\\AvaloniaGif\\AvaloniaGif\\AvaloniaGif.csproj",
|
||||
"references\\AvaloniaGif\\LibAPNG\\LibAPNG.csproj",
|
||||
"references\\Steam4NET\\Steam4NET\\Steam4NET.csproj",
|
||||
"references\\SteamAchievementManager\\SAM.API\\SAM.API.csproj",
|
||||
"references\\Titanium-Web-Proxy\\src\\Titanium.Web.Proxy\\Titanium.Web.Proxy.csproj",
|
||||
"references\\WinAuth\\Authenticator\\Authenticator.csproj",
|
||||
"references\\reactive\\Rx.NET\\Source\\src\\System.Reactive\\System.Reactive.csproj",
|
||||
"src\\Avalonia.Native\\Avalonia.Native.csproj",
|
||||
"src\\Avalonia.Themes.Default\\Avalonia.Themes.Default.csproj",
|
||||
"src\\Avalonia.Themes.Fluent\\Avalonia.Themes.Fluent.csproj",
|
||||
"src\\Avalonia.Win32\\Avalonia.Win32.csproj",
|
||||
"src\\Avalonia.X11\\Avalonia.X11.csproj",
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
|
||||
"src\\ST.Client.Android\\ST.Client.Android.csproj",
|
||||
"src\\ST.Client.Desktop.Linux\\ST.Client.Linux.csproj",
|
||||
"src\\ST.Client.Mobile.Droid.App\\ST.Client.Android.App.csproj",
|
||||
"src\\ST.Client.XamarinForms\\ST.Client.XamarinForms.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Avalonia.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia.App\\ST.Client.Avalonia.App.csproj",
|
||||
"src\\ST.Client.iOS\\ST.Client.iOS.csproj",
|
||||
"src\\ST.Client\\ST.Client.csproj",
|
||||
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
|
||||
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
|
||||
"src\\ST.Services.CloudService\\ST.Services.CloudService.csproj",
|
||||
"src\\ST.Tools.AndroidResourceLink\\ST.Tools.AndroidResourceLink.csproj",
|
||||
"src\\ST.Tools.AreaImport\\ST.Tools.AreaImport.csproj",
|
||||
"src\\ST.Tools.MinifyStaticSites\\ST.Tools.MinifyStaticSites.csproj",
|
||||
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
|
||||
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
|
||||
"src\\ST\\ST.csproj",
|
||||
"tests\\Common.UnitTest.Droid.App\\ST.Client.UnitTest.Droid.App.csproj",
|
||||
"tests\\Common.UnitTest.Droid\\ST.Client.UnitTest.Droid.csproj",
|
||||
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
|
||||
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
|
||||
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"solution": {
|
||||
"path": "SteamToolsV2+.sln",
|
||||
"projects": [
|
||||
"references\\ArchiSteamFarm\\ArchiSteamFarm.Library\\ArchiSteamFarm.Library.csproj",
|
||||
"references\\AvaloniaGif\\AvaloniaGif\\AvaloniaGif.csproj",
|
||||
"references\\AvaloniaGif\\LibAPNG\\LibAPNG.csproj",
|
||||
"references\\Steam4NET\\Steam4NET\\Steam4NET.csproj",
|
||||
"references\\SteamAchievementManager\\SAM.API\\SAM.API.csproj",
|
||||
"references\\Titanium-Web-Proxy\\src\\Titanium.Web.Proxy\\Titanium.Web.Proxy.csproj",
|
||||
"references\\WinAuth\\Authenticator\\Authenticator.csproj",
|
||||
"references\\reactive\\Rx.NET\\Source\\src\\System.Reactive\\System.Reactive.csproj",
|
||||
"src\\Avalonia.Native\\Avalonia.Native.csproj",
|
||||
"src\\Avalonia.Themes.Default\\Avalonia.Themes.Default.csproj",
|
||||
"src\\Avalonia.Themes.Fluent\\Avalonia.Themes.Fluent.csproj",
|
||||
"src\\Avalonia.Win32\\Avalonia.Win32.csproj",
|
||||
"src\\Avalonia.X11\\Avalonia.X11.csproj",
|
||||
"src\\Common.AreaLib\\Common.AreaLib.csproj",
|
||||
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
|
||||
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
|
||||
"src\\Common.ClientLib\\Common.ClientLib.csproj",
|
||||
"src\\Common.CoreLib\\Common.CoreLib.csproj",
|
||||
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
|
||||
"src\\ST.Client.Android\\ST.Client.Android.csproj",
|
||||
"src\\ST.Client.Desktop.Mac\\ST.Client.Mac.csproj",
|
||||
"src\\ST.Client.Mobile.Droid.App\\ST.Client.Android.App.csproj",
|
||||
"src\\ST.Client.XamarinForms\\ST.Client.XamarinForms.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Avalonia.csproj",
|
||||
"src\\ST.Client.Desktop.Avalonia.App\\ST.Client.Avalonia.App.csproj",
|
||||
"src\\ST.Client.iOS\\ST.Client.iOS.csproj",
|
||||
"src\\ST.Client\\ST.Client.csproj",
|
||||
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
|
||||
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
|
||||
"src\\ST.Services.CloudService\\ST.Services.CloudService.csproj",
|
||||
"src\\ST.Tools.AndroidResourceLink\\ST.Tools.AndroidResourceLink.csproj",
|
||||
"src\\ST.Tools.AreaImport\\ST.Tools.AreaImport.csproj",
|
||||
"src\\ST.Tools.MinifyStaticSites\\ST.Tools.MinifyStaticSites.csproj",
|
||||
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
|
||||
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
|
||||
"src\\ST\\ST.csproj",
|
||||
"tests\\Common.UnitTest.Droid.App\\ST.Client.UnitTest.Droid.App.csproj",
|
||||
"tests\\Common.UnitTest.Droid\\ST.Client.UnitTest.Droid.csproj",
|
||||
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
|
||||
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
|
||||
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
-1896
File diff suppressed because it is too large
Load Diff
+6
-46
@@ -1,11 +1,10 @@
|
||||
using Polly;
|
||||
using Polly;
|
||||
using SQLite;
|
||||
using System.Application.Entities;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace System.Application.Repositories
|
||||
@@ -35,22 +34,6 @@ namespace System.Application.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
static SQLiteConnection? connectionSync;
|
||||
static SQLiteConnection ConnectionSync
|
||||
{
|
||||
get
|
||||
{
|
||||
if (connectionSync == null)
|
||||
{
|
||||
var dbPath = DataBaseDirectory;
|
||||
IOPath.DirCreateByNotExists(dbPath);
|
||||
dbPath = Path.Combine(dbPath, "application2.dbf"); // 与异步连接使用不同的数据库文件隔离
|
||||
connectionSync = new SQLiteConnection(dbPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache);
|
||||
}
|
||||
return connectionSync;
|
||||
}
|
||||
}
|
||||
|
||||
static SQLiteAsyncConnection GetConnection()
|
||||
{
|
||||
var dbPath = DataBaseDirectory;
|
||||
@@ -59,7 +42,7 @@ namespace System.Application.Repositories
|
||||
return new SQLiteAsyncConnection(dbPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache);
|
||||
}
|
||||
|
||||
static readonly Lazy<SQLiteAsyncConnection> dbConnection = new(GetConnection);
|
||||
static readonly Lazy<SQLiteAsyncConnection> dbConnection = new Lazy<SQLiteAsyncConnection>(GetConnection);
|
||||
|
||||
static SQLiteAsyncConnection DbConnection => dbConnection.Value;
|
||||
|
||||
@@ -74,18 +57,6 @@ namespace System.Application.Repositories
|
||||
return DbConnection;
|
||||
}
|
||||
|
||||
public static SQLiteConnection GetDbConnectionSync<T>()
|
||||
{
|
||||
var conn = ConnectionSync;
|
||||
if (!conn.TableMappings.Any(x => x.MappedType == typeof(T)))
|
||||
{
|
||||
// On sqlite-net v1.6.0+, enabling write-ahead logging allows for faster database execution
|
||||
conn.EnableWriteAheadLogging();
|
||||
conn.CreateTables(CreateFlags.None, typeof(T));
|
||||
}
|
||||
return conn;
|
||||
}
|
||||
|
||||
protected static Task<T> AttemptAndRetry<T>(Func<Task<T>> action, int numRetries = 10)
|
||||
{
|
||||
return Policy.Handle<SQLiteException>().WaitAndRetryAsync(numRetries, pollyRetryAttempt).ExecuteAsync(action);
|
||||
@@ -144,7 +115,7 @@ namespace System.Application.Repositories
|
||||
|
||||
#region 查(通用查询)
|
||||
|
||||
public virtual async Task<TEntity?> FirstOrDefaultAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
|
||||
public virtual async Task<TEntity?> FirstOrDefaultAsync(Expression<Func<TEntity, bool>> predicate)
|
||||
{
|
||||
var dbConnection = await GetDbConnection().ConfigureAwait(false);
|
||||
return await AttemptAndRetry(() => dbConnection.FindAsync(predicate)).ConfigureAwait(false);
|
||||
@@ -184,14 +155,14 @@ namespace System.Application.Repositories
|
||||
|
||||
#region 查(通用查询)
|
||||
|
||||
public virtual async ValueTask<TEntity?> FindAsync(TPrimaryKey primaryKey, CancellationToken cancellationToken = default)
|
||||
public virtual async ValueTask<TEntity?> FindAsync(TPrimaryKey primaryKey)
|
||||
{
|
||||
if (IRepository<TEntity, TPrimaryKey>.IsDefault(primaryKey)) return default;
|
||||
var dbConnection = await GetDbConnection().ConfigureAwait(false);
|
||||
return await AttemptAndRetry(() => dbConnection.FindAsync<TEntity>(primaryKey)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public virtual async ValueTask<bool> ExistAsync(TPrimaryKey primaryKey, CancellationToken cancellationToken = default)
|
||||
public virtual async ValueTask<bool> ExistAsync(TPrimaryKey primaryKey)
|
||||
{
|
||||
if (IRepository<TEntity, TPrimaryKey>.IsDefault(primaryKey)) return false;
|
||||
var dbConnection = await GetDbConnection().ConfigureAwait(false);
|
||||
@@ -207,18 +178,7 @@ namespace System.Application.Repositories
|
||||
public virtual async Task<(int rowCount, DbRowExecResult result)> InsertOrUpdateAsync(TEntity entity)
|
||||
{
|
||||
var dbConnection = await GetDbConnection().ConfigureAwait(false);
|
||||
var rowCount = await AttemptAndRetry(() =>
|
||||
{
|
||||
var primaryKey = GetPrimaryKey(entity);
|
||||
if (IRepository<TEntity, TPrimaryKey>.IsDefault(primaryKey))
|
||||
{
|
||||
return dbConnection.InsertAsync(entity);
|
||||
}
|
||||
else
|
||||
{
|
||||
return dbConnection.InsertOrReplaceAsync(entity);
|
||||
}
|
||||
}).ConfigureAwait(false);
|
||||
var rowCount = await AttemptAndRetry(() => dbConnection.InsertOrReplaceAsync(entity)).ConfigureAwait(false);
|
||||
return (rowCount, DbRowExecResult.InsertOrUpdate);
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
using SQLite;
|
||||
using SQLite;
|
||||
using System.Application.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -34,7 +34,7 @@ namespace System
|
||||
#region Paging
|
||||
|
||||
/// <summary>
|
||||
/// 根据页码进行分页查询,调用此方法前 必须 进行排序
|
||||
/// 分页查询,调用此方法前必须进行排序
|
||||
/// </summary>
|
||||
/// <typeparam name="TEntity"></typeparam>
|
||||
/// <param name="source"></param>
|
||||
@@ -46,7 +46,7 @@ namespace System
|
||||
int current = IPagedModel.DefaultCurrent,
|
||||
int pageSize = IPagedModel.DefaultPageSize) where TEntity : new()
|
||||
{
|
||||
var skipCount = (current - 1) * pageSize;
|
||||
var skipCount = (pageSize - 1) * pageSize;
|
||||
var total = await source.CountAsync();
|
||||
var dataSource = await source.Skip(skipCount).Take(pageSize).ToListAsync();
|
||||
var pagedModel = new PagedModel<TEntity>
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
using System.Application.Columns;
|
||||
using System.Application.Columns;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace System
|
||||
@@ -78,14 +78,14 @@ namespace System
|
||||
/// <returns></returns>
|
||||
public static FormattableString SoftDeleteFromTableNameWhereIdEqual(string tableName, object id)
|
||||
{
|
||||
var sql = Update + tableName + " set " + nameof(ISoftDeleted.SoftDeleted) + " = 1" + WhereIdEqual_0;
|
||||
var sql = UpdateFrom + tableName + " set " + nameof(ISoftDeleted.SoftDeleted) + " = 1" + WhereIdEqual_0;
|
||||
return FormattableStringFactory.Create(sql, id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// "update "
|
||||
/// "update from "
|
||||
/// </summary>
|
||||
public const string Update = "update ";
|
||||
public const string UpdateFrom = "update from ";
|
||||
|
||||
/// <summary>
|
||||
/// " where Id in ("
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\InternalsVisibleTo.cs">
|
||||
<Link>Properties\InternalsVisibleTo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Common.CoreLib\System.Common.CoreLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="sqlite-net-pcl" Version="1.7.335" />
|
||||
<PackageReference Include="Polly" Version="7.2.1" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Application xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:ui="clr-namespace:System.Application.UI"
|
||||
x:Class="System.Application.UI.App">
|
||||
<Application.DataTemplates>
|
||||
<ui:ViewLocator/>
|
||||
</Application.DataTemplates>
|
||||
<Application.Styles>
|
||||
<FluentTheme Mode="Dark" />
|
||||
<StyleInclude Source="/Styles/Styles.xaml" />
|
||||
<StyleInclude Source="/Styles/SideBar.xaml" />
|
||||
<!--<StyleInclude Source="avares://AvaloniaEdit/AvaloniaEdit.xaml"/>-->
|
||||
<Style Selector="Window">
|
||||
<Setter Property="Icon" Value="/Assets/Icon.ico"/>
|
||||
</Style>
|
||||
</Application.Styles>
|
||||
</Application>
|
||||
+12
-1
@@ -1,5 +1,7 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using System.Application.UI.ViewModels;
|
||||
using System.Application.UI.Views;
|
||||
using AvaloniaApplication = Avalonia.Application;
|
||||
|
||||
@@ -14,12 +16,21 @@ namespace System.Application.UI
|
||||
|
||||
public override void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
// ÔÚUIÔ¤ÀÀÖУ¬ApplicationLifetime Ϊ null
|
||||
ViewModelBase.IsInDesignMode = ApplicationLifetime == null;
|
||||
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
desktop.MainWindow = new MainWindow();
|
||||
desktop.MainWindow = new MainWindow
|
||||
{
|
||||
DataContext = DataContext = DI.Get<MainWindowViewModel>(),
|
||||
};
|
||||
desktop.ShutdownMode = ShutdownMode.OnMainWindowClose;
|
||||
}
|
||||
|
||||
base.OnFrameworkInitializationCompleted();
|
||||
}
|
||||
|
||||
public static async void SetClipboardText(string s) => await Current.Clipboard.SetTextAsync(s);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 364 KiB |
@@ -0,0 +1,46 @@
|
||||
using Avalonia.Controls.Primitives;
|
||||
using Avalonia.Platform;
|
||||
using Avalonia.Styling;
|
||||
using System;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Avalonia.Controls
|
||||
{
|
||||
public class FluentWindow : Window, IStyleable
|
||||
{
|
||||
Type IStyleable.StyleKey => typeof(Window);
|
||||
|
||||
public FluentWindow()
|
||||
{
|
||||
ExtendClientAreaToDecorationsHint = true;
|
||||
ExtendClientAreaTitleBarHeightHint = -1;
|
||||
|
||||
TransparencyLevelHint = WindowTransparencyLevel.AcrylicBlur;
|
||||
|
||||
this.GetObservable(WindowStateProperty)
|
||||
.Subscribe(x =>
|
||||
{
|
||||
PseudoClasses.Set(":maximized", x == WindowState.Maximized);
|
||||
PseudoClasses.Set(":fullscreen", x == WindowState.FullScreen);
|
||||
});
|
||||
|
||||
this.GetObservable(IsExtendedIntoWindowDecorationsProperty)
|
||||
.Subscribe(x =>
|
||||
{
|
||||
if (!x)
|
||||
{
|
||||
SystemDecorations = SystemDecorations.Full;
|
||||
TransparencyLevelHint = WindowTransparencyLevel.Blur;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
|
||||
{
|
||||
base.OnApplyTemplate(e);
|
||||
ExtendClientAreaChromeHints =
|
||||
ExtendClientAreaChromeHints.PreferSystemChrome |
|
||||
ExtendClientAreaChromeHints.OSXThickTitleBar;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="clr-namespace:System.Application.UI.ViewModels"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="System.Application.UI.Pages.SettingsPage">
|
||||
<Design.DataContext>
|
||||
<vm:MainWindowViewModel/>
|
||||
</Design.DataContext>
|
||||
<StackPanel HorizontalAlignment="Stretch" Margin="{StaticResource PageMargin}" Background="Transparent" Spacing="20">
|
||||
<Grid RowDefinitions="Auto, Auto, Auto, Auto, Auto, Auto">
|
||||
<StackPanel Orientation="Vertical"
|
||||
HorizontalAlignment="Stretch"
|
||||
Spacing="16">
|
||||
<TextBlock FontSize="18" Text="{Binding Path=SettingsPage.Settings_General}"/>
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="{Binding Path=SettingsPage.Language}" Margin="0 0 0 20"/>
|
||||
<ComboBox HorizontalAlignment="Stretch"
|
||||
SelectedIndex="{Binding Path=SettingsPage.CurrentLanguageIndex}"
|
||||
Items="{Binding Path=SettingsPage.Languages}" />
|
||||
</StackPanel>
|
||||
<Border Background="{DynamicResource SystemControlHighlightBaseLowBrush}" BorderThickness="1" Margin="15"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Vertical"
|
||||
HorizontalAlignment="Stretch"
|
||||
Spacing="16"
|
||||
Grid.Row="1">
|
||||
<TextBlock FontSize="18" Text="{Binding Path=SettingsPage.Settings_Auth}"/>
|
||||
<StackPanel Orientation="Vertical">
|
||||
</StackPanel>
|
||||
<Border Background="{DynamicResource SystemControlHighlightBaseLowBrush}" BorderThickness="1" Margin="15"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
+3
-3
@@ -2,11 +2,11 @@ using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using System.Application.UI.ViewModels;
|
||||
|
||||
namespace System.Application.UI.Views.Pages
|
||||
namespace System.Application.UI.Pages
|
||||
{
|
||||
public class About_DonatePage : UserControl
|
||||
public class SettingsPage : UserControl
|
||||
{
|
||||
public About_DonatePage()
|
||||
public SettingsPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using Avalonia;
|
||||
using Avalonia.ReactiveUI;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using System.Application.UI.ViewModels;
|
||||
|
||||
namespace System.Application.UI
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
// Initialization code. Don't use any Avalonia, third-party APIs or any
|
||||
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
|
||||
// yet and stuff might break.
|
||||
[STAThread]
|
||||
static void Main(string[] args)
|
||||
{
|
||||
ModelValidatorProvider.Init();
|
||||
DI.Init(ConfigureServices);
|
||||
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||||
}
|
||||
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
static AppBuilder BuildAvaloniaApp()
|
||||
=> AppBuilder.Configure<App>()
|
||||
.UsePlatformDetect()
|
||||
.With(new SkiaOptions { MaxGpuResourceSizeBytes = 8096000 })
|
||||
.With(new Win32PlatformOptions { AllowEglInitialization = true })
|
||||
.LogToTrace()
|
||||
.UseReactiveUI();
|
||||
|
||||
static void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddLogging(l => l.AddProvider(NullLoggerProvider.Instance));
|
||||
services.AddDesktopPlatformService();
|
||||
services.TryAddModelValidator();
|
||||
services.AddLocalizationService();
|
||||
services.AddMainThreadPlatformService();
|
||||
services.AddViewModelCollectionService();
|
||||
services.AddViewModel<MainWindowViewModel>();
|
||||
services.AddViewModel<SettingsPageViewModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
-6
@@ -1,20 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>PUBLISH;LINUX;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>PUBLISH;$(DefineConstants)</DefineConstants>
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
<Platform>Any CPU</Platform>
|
||||
<PublishDir>bin\Release\Publish\linux-x64</PublishDir>
|
||||
<PublishProtocol>FileSystem</PublishProtocol>
|
||||
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<SelfContained>true</SelfContained>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishReadyToRun>false</PublishReadyToRun>
|
||||
<PublishTrimmed>True</PublishTrimmed>
|
||||
<TrimMode>link</TrimMode>
|
||||
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
|
||||
<DebugType>none</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
+8
-7
@@ -1,20 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>MAC;PUBLISH;$(DefineConstants)</DefineConstants>
|
||||
<DefineConstants>PUBLISH;$(DefineConstants)</DefineConstants>
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
<Platform>Any CPU</Platform>
|
||||
<PublishDir>bin\Release\Publish\osx-x64</PublishDir>
|
||||
<PublishProtocol>FileSystem</PublishProtocol>
|
||||
<RuntimeIdentifier>osx.10.14-x64</RuntimeIdentifier>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
|
||||
<SelfContained>true</SelfContained>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishReadyToRun>false</PublishReadyToRun>
|
||||
<PublishTrimmed>True</PublishTrimmed>
|
||||
<TrimMode>link</TrimMode>
|
||||
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
|
||||
<DebugType>none</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
+11
-14
@@ -1,34 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>PUBLISH;$(DefineConstants)</DefineConstants>
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
<Platform>Any CPU</Platform>
|
||||
<PublishDir>bin\Release\Publish\win-x64</PublishDir>
|
||||
<PublishProtocol>FileSystem</PublishProtocol>
|
||||
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<SelfContained>true</SelfContained>
|
||||
<PublishSingleFile>True</PublishSingleFile>
|
||||
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
||||
<PublishTrimmed>false</PublishTrimmed>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishReadyToRun>true</PublishReadyToRun>
|
||||
<!--可以通过将应用程序集编译为 ReadyToRun (R2R) 格式来改进 .NET Core 应用程序的启动时间和延迟。 R2R 是一种预先 (AOT) 编译形式 https://docs.microsoft.com/zh-cn/dotnet/core/deploying/ready-to-run-->
|
||||
<PublishTrimmed>True</PublishTrimmed>
|
||||
<TrimMode>link</TrimMode>
|
||||
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
|
||||
<!--剪裁框架库功能 https://docs.microsoft.com/zh-cn/dotnet/core/deploying/trimming-options#trimming-framework-library-features-->
|
||||
<DebuggerSupport>false</DebuggerSupport>
|
||||
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
|
||||
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
|
||||
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
|
||||
<EventSourceSupport>false</EventSourceSupport>
|
||||
<HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
|
||||
<UseSystemResourceKeys>false</UseSystemResourceKeys>
|
||||
<UseSystemResourceKeys>true</UseSystemResourceKeys>
|
||||
<DebugType>none</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<PublishReadyToRun>false</PublishReadyToRun>
|
||||
<!-- set to true to enable publishing with ready to run native code -->
|
||||
<PublishReadyToRunUseCrossgen2>true</PublishReadyToRunUseCrossgen2>
|
||||
<!-- set to false to use crossgen like in 5.0 -->
|
||||
<PublishReadyToRunComposite>true</PublishReadyToRunComposite>
|
||||
<!-- set to true to generate a composite R2R image -->
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<!-- UAC 清单选项
|
||||
如果想要更改 Windows 用户帐户控制级别,请使用
|
||||
以下节点之一替换 requestedExecutionLevel 节点。n
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
|
||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false"/>
|
||||
|
||||
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
|
||||
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
|
||||
元素。
|
||||
-->
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
|
||||
Windows 版本的列表。取消评论适当的元素,
|
||||
Windows 将自动选择最兼容的环境。 -->
|
||||
|
||||
<!-- Windows Vista -->
|
||||
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
|
||||
|
||||
<!--Windows 7-->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
|
||||
<!--Windows 8-->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
|
||||
<!--Windows 8.1-->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
|
||||
<!--Windows 10-->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
|
||||
<!-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
|
||||
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
|
||||
选择加入。选择加入此设置的 Windows 窗体应用程序(目标设定为 .NET Framework 4.6 )还应
|
||||
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。-->
|
||||
<!--
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
-->
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
|
||||
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
|
||||
<!--
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0"
|
||||
processorArchitecture="*"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*"/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
-->
|
||||
</assembly>
|
||||
@@ -0,0 +1,74 @@
|
||||
<Styles xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Design.PreviewWith>
|
||||
<Border Padding="20">
|
||||
<TabControl Classes="sidebar">
|
||||
<TabItem Header="Item1"/>
|
||||
<TabItem Header="Item2"/>
|
||||
</TabControl>
|
||||
</Border>
|
||||
</Design.PreviewWith>
|
||||
<Style Selector="TabControl.sidebar">
|
||||
<Setter Property="TabStripPlacement" Value="Left"/>
|
||||
<Setter Property="Padding" Value="0 0 0 0"/>
|
||||
<Setter Property="Background" Value="{x:Null}"/>
|
||||
<Setter Property="Template">
|
||||
<ControlTemplate>
|
||||
<Border
|
||||
Margin="{TemplateBinding Margin}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<DockPanel>
|
||||
<ScrollViewer Width="240" Margin="0 30 0 0"
|
||||
Name="PART_ScrollViewer"
|
||||
HorizontalScrollBarVisibility="{TemplateBinding (ScrollViewer.HorizontalScrollBarVisibility)}"
|
||||
VerticalScrollBarVisibility="{TemplateBinding (ScrollViewer.VerticalScrollBarVisibility)}"
|
||||
Background="{TemplateBinding Background}"
|
||||
DockPanel.Dock="Left">
|
||||
<ItemsPresenter
|
||||
Name="PART_ItemsPresenter"
|
||||
Items="{TemplateBinding Items}"
|
||||
ItemsPanel="{TemplateBinding ItemsPanel}"
|
||||
ItemTemplate="{TemplateBinding ItemTemplate}">
|
||||
</ItemsPresenter>
|
||||
</ScrollViewer>
|
||||
<ContentControl Content="{TemplateBinding Tag}" HorizontalContentAlignment="Right" DockPanel.Dock="Bottom"/>
|
||||
<ScrollViewer Background="{x:Null}"
|
||||
HorizontalScrollBarVisibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedItem.(ScrollViewer.HorizontalScrollBarVisibility)}"
|
||||
VerticalScrollBarVisibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedItem.(ScrollViewer.VerticalScrollBarVisibility)}">
|
||||
<ContentPresenter
|
||||
Name="PART_SelectedContentHost"
|
||||
Margin="{TemplateBinding Padding}"
|
||||
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
Content="{TemplateBinding SelectedContent}"
|
||||
ContentTemplate="{TemplateBinding SelectedContentTemplate}">
|
||||
</ContentPresenter>
|
||||
</ScrollViewer>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style Selector="TabControl.sidebar > TabItem">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="FontSize" Value="14"/>
|
||||
<Setter Property="Margin" Value="0"/>
|
||||
<Setter Property="Padding" Value="16"/>
|
||||
<Setter Property="Width" Value="240" />
|
||||
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
|
||||
<Setter Property="(ScrollViewer.HorizontalScrollBarVisibility)" Value="Auto"/>
|
||||
<Setter Property="(ScrollViewer.VerticalScrollBarVisibility)" Value="Auto"/>
|
||||
</Style>
|
||||
<Style Selector="TabControl.sidebar > TabItem:selected /template/ Border#PART_SelectedPipe">
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</Style>
|
||||
<Style Selector="TabControl.sidebar > TabItem:selected">
|
||||
<Setter Property="Background" Value="#1fffffff"/>
|
||||
</Style>
|
||||
|
||||
<Style Selector="TabControl.sidebar > TabItem:pointerover /template/ Border#PART_LayoutRoot">
|
||||
<Setter Property="Background" Value="#3fffffff"/>
|
||||
</Style>
|
||||
</Styles>
|
||||
@@ -0,0 +1,18 @@
|
||||
<Styles xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Design.PreviewWith>
|
||||
<Border Padding="20">
|
||||
<StackPanel Spacing="5">
|
||||
<TextBlock Text="Code Font Family" FontFamily="{StaticResource CodeFontFamily}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Design.PreviewWith>
|
||||
<Styles.Resources>
|
||||
<Thickness x:Key="PageMargin">40 0 40 0</Thickness>
|
||||
<!--<FontFamily x:Key="CodeFontFamily">avares://Steam++/Assets/Fonts#Source Code Pro</FontFamily>-->
|
||||
</Styles.Resources>
|
||||
|
||||
<Style Selector="TextBlock.code">
|
||||
<!--<Setter Property="FontFamily" Value="{StaticResource CodeFontFamily}" />-->
|
||||
</Style>
|
||||
</Styles>
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<SignAssembly>false</SignAssembly>
|
||||
<!--(SignAssembly)对此程序集进行签名会导致编译失败(CompileAvaloniaXamlTask)-->
|
||||
<RootNamespace>System.Application.UI</RootNamespace>
|
||||
<AssemblyName>Steam++</AssemblyName>
|
||||
<ApplicationIcon>Assets\Icon.ico</ApplicationIcon>
|
||||
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Avalonia\System.Application.SteamTools.Client.Desktop.Avalonia.csproj" />
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform\System.Application.SteamTools.Client.Desktop.Platform.csproj" />
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop\System.Application.SteamTools.Client.Desktop.csproj" />
|
||||
<ProjectReference Include="..\System.Common.CoreLib\System.Common.CoreLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" $(RuntimeIdentifier.Contains(`win`)) Or ('$(OS)' == 'Windows_NT' And !$(DefineConstants.Contains(`PUBLISH`))) ">
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform.Windows\System.Application.SteamTools.Client.Desktop.Platform.Windows.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" $(RuntimeIdentifier.Contains(`osx`)) Or ('$(OS)' == 'OSX' And !$(DefineConstants.Contains(`PUBLISH`))) ">
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform.Mac\System.Application.SteamTools.Client.Desktop.Platform.Mac.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" $(RuntimeIdentifier.Contains(`linux`)) Or ('$(OS)' == 'Unix' And !$(DefineConstants.Contains(`PUBLISH`))) ">
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform.Linux\System.Application.SteamTools.Client.Desktop.Platform.Linux.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MessageBox.Avalonia" Version="1.0.5">
|
||||
<Aliases>MessageBox_Avalonia</Aliases>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="**\*.xaml.cs">
|
||||
<DependentUpon>%(Filename)</DependentUpon>
|
||||
</Compile>
|
||||
<AvaloniaResource Include="**\*.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
</AvaloniaResource>
|
||||
<AvaloniaResource Include="Assets\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AvaloniaResource Remove="Styles\SideBar.axaml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AvaloniaXaml Remove="Styles\SideBar.axaml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="..\Resources\AppIcon\VisualElements_150.png">
|
||||
<Link>Assets\VisualElements_150.png</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Resources\AppIcon\VisualElements_70.png">
|
||||
<Link>Assets\VisualElements_70.png</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Resources\AppIcon\visualelementsmanifest.xml">
|
||||
<Link>steam++.visualelementsmanifest.xml</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
+2
-4
@@ -1,7 +1,5 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Templates;
|
||||
using Avalonia.Media;
|
||||
using System.Application.UI.ViewModels;
|
||||
|
||||
namespace System.Application.UI
|
||||
@@ -24,7 +22,7 @@ namespace System.Application.UI
|
||||
return view;
|
||||
}
|
||||
}
|
||||
return new TextBlock { Text = "Not Found: " + name, Padding = Thickness.Parse("24, 4, 24, 24"), FontWeight = FontWeight.Bold, FontSize = 22, };
|
||||
return new TextBlock { Text = "Not Found: " + name };
|
||||
}
|
||||
|
||||
public bool Match(object data)
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
using ReactiveUI;
|
||||
using System.Properties;
|
||||
|
||||
namespace System.Application.UI.ViewModels
|
||||
{
|
||||
public class MainWindowViewModel : WindowViewModel
|
||||
{
|
||||
bool mTopmost;
|
||||
|
||||
public bool Topmost
|
||||
{
|
||||
get => mTopmost;
|
||||
set => this.RaiseAndSetIfChanged(ref mTopmost, value);
|
||||
}
|
||||
|
||||
public MainWindowViewModel() : base()
|
||||
{
|
||||
Title = ThisAssembly.AssemblyTrademark;
|
||||
SettingsPage = GetViewModel<SettingsPageViewModel>();
|
||||
}
|
||||
|
||||
#region ResStrings
|
||||
|
||||
string mWelcome = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string Welcome
|
||||
{
|
||||
get => mWelcome;
|
||||
set => this.RaiseAndSetIfChanged(ref mWelcome, value);
|
||||
}
|
||||
|
||||
string mCommunityFix = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string CommunityFix
|
||||
{
|
||||
get => mCommunityFix;
|
||||
set => this.RaiseAndSetIfChanged(ref mCommunityFix, value);
|
||||
}
|
||||
|
||||
string mUserFastChange = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string UserFastChange
|
||||
{
|
||||
get => mUserFastChange;
|
||||
set => this.RaiseAndSetIfChanged(ref mUserFastChange, value);
|
||||
}
|
||||
|
||||
string mSteamApps = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string SteamApps
|
||||
{
|
||||
get => mSteamApps;
|
||||
set => this.RaiseAndSetIfChanged(ref mSteamApps, value);
|
||||
}
|
||||
|
||||
string mSteamAuth = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string SteamAuth
|
||||
{
|
||||
get => mSteamAuth;
|
||||
set => this.RaiseAndSetIfChanged(ref mSteamAuth, value);
|
||||
}
|
||||
|
||||
string mGameRelated = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string GameRelated
|
||||
{
|
||||
get => mGameRelated;
|
||||
set => this.RaiseAndSetIfChanged(ref mGameRelated, value);
|
||||
}
|
||||
|
||||
string mSettings = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string Settings
|
||||
{
|
||||
get => mSettings;
|
||||
set => this.RaiseAndSetIfChanged(ref mSettings, value);
|
||||
}
|
||||
|
||||
string mAbout = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string About
|
||||
{
|
||||
get => mAbout;
|
||||
set => this.RaiseAndSetIfChanged(ref mAbout, value);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public SettingsPageViewModel SettingsPage { get; }
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
using Avalonia.Controls;
|
||||
using ReactiveUI;
|
||||
using System.Application.Services;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace System.Application.UI.ViewModels
|
||||
{
|
||||
public class SettingsPageViewModel : ViewModelBase, ILocalizationViewModel
|
||||
{
|
||||
#region ResStrings
|
||||
|
||||
string mSettings_General = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string Settings_General
|
||||
{
|
||||
get => mSettings_General;
|
||||
set => this.RaiseAndSetIfChanged(ref mSettings_General, value);
|
||||
}
|
||||
|
||||
string mSettings_Auth = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string Settings_Auth
|
||||
{
|
||||
get => mSettings_Auth;
|
||||
set => this.RaiseAndSetIfChanged(ref mSettings_Auth, value);
|
||||
}
|
||||
|
||||
string mLanguage = string.Empty;
|
||||
|
||||
[ResString]
|
||||
public string Language
|
||||
{
|
||||
get => mLanguage;
|
||||
set => this.RaiseAndSetIfChanged(ref mLanguage, value);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public SettingsPageViewModel()
|
||||
{
|
||||
Languages = ILocalizationService.Languages.Select(Convert).ToList();
|
||||
}
|
||||
|
||||
int mCurrentLanguageIndex;
|
||||
|
||||
public int CurrentLanguageIndex
|
||||
{
|
||||
get => mCurrentLanguageIndex;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref mCurrentLanguageIndex, value);
|
||||
if (!IsInDesignMode)
|
||||
{
|
||||
var localizationService = DI.Get<ILocalizationService>();
|
||||
var cultureName = Languages[value].Tag?.ToString();
|
||||
if (string.IsNullOrWhiteSpace(cultureName))
|
||||
{
|
||||
cultureName = localizationService.DefaultCurrentUICulture?.Name;
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(cultureName))
|
||||
{
|
||||
localizationService.ChangeLanguage(cultureName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<ComboBoxItem> Languages { get; }
|
||||
|
||||
static ComboBoxItem Convert(KeyValuePair<string, string> pair)
|
||||
=> new ComboBoxItem { Tag = pair.Key, Content = pair.Value };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="clr-namespace:System.Application.UI.ViewModels"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="1350" d:DesignHeight="700"
|
||||
xmlns:pages="clr-namespace:System.Application.UI.Pages"
|
||||
x:Class="System.Application.UI.Views.MainView"
|
||||
FontSize="14"
|
||||
Foreground="{StaticResource SystemBaseHighColor}">
|
||||
<Design.DataContext>
|
||||
<vm:MainWindowViewModel/>
|
||||
</Design.DataContext>
|
||||
<Panel>
|
||||
<DockPanel HorizontalAlignment="Stretch">
|
||||
<ExperimentalAcrylicBorder DockPanel.Dock="Left" Width="240">
|
||||
<ExperimentalAcrylicBorder.Material>
|
||||
<ExperimentalAcrylicMaterial TintColor="Black" MaterialOpacity="0.85" TintOpacity="1"/>
|
||||
</ExperimentalAcrylicBorder.Material>
|
||||
<!--<AutoCompleteBox HorizontalAlignment="Stretch" Margin="20 40 20 0" Watermark="Search" Items="{Binding SearchItems}" />-->
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Height="110" VerticalAlignment="Top">
|
||||
<Image Source="/Assets/Icon.ico" Height="64" Width="64" VerticalAlignment="Center" Margin="-8,0,0,0"/>
|
||||
<Label Content="Steam++" VerticalContentAlignment="Center" FontSize="20" Margin="8,0,0,0"/>
|
||||
</StackPanel>
|
||||
</ExperimentalAcrylicBorder>
|
||||
<ExperimentalAcrylicBorder IsHitTestVisible="False">
|
||||
<ExperimentalAcrylicBorder.Material>
|
||||
<ExperimentalAcrylicMaterial TintColor="#222222" MaterialOpacity="0.85" TintOpacity="1"/>
|
||||
</ExperimentalAcrylicBorder.Material>
|
||||
<TextBlock Text="{Binding #TabControl.SelectedItem.Header}" Margin="40 20" FontSize="32" FontWeight="Light"/>
|
||||
</ExperimentalAcrylicBorder>
|
||||
</DockPanel>
|
||||
|
||||
<TabControl x:Name="TabControl" Classes="sidebar" Margin="0 40 0 20">
|
||||
<TabItem Header="{Binding Path=Welcome}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=CommunityFix}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=UserFastChange}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=SteamAuth}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=SteamAuth}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=GameRelated}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=Settings}">
|
||||
<pages:SettingsPage />
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Path=About}">
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
</Panel>
|
||||
</UserControl>
|
||||
+3
-4
@@ -1,12 +1,11 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using System.Application.UI.ViewModels;
|
||||
|
||||
namespace System.Application.UI.Views.Pages
|
||||
namespace System.Application.UI.Views
|
||||
{
|
||||
public class About_OpenSourcePage : UserControl
|
||||
public class MainView : UserControl
|
||||
{
|
||||
public About_OpenSourcePage()
|
||||
public MainView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<FluentWindow xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="clr-namespace:System.Application.UI.ViewModels"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d"
|
||||
d:DesignWidth="1350" Width="1400" MinWidth="800"
|
||||
d:DesignHeight="700" Height="800" MinHeight="600"
|
||||
xmlns:pages="clr-namespace:System.Application.UI.Pages"
|
||||
xmlns:local="clr-namespace:System.Application.UI.Views"
|
||||
x:Class="System.Application.UI.Views.MainWindow"
|
||||
x:Name="MainWindow"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Background="{x:Null}"
|
||||
Title="{Binding Title}"
|
||||
Topmost="{Binding Topmost}">
|
||||
<FluentWindow.Styles>
|
||||
<Style Selector="TitleBar:fullscreen">
|
||||
<Setter Property="Background" Value="#7f000000" />
|
||||
</Style>
|
||||
</FluentWindow.Styles>
|
||||
|
||||
<Design.DataContext>
|
||||
<vm:MainWindowViewModel/>
|
||||
</Design.DataContext>
|
||||
|
||||
<Panel Margin="{Binding #MainWindow.OffScreenMargin}">
|
||||
<local:MainView />
|
||||
</Panel>
|
||||
</FluentWindow>
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using System.Windows;
|
||||
using System.Application.UI.ViewModels;
|
||||
|
||||
namespace System.Application.UI.Views
|
||||
{
|
||||
public class MainWindow : Window
|
||||
public class MainWindow : FluentWindow
|
||||
{
|
||||
public MainWindow()
|
||||
{
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
using Avalonia.Threading;
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
internal sealed class MainThreadPlatformServiceImpl : IMainThreadPlatformService
|
||||
{
|
||||
public bool PlatformIsMainThread => Dispatcher.UIThread.CheckAccess();
|
||||
|
||||
public void PlatformBeginInvokeOnMainThread(Action action) => Dispatcher.UIThread.Post(action);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddMainThreadPlatformService(this IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<IMainThreadPlatformService, MainThreadPlatformServiceImpl>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<RootNamespace>System</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop\System.Application.SteamTools.Client.Desktop.csproj" />
|
||||
<ProjectReference Include="..\System.Common.CoreLib\System.Common.CoreLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" Version="0.10.0" />
|
||||
<PackageReference Include="Avalonia.Desktop" Version="0.10.0" />
|
||||
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.0" />
|
||||
<PackageReference Include="MessageBox.Avalonia" Version="1.0.5">
|
||||
<Aliases>MessageBox_Avalonia</Aliases>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<PackageReference Include="Avalonia.Diagnostics" Version="0.10.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,113 @@
|
||||
extern alias MessageBox_Avalonia;
|
||||
|
||||
using Avalonia.Controls;
|
||||
using MessageBox_Avalonia::MessageBox.Avalonia;
|
||||
using MessageBox_Avalonia::MessageBox.Avalonia.BaseWindows.Base;
|
||||
using MessageBox_Avalonia::MessageBox.Avalonia.DTO;
|
||||
using MessageBox_Avalonia::MessageBox.Avalonia.Enums;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Windows
|
||||
{
|
||||
/// <summary>
|
||||
/// 显示消息框。
|
||||
/// </summary>
|
||||
public static class MessageBox
|
||||
{
|
||||
static ButtonEnum GetButtonEnum(this MessageBoxButton button) => button switch
|
||||
{
|
||||
MessageBoxButton.OK => ButtonEnum.Ok,
|
||||
MessageBoxButton.OKCancel => ButtonEnum.OkCancel,
|
||||
MessageBoxButton.YesNo => ButtonEnum.YesNo,
|
||||
MessageBoxButton.YesNoCancel => ButtonEnum.YesNoCancel,
|
||||
#pragma warning disable CS0618 // 类型或成员已过时
|
||||
MessageBoxButton.OkAbort => ButtonEnum.OkAbort,
|
||||
MessageBoxButton.YesNoAbort => ButtonEnum.YesNoAbort,
|
||||
#pragma warning restore CS0618 // 类型或成员已过时
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(button), $"value: {button}"),
|
||||
};
|
||||
|
||||
static Icon GetIcon(this MessageBoxImage icon) => icon switch
|
||||
{
|
||||
MessageBoxImage.Asterisk => Icon.Info,
|
||||
MessageBoxImage.Error => Icon.Error,
|
||||
MessageBoxImage.Exclamation => Icon.Warning,
|
||||
MessageBoxImage.None => Icon.None,
|
||||
#pragma warning disable CS0618 // 类型或成员已过时
|
||||
MessageBoxImage.Question => Icon.Info,
|
||||
MessageBoxImage.Battery => Icon.Battery,
|
||||
MessageBoxImage.Database => Icon.Database,
|
||||
MessageBoxImage.Folder => Icon.Folder,
|
||||
MessageBoxImage.Forbidden => Icon.Forbidden,
|
||||
MessageBoxImage.Plus => Icon.Plus,
|
||||
MessageBoxImage.Setting => Icon.Setting,
|
||||
MessageBoxImage.SpeakerLess => Icon.SpeakerLess,
|
||||
MessageBoxImage.SpeakerMore => Icon.SpeakerMore,
|
||||
MessageBoxImage.Stop2 => Icon.Stop,
|
||||
MessageBoxImage.Stopwatch => Icon.Stopwatch,
|
||||
MessageBoxImage.Wifi => Icon.Wifi,
|
||||
#pragma warning restore CS0618 // 类型或成员已过时
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(icon), $"value: {icon}"),
|
||||
};
|
||||
|
||||
static MessageBoxResult GetResult(this ButtonResult result) => result switch
|
||||
{
|
||||
ButtonResult.Ok => MessageBoxResult.OK,
|
||||
ButtonResult.Yes => MessageBoxResult.Yes,
|
||||
ButtonResult.No => MessageBoxResult.No,
|
||||
#pragma warning disable CS0618 // 类型或成员已过时
|
||||
ButtonResult.Abort => MessageBoxResult.Abort,
|
||||
#pragma warning restore CS0618 // 类型或成员已过时
|
||||
ButtonResult.Cancel => MessageBoxResult.Cancel,
|
||||
ButtonResult.None => MessageBoxResult.None,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(result), $"value: {result}"),
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 显示一个消息框,该消息框包含消息、标题栏标题、按钮和图标,并且返回结果。
|
||||
/// </summary>
|
||||
/// <param name="messageBoxText">一个 <see cref="string"/>,用于指定要显示的文本。</param>
|
||||
/// <param name="caption">一个 <see cref="string"/>,用于指定要显示的标题栏标题。</param>
|
||||
/// <param name="button">一个 <see cref="MessageBoxButton"/> 值,用于指定要显示哪个按钮或哪些按钮。</param>
|
||||
/// <param name="icon">一个 <see cref="MessageBoxImage"/> 值,用于指定要显示的图标。</param>
|
||||
/// <returns>一个 <see cref="MessageBoxResult"/> 值,用于指定用户单击了哪个消息框按钮。</returns>
|
||||
public static async Task<MessageBoxResult> ShowAsync(
|
||||
string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon)
|
||||
{
|
||||
var parms = new MessageBoxStandardParams
|
||||
{
|
||||
ButtonDefinitions = button.GetButtonEnum(),
|
||||
ContentTitle = caption,
|
||||
ContentMessage = messageBoxText,
|
||||
Icon = icon.GetIcon(),
|
||||
Style = Style.None,
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen,
|
||||
};
|
||||
var msBoxStandardWindow = MessageBoxManager.GetMessageBoxStandardWindow(parms);
|
||||
var window = GetWindow(msBoxStandardWindow);
|
||||
if (window != null)
|
||||
{
|
||||
window.Topmost = true;
|
||||
window.SetResizeMode(ResizeMode.NoResize);
|
||||
window.SetDefaultFontFamily();
|
||||
}
|
||||
var result = await msBoxStandardWindow.Show();
|
||||
return GetResult(result);
|
||||
}
|
||||
|
||||
static Window? GetWindow(IMsBoxWindow<ButtonResult> window)
|
||||
{
|
||||
var _window = window.GetType().GetField("_window", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
if (_window != null && _window.FieldType.IsSubclassOf(typeof(Window)))
|
||||
{
|
||||
if (_window.GetValue(window) is Window w)
|
||||
{
|
||||
return w;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Windows
|
||||
{
|
||||
/// <summary>
|
||||
/// 指定显示在消息框上的按钮。 用作 <see cref="MessageBox"/>.Show... 方法的参数。
|
||||
/// </summary>
|
||||
public enum MessageBoxButton
|
||||
{
|
||||
OK = 0,
|
||||
OKCancel = 1,
|
||||
YesNo = 4,
|
||||
YesNoCancel = 3,
|
||||
|
||||
[Obsolete("non-standard api")]
|
||||
OkAbort = 1000,
|
||||
[Obsolete("non-standard api")]
|
||||
YesNoAbort = 1001,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Windows
|
||||
{
|
||||
/// <summary>
|
||||
/// 指定消息框所显示的图标。
|
||||
/// </summary>
|
||||
public enum MessageBoxImage
|
||||
{
|
||||
#pragma warning disable CA1069 // 不应复制枚举值
|
||||
Asterisk = 64,
|
||||
Error = 16,
|
||||
Exclamation = 48,
|
||||
Hand = 16,
|
||||
Information = 64,
|
||||
None = 0,
|
||||
[Obsolete("The question mark message icon is no longer recommended because it does not clearly represent a specific type of message and because the phrasing of a message as a question could apply to any message type. In addition, users can confuse the question mark symbol with a help information symbol. Therefore, do not use this question mark symbol in your message boxes. The system continues to support its inclusion only for backward compatibility.")]
|
||||
Question = 32,
|
||||
Stop = 16,
|
||||
Warning = 48,
|
||||
|
||||
[Obsolete("non-standard api")]
|
||||
Battery = 1000,
|
||||
[Obsolete("non-standard api")]
|
||||
Database,
|
||||
[Obsolete("non-standard api")]
|
||||
Folder,
|
||||
[Obsolete("non-standard api")]
|
||||
Forbidden,
|
||||
[Obsolete("non-standard api")]
|
||||
Plus,
|
||||
[Obsolete("non-standard api")]
|
||||
Setting,
|
||||
[Obsolete("non-standard api")]
|
||||
SpeakerLess,
|
||||
[Obsolete("non-standard api")]
|
||||
SpeakerMore,
|
||||
[Obsolete("non-standard api")]
|
||||
Stop2,
|
||||
[Obsolete("non-standard api")]
|
||||
Stopwatch,
|
||||
[Obsolete("non-standard api")]
|
||||
Wifi,
|
||||
#pragma warning restore CA1069 // 不应复制枚举值
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Windows
|
||||
{
|
||||
/// <summary>
|
||||
/// 指定用户单击的消息框按钮。 由 <see cref="MessageBox"/>.Show... 方法返回。
|
||||
/// </summary>
|
||||
public enum MessageBoxResult
|
||||
{
|
||||
Cancel = 2,
|
||||
No = 7,
|
||||
None = 0,
|
||||
OK = 1,
|
||||
Yes = 6,
|
||||
|
||||
[Obsolete("non-standard api")]
|
||||
Abort = 1000,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Application.Services;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Windows
|
||||
{
|
||||
/// <summary>
|
||||
/// 指定是否可以调整窗口大小,并在可调整大小的情况下指定如何调整窗口大小。由 SetResizeMode 使用。
|
||||
/// </summary>
|
||||
public enum ResizeMode
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户无法调整窗口的大小。 不显示 "最大化" 和 "最小化" 框。
|
||||
/// </summary>
|
||||
NoResize = IDesktopPlatformService.ResizeMode_NoResize,
|
||||
|
||||
/// <summary>
|
||||
/// 用户只能最小化窗口并从任务栏还原。 同时显示 "最小化" 和 "最大化" 框,但只启用 "最小化" 框。
|
||||
/// </summary>
|
||||
CanMinimize = IDesktopPlatformService.ResizeMode_CanMinimize,
|
||||
|
||||
/// <summary>
|
||||
/// 用户可以通过使用 "最小化" 和 "最大化" 框以及围绕窗口的可拖动轮廓来完全调整窗口的大小。 显示和启用 "最小化" 和 "最大化" 框。 (默认) 。
|
||||
/// </summary>
|
||||
CanResize = IDesktopPlatformService.ResizeMode_CanResize,
|
||||
|
||||
/// <summary>
|
||||
/// 此选项具有与相同的功能 <see cref="CanResize"/> ,但会将 "调整手柄" 添加到窗口的右下角。
|
||||
/// </summary>
|
||||
[Obsolete("not implemented")]
|
||||
CanResizeWithGrip = IDesktopPlatformService.ResizeMode_CanResizeWithGrip,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using System.Application.Services;
|
||||
using System.IO;
|
||||
using FontFamily = Avalonia.Media.FontFamily;
|
||||
using Window = Avalonia.Controls.Window;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Windows
|
||||
{
|
||||
/// <summary>
|
||||
/// 通过扩展兼容WPF部分API的内容
|
||||
/// </summary>
|
||||
public static partial class WpfCompatExtensions
|
||||
{
|
||||
static readonly Lazy<bool> lazy_has_msyh = new Lazy<bool>(() =>
|
||||
{
|
||||
if (DI.Platform == Platform.Windows)
|
||||
{
|
||||
var fontsPath = Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
|
||||
var msyhFilePath = Path.Combine(fontsPath, "msyh.ttc");
|
||||
return File.Exists(msyhFilePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
public static bool HAS_FONT_MSYH => lazy_has_msyh.Value;
|
||||
|
||||
public static void SetDefaultFontFamily(this Window window)
|
||||
{
|
||||
if (DI.Platform == Platform.Windows)
|
||||
{
|
||||
if (HAS_FONT_MSYH) // (版权、许可)不能在非WinOS上使用 微软雅黑字体,不可将字体嵌入程序
|
||||
{
|
||||
string name;
|
||||
var major = Environment.OSVersion.Version.Major;
|
||||
if (major > 6 || (major == 6 && Environment.OSVersion.Version.Minor >= 2))
|
||||
{
|
||||
name = "Microsoft YaHei UI";
|
||||
}
|
||||
else
|
||||
{
|
||||
name = "Microsoft YaHei";
|
||||
}
|
||||
window.FontFamily = new FontFamily(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置调整大小模式。
|
||||
/// </summary>
|
||||
/// <param name="window"></param>
|
||||
/// <param name="value"></param>
|
||||
public static void SetResizeMode(this Window window, ResizeMode value)
|
||||
{
|
||||
var p = DI.Get<IDesktopPlatformService>();
|
||||
switch (value)
|
||||
{
|
||||
case ResizeMode.NoResize:
|
||||
case ResizeMode.CanMinimize:
|
||||
window.CanResize = false;
|
||||
break;
|
||||
case ResizeMode.CanResize:
|
||||
#pragma warning disable CS0618 // 类型或成员已过时
|
||||
case ResizeMode.CanResizeWithGrip:
|
||||
#pragma warning restore CS0618 // 类型或成员已过时
|
||||
window.CanResize = true;
|
||||
break;
|
||||
}
|
||||
p.SetResizeMode(window.PlatformImpl.Handle.Handle, (int)value);
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
internal sealed class LinuxDesktopPlatformServiceImpl : IDesktopPlatformService
|
||||
{
|
||||
public void SetResizeMode(IntPtr hWnd, int value)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddDesktopPlatformService(this IServiceCollection services)
|
||||
{
|
||||
if (DI.Platform == Platform.Linux)
|
||||
{
|
||||
services.AddSingleton<IDesktopPlatformService, LinuxDesktopPlatformServiceImpl>();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<RootNamespace>System.Application.Services</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform\System.Application.SteamTools.Client.Desktop.Platform.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
internal sealed class MacDesktopPlatformServiceImpl : IDesktopPlatformService
|
||||
{
|
||||
public void SetResizeMode(IntPtr hWnd, int value)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddDesktopPlatformService(this IServiceCollection services)
|
||||
{
|
||||
if (DI.Platform == Platform.Apple)
|
||||
{
|
||||
services.AddSingleton<IDesktopPlatformService, MacDesktopPlatformServiceImpl>();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<RootNamespace>System.Application.Services</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform\System.Application.SteamTools.Client.Desktop.Platform.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
+9
-31
@@ -1,42 +1,20 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Versioning;
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
partial class WindowsPlatformServiceImpl
|
||||
[SupportedOSPlatform("Windows")]
|
||||
internal sealed class WindowsDesktopPlatformServiceImpl : IDesktopPlatformService
|
||||
{
|
||||
/// <inheritdoc cref="IPlatformService.DwmIsCompositionEnabled"/>
|
||||
[DllImport("dwmapi.dll", PreserveSig = false)]
|
||||
static extern bool DwmIsCompositionEnabled();
|
||||
|
||||
bool IPlatformService.DwmIsCompositionEnabled => DwmIsCompositionEnabled();
|
||||
|
||||
#region 窗口右上角的三个按钮(最小化,最大化,关闭)
|
||||
|
||||
// https://stackoverflow.com/questions/339620/how-do-i-remove-minimize-and-maximize-from-a-resizable-window-in-wpf
|
||||
// https://blog.magnusmontin.net/2014/11/30/disabling-or-hiding-the-minimize-maximize-or-close-button-of-a-wpf-window/
|
||||
// https://straub.as/csharp/wpf/systembuttons.html
|
||||
|
||||
public const int MF_BYCOMMAND = 0x00000000;
|
||||
public const int SC_CLOSE = 0xF060;
|
||||
public const int SC_MINIMIZE = 0xF020;
|
||||
public const int SC_MAXIMIZE = 0xF030;
|
||||
//public const int CS_DROPSHADOW = 0x20000;
|
||||
|
||||
void IPlatformService.SetWindowSystemButtonsIsVisible(IntPtr hWnd, bool isVisible)
|
||||
{
|
||||
// https://stackoverflow.com/questions/5114389/how-make-sure-aero-effect-is-enabled
|
||||
var value = GetWindowLong(hWnd, GWL_STYLE);
|
||||
if (isVisible)
|
||||
{
|
||||
value |= WS_SYSMENU;
|
||||
}
|
||||
else
|
||||
{
|
||||
value &= ~WS_SYSMENU;
|
||||
}
|
||||
_ = SetWindowLong(hWnd, GWL_STYLE, value);
|
||||
}
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int DeleteMenu(IntPtr hMenu, int nPosition, int wFlags);
|
||||
@@ -49,10 +27,10 @@ namespace System.Application.Services.Implementation
|
||||
WS_MINIMIZEBOX = 0x20000;
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int GetWindowLong(IntPtr hwnd, int index);
|
||||
public extern static int GetWindowLong(IntPtr hwnd, int index);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int SetWindowLong(IntPtr hwnd, int index, int value);
|
||||
public extern static int SetWindowLong(IntPtr hwnd, int index, int value);
|
||||
|
||||
public const int WS_SYSMENU = 0x80000;
|
||||
|
||||
@@ -91,16 +69,16 @@ namespace System.Application.Services.Implementation
|
||||
_ = SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
|
||||
}
|
||||
|
||||
public void SetResizeMode(IntPtr hWnd, ResizeMode value)
|
||||
public void SetResizeMode(IntPtr hWnd, int value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case ResizeMode.NoResize:
|
||||
case IDesktopPlatformService.ResizeMode_NoResize:
|
||||
_ = DeleteMenu(GetSystemMenu(hWnd, false), SC_MAXIMIZE, MF_BYCOMMAND);
|
||||
_ = DeleteMenu(GetSystemMenu(hWnd, false), SC_MINIMIZE, MF_BYCOMMAND);
|
||||
HideMinimizeAndMaximizeButtons(hWnd);
|
||||
break;
|
||||
case ResizeMode.CanMinimize:
|
||||
case IDesktopPlatformService.ResizeMode_CanMinimize:
|
||||
_ = DeleteMenu(GetSystemMenu(hWnd, false), SC_MAXIMIZE, MF_BYCOMMAND);
|
||||
DisableMaximizeButton(hWnd);
|
||||
break;
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddDesktopPlatformService(this IServiceCollection services)
|
||||
{
|
||||
if (DI.Platform == Platform.Windows)
|
||||
{
|
||||
services.AddSingleton<IDesktopPlatformService, WindowsDesktopPlatformServiceImpl>();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new PlatformNotSupportedException();
|
||||
}
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<RootNamespace>System.Application.Services</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform\System.Application.SteamTools.Client.Desktop.Platform.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,14 @@
|
||||
using ResizeMode = System.Int32;
|
||||
|
||||
namespace System.Application.Services
|
||||
{
|
||||
public interface IDesktopPlatformService
|
||||
{
|
||||
void SetResizeMode(IntPtr hWnd, ResizeMode value);
|
||||
|
||||
public const ResizeMode ResizeMode_NoResize = 0;
|
||||
public const ResizeMode ResizeMode_CanMinimize = 1;
|
||||
public const ResizeMode ResizeMode_CanResize = 2;
|
||||
public const ResizeMode ResizeMode_CanResizeWithGrip = 3;
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
public class DesktopPlatformServiceImpl : IDesktopPlatformService
|
||||
{
|
||||
public void SetResizeMode(IntPtr hWnd, int value)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<RootNamespace>System.Application.Services</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client\System.Application.SteamTools.Client.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,133 @@
|
||||
using System.Threading.Tasks;
|
||||
using static System.Application.Services.IMainThreadPlatformService;
|
||||
|
||||
namespace System.Application
|
||||
{
|
||||
/// <summary>
|
||||
/// 适用于桌面端的主线程帮助类,参考 Xamarin.Essentials.MainThread
|
||||
/// <para><see cref="https://github.com/xamarin/Essentials/blob/main/Xamarin.Essentials/MainThread/MainThread.shared.cs"/></para>
|
||||
/// </summary>
|
||||
public static class MainThreadDesktop
|
||||
{
|
||||
public static bool IsMainThread => Instance.PlatformIsMainThread;
|
||||
|
||||
public static void BeginInvokeOnMainThread(Action action)
|
||||
{
|
||||
if (IsMainThread)
|
||||
{
|
||||
action();
|
||||
}
|
||||
else
|
||||
{
|
||||
Instance.PlatformBeginInvokeOnMainThread(action);
|
||||
}
|
||||
}
|
||||
|
||||
public static Task InvokeOnMainThreadAsync(Action action)
|
||||
{
|
||||
if (IsMainThread)
|
||||
{
|
||||
action();
|
||||
#if NETSTANDARD1_0
|
||||
return Task.FromResult(true);
|
||||
#else
|
||||
return Task.CompletedTask;
|
||||
#endif
|
||||
}
|
||||
|
||||
var tcs = new TaskCompletionSource<bool>();
|
||||
|
||||
BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
tcs.TrySetResult(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
tcs.TrySetException(ex);
|
||||
}
|
||||
});
|
||||
|
||||
return tcs.Task;
|
||||
}
|
||||
|
||||
public static Task<T> InvokeOnMainThreadAsync<T>(Func<T> func)
|
||||
{
|
||||
if (IsMainThread)
|
||||
{
|
||||
return Task.FromResult(func());
|
||||
}
|
||||
|
||||
var tcs = new TaskCompletionSource<T>();
|
||||
|
||||
BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = func();
|
||||
tcs.TrySetResult(result);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
tcs.TrySetException(ex);
|
||||
}
|
||||
});
|
||||
|
||||
return tcs.Task;
|
||||
}
|
||||
|
||||
public static Task InvokeOnMainThreadAsync(Func<Task> funcTask)
|
||||
{
|
||||
if (IsMainThread)
|
||||
{
|
||||
return funcTask();
|
||||
}
|
||||
|
||||
var tcs = new TaskCompletionSource<object?>();
|
||||
|
||||
BeginInvokeOnMainThread(
|
||||
async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await funcTask().ConfigureAwait(false);
|
||||
tcs.SetResult(null);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
tcs.SetException(e);
|
||||
}
|
||||
});
|
||||
|
||||
return tcs.Task;
|
||||
}
|
||||
|
||||
public static Task<T> InvokeOnMainThreadAsync<T>(Func<Task<T>> funcTask)
|
||||
{
|
||||
if (IsMainThread)
|
||||
{
|
||||
return funcTask();
|
||||
}
|
||||
|
||||
var tcs = new TaskCompletionSource<T>();
|
||||
|
||||
BeginInvokeOnMainThread(
|
||||
async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var ret = await funcTask().ConfigureAwait(false);
|
||||
tcs.SetResult(ret);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
tcs.SetException(e);
|
||||
}
|
||||
});
|
||||
|
||||
return tcs.Task;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System.Application.Services;
|
||||
using System.Application.Services.Implementation;
|
||||
using System.Application.UI.ViewModels;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 添加本地化、多语言服务
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection AddLocalizationService(this IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<ILocalizationService, LocalizationServiceImpl>();
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加视图模型组服务
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection AddViewModelCollectionService(this IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton(new ViewModelCollectionServiceImpl(services));
|
||||
services.AddSingleton<IViewModelCollectionService>(s => s.GetRequiredService<ViewModelCollectionServiceImpl>());
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加视图模型
|
||||
/// </summary>
|
||||
/// <typeparam name="TViewModel"></typeparam>
|
||||
/// <param name="services"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection AddViewModel<TViewModel>(this IServiceCollection services) where TViewModel : ViewModelBase
|
||||
{
|
||||
services.AddSingleton<TViewModel>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System.Application.UI.ViewModels;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
|
||||
namespace System.Application.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 本地化、多语言服务
|
||||
/// </summary>
|
||||
public interface ILocalizationService
|
||||
{
|
||||
CultureInfo DefaultCurrentUICulture { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 更改语言
|
||||
/// </summary>
|
||||
/// <param name="cultureName"></param>
|
||||
void ChangeLanguage(string cultureName);
|
||||
|
||||
/// <summary>
|
||||
/// 绑定资源字符串的视图模型组
|
||||
/// </summary>
|
||||
ILocalizationViewModel[] ViewModels { get; }
|
||||
|
||||
public static IList<KeyValuePair<string, string>> Languages;
|
||||
|
||||
static ILocalizationService()
|
||||
{
|
||||
Languages = new Dictionary<string, string>()
|
||||
{
|
||||
{ "", "Auto" },
|
||||
{ "en", "English" },
|
||||
{ "zh-Hans", "Chinese(Simplified)" },
|
||||
{ "zh-Hant", "Chinese(Traditional)" },
|
||||
}.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
namespace System.Application.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 由平台实现的主线程帮助类
|
||||
/// </summary>
|
||||
public interface IMainThreadPlatformService
|
||||
{
|
||||
bool PlatformIsMainThread { get; }
|
||||
|
||||
void PlatformBeginInvokeOnMainThread(Action action);
|
||||
|
||||
public static IMainThreadPlatformService Instance => DI.Get<IMainThreadPlatformService>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.Application.UI.ViewModels;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace System.Application.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 视图模型组服务
|
||||
/// </summary>
|
||||
public interface IViewModelCollectionService
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所有的视图模型
|
||||
/// </summary>
|
||||
IEnumerable<ViewModelBase> ViewModels { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 根据类型过滤获取视图模型
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
IEnumerable<T> GetViewModels<T>();
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
using System.Application.UI.ViewModels;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
internal sealed class LocalizationServiceImpl : ILocalizationService
|
||||
{
|
||||
readonly IViewModelCollectionService vmss;
|
||||
|
||||
public LocalizationServiceImpl(IViewModelCollectionService vmss)
|
||||
{
|
||||
this.vmss = vmss;
|
||||
DefaultCurrentUICulture = CultureInfo.CurrentUICulture;
|
||||
}
|
||||
|
||||
public CultureInfo DefaultCurrentUICulture { get; }
|
||||
|
||||
ILocalizationViewModel[]? viewModels;
|
||||
|
||||
public ILocalizationViewModel[] ViewModels
|
||||
{
|
||||
get
|
||||
{
|
||||
if (viewModels == null)
|
||||
{
|
||||
viewModels = vmss.GetViewModels<ILocalizationViewModel>().ToArray();
|
||||
}
|
||||
return viewModels;
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsMatch(CultureInfo cultureInfo, string cultureName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(cultureInfo.Name))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (cultureInfo.Name == cultureName)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return IsMatch(cultureInfo.Parent, cultureName);
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeLanguage(string cultureName)
|
||||
{
|
||||
if (IsMatch(CultureInfo.CurrentUICulture, cultureName)) return;
|
||||
if (!ViewModels.Any()) return;
|
||||
void ChangeLanguage()
|
||||
{
|
||||
CultureInfo.CurrentUICulture = new CultureInfo(cultureName);
|
||||
foreach (var viewModel in ViewModels)
|
||||
{
|
||||
viewModel.OnChangeLanguage();
|
||||
}
|
||||
}
|
||||
MainThreadDesktop.BeginInvokeOnMainThread(ChangeLanguage);
|
||||
}
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Application.UI.ViewModels;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace System.Application.Services.Implementation
|
||||
{
|
||||
internal sealed class ViewModelCollectionServiceImpl : IViewModelCollectionService
|
||||
{
|
||||
readonly IEnumerable<ServiceDescriptor> services;
|
||||
|
||||
public ViewModelCollectionServiceImpl(IEnumerable<ServiceDescriptor> services)
|
||||
{
|
||||
this.services = services;
|
||||
}
|
||||
|
||||
public IEnumerable<ViewModelBase> ViewModels => GetViewModels<ViewModelBase>();
|
||||
|
||||
public IEnumerable<T> GetViewModels<T>()
|
||||
{
|
||||
var tType = typeof(T);
|
||||
var vType = typeof(ViewModelBase);
|
||||
var tIsvType = tType == vType;
|
||||
return from s in services
|
||||
where s.ServiceType == s.ImplementationType &&
|
||||
s.Lifetime == ServiceLifetime.Singleton &&
|
||||
tType.IsAssignableFrom(s.ImplementationType) &&
|
||||
(tIsvType || vType.IsAssignableFrom(s.ImplementationType))
|
||||
select (T)DI.Get(s.ServiceType);
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
-10
@@ -1,25 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<RootNamespace>System.Application</RootNamespace>
|
||||
<AssemblyName>System.Application.SteamTools.Server.Resources</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\..\SteamTools\src\Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Compile Include="..\System.Common.CoreLib\Properties\AssemblyInfo.cs">
|
||||
<Link>Properties\AssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SteamTools\src\Common.CoreLib\Properties\AssemblyInfo.Version.cs">
|
||||
<Link>Properties\AssemblyInfo.Version.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SteamTools\src\ST\Properties\InternalsVisibleTo.cs">
|
||||
<Link>Properties\InternalsVisibleTo.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Common.CoreLib\Common.CoreLib.csproj" />
|
||||
<PackageReference Include="ReactiveUI" Version="13.1.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client.Desktop.Platform\System.Application.SteamTools.Client.Desktop.Platform.csproj" />
|
||||
<ProjectReference Include="..\System.Application.SteamTools.Client\System.Application.SteamTools.Client.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
+52
-34
@@ -8,7 +8,7 @@
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Application.Properties {
|
||||
namespace System.Application.UI.Resx {
|
||||
using System;
|
||||
|
||||
|
||||
@@ -19,27 +19,27 @@ namespace System.Application.Properties {
|
||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class SR {
|
||||
public class AppResources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal SR() {
|
||||
internal AppResources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 返回此类使用的缓存的 ResourceManager 实例。
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
public static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Application.Properties.SR", typeof(SR).Assembly);
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Application.UI.Resx.AppResources", typeof(AppResources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
@@ -51,7 +51,7 @@ namespace System.Application.Properties {
|
||||
/// 使用此强类型资源类的所有资源查找执行重写。
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
public static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
@@ -61,83 +61,101 @@ namespace System.Application.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 客户端已过时,请升级新版本 的本地化字符串。
|
||||
/// 查找类似 关于 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ApiResponseCode_AppObsolete {
|
||||
public static string About {
|
||||
get {
|
||||
return ResourceManager.GetString("ApiResponseCode_AppObsolete", resourceCulture);
|
||||
return ResourceManager.GetString("About", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 当前系统时间不正确或服务端 SSL 证书失效 的本地化字符串。
|
||||
/// 查找类似 社区加速 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ApiResponseCode_CertificateNotYetValid {
|
||||
public static string CommunityFix {
|
||||
get {
|
||||
return ResourceManager.GetString("ApiResponseCode_CertificateNotYetValid", resourceCulture);
|
||||
return ResourceManager.GetString("CommunityFix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 登录凭证失效,请重新登录 的本地化字符串。
|
||||
/// 查找类似 库存游戏 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ApiResponseCode_Unauthorized {
|
||||
public static string GameList {
|
||||
get {
|
||||
return ResourceManager.GetString("ApiResponseCode_Unauthorized", resourceCulture);
|
||||
return ResourceManager.GetString("GameList", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 客户端错误 {0} 的本地化字符串。
|
||||
/// 查找类似 游戏功能 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ClientError_ {
|
||||
public static string GameRelated {
|
||||
get {
|
||||
return ResourceManager.GetString("ClientError_", resourceCulture);
|
||||
return ResourceManager.GetString("GameRelated", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 客户端错误 {0} - {1} 的本地化字符串。
|
||||
/// 查找类似 语言 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ClientError__ {
|
||||
public static string Language {
|
||||
get {
|
||||
return ResourceManager.GetString("ClientError__", resourceCulture);
|
||||
return ResourceManager.GetString("Language", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 当前运行的程序不是来自官方渠道 的本地化字符串。
|
||||
/// 查找类似 设置 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string IsNotOfficialChannelPackageWarning {
|
||||
public static string Settings {
|
||||
get {
|
||||
return ResourceManager.GetString("IsNotOfficialChannelPackageWarning", resourceCulture);
|
||||
return ResourceManager.GetString("Settings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 网络连接中断 的本地化字符串。
|
||||
/// 查找类似 令牌设置 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string NetworkConnectionInterruption {
|
||||
public static string Settings_Auth {
|
||||
get {
|
||||
return ResourceManager.GetString("NetworkConnectionInterruption", resourceCulture);
|
||||
return ResourceManager.GetString("Settings_Auth", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 服务端错误 {0} 的本地化字符串。
|
||||
/// 查找类似 基本设置 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ServerError_ {
|
||||
public static string Settings_General {
|
||||
get {
|
||||
return ResourceManager.GetString("ServerError_", resourceCulture);
|
||||
return ResourceManager.GetString("Settings_General", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 服务端错误 {0} - {1} 的本地化字符串。
|
||||
/// 查找类似 本地令牌 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ServerError__ {
|
||||
public static string SteamAuth {
|
||||
get {
|
||||
return ResourceManager.GetString("ServerError__", resourceCulture);
|
||||
return ResourceManager.GetString("SteamAuth", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 账号切换 的本地化字符串。
|
||||
/// </summary>
|
||||
public static string UserFastChange {
|
||||
get {
|
||||
return ResourceManager.GetString("UserFastChange", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 起始页 的本地化字符串。
|
||||
/// </summary>
|
||||
public static string Welcome {
|
||||
get {
|
||||
return ResourceManager.GetString("Welcome", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name="CommunityFix" xml:space="preserve">
|
||||
<value>Fix Steam 302 Error</value>
|
||||
</data>
|
||||
<data name="GameList" xml:space="preserve">
|
||||
<value>My Games</value>
|
||||
</data>
|
||||
<data name="GameRelated" xml:space="preserve">
|
||||
<value>Game Related</value>
|
||||
</data>
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Settings</value>
|
||||
</data>
|
||||
<data name="Settings_Auth" xml:space="preserve">
|
||||
<value>Auth Settings</value>
|
||||
</data>
|
||||
<data name="Settings_General" xml:space="preserve">
|
||||
<value>General Settings</value>
|
||||
</data>
|
||||
<data name="SteamAuth" xml:space="preserve">
|
||||
<value>Steam Auth</value>
|
||||
</data>
|
||||
<data name="UserFastChange" xml:space="preserve">
|
||||
<value>Account Change</value>
|
||||
</data>
|
||||
<data name="Welcome" xml:space="preserve">
|
||||
<value>Start Page</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>关于</value>
|
||||
</data>
|
||||
<data name="CommunityFix" xml:space="preserve">
|
||||
<value>社区加速</value>
|
||||
</data>
|
||||
<data name="GameList" xml:space="preserve">
|
||||
<value>库存游戏</value>
|
||||
</data>
|
||||
<data name="GameRelated" xml:space="preserve">
|
||||
<value>游戏功能</value>
|
||||
</data>
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>设置</value>
|
||||
</data>
|
||||
<data name="Settings_Auth" xml:space="preserve">
|
||||
<value>令牌设置</value>
|
||||
</data>
|
||||
<data name="Settings_General" xml:space="preserve">
|
||||
<value>基本设置</value>
|
||||
</data>
|
||||
<data name="SteamAuth" xml:space="preserve">
|
||||
<value>本地令牌</value>
|
||||
</data>
|
||||
<data name="UserFastChange" xml:space="preserve">
|
||||
<value>账号切换</value>
|
||||
</data>
|
||||
<data name="Welcome" xml:space="preserve">
|
||||
<value>起始页</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>關於</value>
|
||||
</data>
|
||||
<data name="CommunityFix" xml:space="preserve">
|
||||
<value>社區加速</value>
|
||||
</data>
|
||||
<data name="GameList" xml:space="preserve">
|
||||
<value>遊戲列表</value>
|
||||
</data>
|
||||
<data name="GameRelated" xml:space="preserve">
|
||||
<value>遊戲功能</value>
|
||||
</data>
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>語言</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>設定</value>
|
||||
</data>
|
||||
<data name="Settings_Auth" xml:space="preserve">
|
||||
<value>令牌設定</value>
|
||||
</data>
|
||||
<data name="Settings_General" xml:space="preserve">
|
||||
<value>基本設定</value>
|
||||
</data>
|
||||
<data name="SteamAuth" xml:space="preserve">
|
||||
<value>本地令牌</value>
|
||||
</data>
|
||||
<data name="UserFastChange" xml:space="preserve">
|
||||
<value>帳號切換</value>
|
||||
</data>
|
||||
<data name="Welcome" xml:space="preserve">
|
||||
<value>起始頁</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,27 @@
|
||||
using System.Application.UI.Resx;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace System.Application.UI.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// 本地化、多语言视图模型
|
||||
/// </summary>
|
||||
public interface ILocalizationViewModel
|
||||
{
|
||||
public void OnChangeLanguage()
|
||||
{
|
||||
var properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
var query = from p in properties
|
||||
let attr = p.GetCustomAttribute<ResStringAttribute>()
|
||||
where p.PropertyType == typeof(string) && attr != null
|
||||
select (p, attr.ResId);
|
||||
foreach (var (p, ResId) in query)
|
||||
{
|
||||
var resId = ResId ?? p.Name;
|
||||
var value = AppResources.ResourceManager.GetString(resId);
|
||||
p.SetValue(this, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace System.Application.UI.ViewModels
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Property)]
|
||||
public sealed class ResStringAttribute : Attribute
|
||||
{
|
||||
public string? ResId { get; }
|
||||
|
||||
public ResStringAttribute(string? resId = null)
|
||||
{
|
||||
ResId = resId;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using ReactiveUI;
|
||||
|
||||
namespace System.Application.UI.ViewModels
|
||||
{
|
||||
public class ViewModelBase : ReactiveObject, ILocalizationViewModel
|
||||
{
|
||||
public ViewModelBase()
|
||||
{
|
||||
ILocalizationViewModel localization = this;
|
||||
localization.OnChangeLanguage();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否在设计器的上下文中运行
|
||||
/// </summary>
|
||||
public static bool IsInDesignMode { get; set; }
|
||||
|
||||
protected static TViewModel GetViewModel<TViewModel>() where TViewModel : ViewModelBase, new()
|
||||
{
|
||||
if (IsInDesignMode) return new TViewModel();
|
||||
return DI.Get<TViewModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using ReactiveUI;
|
||||
|
||||
namespace System.Application.UI.ViewModels
|
||||
{
|
||||
public class WindowViewModel : ViewModelBase
|
||||
{
|
||||
string title = string.Empty;
|
||||
|
||||
public string Title
|
||||
{
|
||||
get => title;
|
||||
set => this.RaiseAndSetIfChanged(ref title, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.IO;
|
||||
using System.IO;
|
||||
|
||||
namespace System.Application
|
||||
{
|
||||
@@ -45,5 +45,12 @@ namespace System.Application
|
||||
IOPath.DirCreateByNotExists(path);
|
||||
return path;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
|
||||
[Obsolete("use GetPath", true)]
|
||||
public static string GetFolderPath(this AppFolder folder) => folder.GetPath();
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
+1
-5
@@ -1,10 +1,9 @@
|
||||
using SQLite;
|
||||
using System.Diagnostics;
|
||||
using SQLiteTable = SQLite.TableAttribute;
|
||||
|
||||
namespace System.Application.Entities
|
||||
{
|
||||
[SQLiteTable("D5428AED")]
|
||||
[Table("D5428AED")]
|
||||
[DebuggerDisplay("{DebuggerDisplay,nq}")]
|
||||
public sealed class User : IEntity<Guid>
|
||||
{
|
||||
@@ -19,8 +18,5 @@ namespace System.Application.Entities
|
||||
|
||||
[Column("4C12F9EE")]
|
||||
public Guid? Avatar { get; set; }
|
||||
|
||||
[Column("654D00DA")]
|
||||
public byte[]? UserInfo { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.Application.Services.CloudService;
|
||||
|
||||
namespace System.Application
|
||||
{
|
||||
public static class ImageUrlHelper
|
||||
{
|
||||
static string ApiBaseUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
var client = DI.Get<CloudServiceClientBase>();
|
||||
return client.ApiBaseUrl;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取图片的APIURL(相对路径)
|
||||
/// </summary>
|
||||
const string GetImageApiUrl = "{1}/api/images/{0}";
|
||||
|
||||
/// <summary>
|
||||
/// 根据图片Id获取APIURL(绝对路径)
|
||||
/// </summary>
|
||||
/// <param name="imageId"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetImageApiUrlById(Guid imageId) => string.Format(GetImageApiUrl, imageId, ApiBaseUrl);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace System.Application
|
||||
{
|
||||
public static class KeyConstants
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前登录用户
|
||||
/// </summary>
|
||||
public const string KEY_CURRENT_LOGIN_USER = "KEY_CURRENT_LOGIN_USER";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using System.Security.Cryptography;
|
||||
using MPIgnore = MessagePack.IgnoreMemberAttribute;
|
||||
using MPKey = MessagePack.KeyAttribute;
|
||||
using MPObj = MessagePack.MessagePackObjectAttribute;
|
||||
using N_JsonIgnore = Newtonsoft.Json.JsonIgnoreAttribute;
|
||||
using N_JsonProperty = Newtonsoft.Json.JsonPropertyAttribute;
|
||||
using S_JsonIgnore = System.Text.Json.Serialization.JsonIgnoreAttribute;
|
||||
using S_JsonProperty = System.Text.Json.Serialization.JsonPropertyNameAttribute;
|
||||
|
||||
namespace System.Application.Models
|
||||
{
|
||||
[MPObj]
|
||||
public sealed class AppSettings : IAppSettings, ICloudServiceSettings
|
||||
{
|
||||
[MPKey(0)]
|
||||
[N_JsonProperty("0")]
|
||||
[S_JsonProperty("0")]
|
||||
public Guid AppVersion { get; set; }
|
||||
|
||||
[MPKey(1)]
|
||||
[N_JsonProperty("1")]
|
||||
[S_JsonProperty("1")]
|
||||
public string? ApiBaseUrl { get; set; }
|
||||
|
||||
[MPKey(2)]
|
||||
[N_JsonProperty("2")]
|
||||
[S_JsonProperty("2")]
|
||||
public byte[]? AesSecret { get; set; }
|
||||
|
||||
Aes? aes;
|
||||
|
||||
[MPIgnore]
|
||||
[N_JsonIgnore]
|
||||
[S_JsonIgnore]
|
||||
public Aes Aes
|
||||
{
|
||||
get
|
||||
{
|
||||
if (aes == null)
|
||||
{
|
||||
if (AesSecret == null) throw new ArgumentNullException(nameof(AesSecret));
|
||||
aes = AESUtils.Create(AesSecret);
|
||||
}
|
||||
return aes;
|
||||
}
|
||||
}
|
||||
|
||||
[MPKey(3)]
|
||||
[N_JsonProperty("3")]
|
||||
[S_JsonProperty("3")]
|
||||
public string? AppSecretVisualStudioAppCenter { get; set; }
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -10,7 +10,7 @@ namespace System.Application.Models
|
||||
/// 当前登录用户模型,如需增加字段,还需要在 <see cref="Clone"/> 中赋值新添加字段
|
||||
/// </summary>
|
||||
[MPObj]
|
||||
public sealed class CurrentUser : IExplicitHasValue, IPhoneNumber
|
||||
public sealed class CurrentUser : ILoginResponse, IExplicitHasValue, IPhoneNumber
|
||||
{
|
||||
[MPKey(0)]
|
||||
[N_JsonProperty("0")]
|
||||
@@ -20,7 +20,7 @@ namespace System.Application.Models
|
||||
[MPKey(1)]
|
||||
[N_JsonProperty("1")]
|
||||
[S_JsonProperty("1")]
|
||||
public JWTEntity? AuthToken { get; set; }
|
||||
public string? AuthToken { get; set; }
|
||||
|
||||
[MPKey(2)]
|
||||
[N_JsonProperty("2")]
|
||||
@@ -29,7 +29,7 @@ namespace System.Application.Models
|
||||
|
||||
bool IExplicitHasValue.ExplicitHasValue()
|
||||
{
|
||||
if (!AuthToken.HasValue()) return false;
|
||||
if (string.IsNullOrWhiteSpace(AuthToken)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
+5
-14
@@ -1,4 +1,4 @@
|
||||
namespace System.Application
|
||||
namespace System.Application
|
||||
{
|
||||
/// <summary>
|
||||
/// 通知渠道类型(一个渠道可包含一个或多个<see cref="NotificationType"/>)
|
||||
@@ -23,20 +23,11 @@ namespace System.Application
|
||||
/// </summary>
|
||||
public enum NotificationChannelType
|
||||
{
|
||||
/// <inheritdoc cref="NotificationType.NewVersion"/>
|
||||
NewVersion = 2,
|
||||
|
||||
/// <inheritdoc cref="NotificationType.Announcement"/>
|
||||
Announcement,
|
||||
|
||||
/// <inheritdoc cref="NotificationType.Message"/>
|
||||
Message,
|
||||
|
||||
/// <summary>
|
||||
/// Android 前台服务
|
||||
/// <para><see cref="NotificationType.ProxyForegroundService"/></para>
|
||||
/// <para><see cref="NotificationType.ArchiSteamFarmForegroundService"/></para>
|
||||
/// 新版本
|
||||
/// <para>例如:</para>
|
||||
/// <para>新版本下载进度</para>
|
||||
/// </summary>
|
||||
ForegroundService,
|
||||
NewVersion = 2,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
namespace System.Application
|
||||
{
|
||||
/// <summary>
|
||||
/// 通知类型
|
||||
/// <list type="bullet">
|
||||
/// <item>
|
||||
/// <term>iOS:</term>
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// <term>Android:将枚举转换为 <see cref="int"/> 用作 Android.App.NotificationManager 中的 id</term>
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// <term>UWP:</term>
|
||||
/// </item>
|
||||
/// <item>
|
||||
/// <term>Win32:</term>
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// <para>添加新的枚举常量注意事项:</para>
|
||||
/// <para>(客户端)如果要显示在设备的通知栏上,则需要在<see cref="NotificationType_Channel_EnumExtensions.GetChannel(NotificationType)"/>中添加对应渠道</para>
|
||||
/// </summary>
|
||||
public enum NotificationType
|
||||
{
|
||||
/// <summary>
|
||||
/// 新版本下载进度
|
||||
/// </summary>
|
||||
NewVersionDownloadProgress = 7,
|
||||
}
|
||||
}
|
||||
+8
-20
@@ -1,14 +1,12 @@
|
||||
using System.Application.Properties;
|
||||
using System.Application.Properties;
|
||||
using System.Application.Services;
|
||||
using System.Application.UI.Resx;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System.Application
|
||||
{
|
||||
/// <summary>
|
||||
/// Enum 扩展 <see cref="NotificationType"/> AND <see cref="NotificationChannelType"/>
|
||||
/// </summary>
|
||||
public static partial class NotificationType_Channel_EnumExtensions
|
||||
public static class NotificationType_Channel_EnumExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所属的通知渠道
|
||||
@@ -18,11 +16,7 @@ namespace System.Application
|
||||
/// <exception cref="ArgumentOutOfRangeException"></exception>
|
||||
public static NotificationChannelType GetChannel(this NotificationType value) => value switch
|
||||
{
|
||||
NotificationType.Announcement => NotificationChannelType.Announcement,
|
||||
NotificationType.NewVersion => NotificationChannelType.NewVersion,
|
||||
NotificationType.Message => NotificationChannelType.Message,
|
||||
NotificationType.ProxyForegroundService or
|
||||
NotificationType.ArchiSteamFarmForegroundService => NotificationChannelType.ForegroundService,
|
||||
NotificationType.NewVersionDownloadProgress => NotificationChannelType.NewVersion,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(value), value, null),
|
||||
};
|
||||
|
||||
@@ -36,10 +30,7 @@ namespace System.Application
|
||||
{
|
||||
return value switch
|
||||
{
|
||||
NotificationChannelType.Announcement => AppResources.NotificationChannelType_Name_Announcement,
|
||||
NotificationChannelType.NewVersion => AppResources.NotificationChannelType_Name_NewVersion,
|
||||
NotificationChannelType.Message => AppResources.NotificationChannelType_Name_Message,
|
||||
NotificationChannelType.ForegroundService => AppResources.NotificationChannelType_Name_ForegroundService,
|
||||
NotificationChannelType.NewVersion => SR.NotificationChannelType_Name_NewVersion,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(value), value, null),
|
||||
};
|
||||
}
|
||||
@@ -56,11 +47,8 @@ namespace System.Application
|
||||
{
|
||||
return value switch
|
||||
{
|
||||
NotificationChannelType.Announcement => AppResources.NotificationChannelType_Description_Announcement,
|
||||
NotificationChannelType.NewVersion => AppResources.NotificationChannelType_Description_NewVersion,
|
||||
NotificationChannelType.Message => AppResources.NotificationChannelType_Description_Message,
|
||||
NotificationChannelType.ForegroundService => AppResources.NotificationChannelType_Description_ForegroundService,
|
||||
_ => string.Empty,
|
||||
NotificationChannelType.NewVersion => SR.NotificationChannelType_Description_NewVersion,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(value), value, null),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,8 +62,8 @@ namespace System.Application
|
||||
public static NotificationImportanceLevel GetImportanceLevel(this NotificationChannelType value)
|
||||
=> value switch
|
||||
{
|
||||
NotificationChannelType.Announcement => NotificationImportanceLevel.High,
|
||||
_ => NotificationImportanceLevel.Medium,
|
||||
NotificationChannelType.NewVersion => NotificationImportanceLevel.Medium,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(value), value, null),
|
||||
};
|
||||
}
|
||||
}
|
||||
+28
-26
@@ -19,7 +19,7 @@ namespace System.Application.Properties {
|
||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class SR {
|
||||
@@ -61,45 +61,47 @@ namespace System.Application.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Byte[] 类型的本地化资源。
|
||||
/// 查找类似 Steam++ 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static byte[] asf_ui {
|
||||
internal static string AppName {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("asf_ui", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
return ResourceManager.GetString("AppName", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Byte[] 类型的本地化资源。
|
||||
/// 查找类似 正在下载:{0}% 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static byte[] OpenSourceLibraryList {
|
||||
internal static string Downloading_ {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("OpenSourceLibraryList", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
return ResourceManager.GetString("Downloading_", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 @echo off
|
||||
///:loop
|
||||
///ping -n 1 127.0.0.1
|
||||
///tasklist|find /i "{0}"
|
||||
///if %errorlevel%==0 (
|
||||
///taskkill /im "{0}" /f
|
||||
///)
|
||||
///else(
|
||||
///taskkill /im "{0}" /f
|
||||
///xcopy /y /c /h /r /s "{1}\*.*" "{2}"
|
||||
///rmdir /s /q "{1}"
|
||||
///"{3}"
|
||||
///del %0
|
||||
///)
|
||||
///goto :loop 的本地化字符串。
|
||||
/// 查找类似 新版本更新 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string ProgramUpdateCmd_ {
|
||||
internal static string NewVersionUpdate {
|
||||
get {
|
||||
return ResourceManager.GetString("ProgramUpdateCmd_", resourceCulture);
|
||||
return ResourceManager.GetString("NewVersionUpdate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 当下载新版本时的下载进度条通知。 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string NotificationChannelType_Description_NewVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("NotificationChannelType_Description_NewVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 新版本通知 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string NotificationChannelType_Name_NewVersion {
|
||||
get {
|
||||
return ResourceManager.GetString("NotificationChannelType_Name_NewVersion", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
+14
-3
@@ -117,8 +117,19 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="hosts" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\hosts.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Steam++</value>
|
||||
</data>
|
||||
<data name="Downloading_" xml:space="preserve">
|
||||
<value>正在下载:{0}%</value>
|
||||
</data>
|
||||
<data name="NewVersionUpdate" xml:space="preserve">
|
||||
<value>新版本更新</value>
|
||||
</data>
|
||||
<data name="NotificationChannelType_Description_NewVersion" xml:space="preserve">
|
||||
<value>当下载新版本时的下载进度条通知。</value>
|
||||
</data>
|
||||
<data name="NotificationChannelType_Name_NewVersion" xml:space="preserve">
|
||||
<value>新版本通知</value>
|
||||
</data>
|
||||
</root>
|
||||
-1
@@ -4,6 +4,5 @@ namespace System.Application.Repositories
|
||||
{
|
||||
public interface IUserRepository : IRepository<User, Guid>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user