Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 60ba0bf134 | |||
| 5450af7a0e | |||
| 62025ee15b | |||
| 42bab60aab | |||
| a245d2b305 | |||
| 583c2cd487 | |||
| 43358cf808 | |||
| 8198ad8e44 | |||
| 6d8e5c18db | |||
| b14cc2f74a |
@@ -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"]
|
||||
@@ -17,15 +17,11 @@ assignees: ''
|
||||
发布前请先尝试在 Issues 内搜索一下你的问题是否已经被提出过,
|
||||
详细地描述 bug,让大家都能理解,请一定确定你所要发布的内容是一个 Bug,如果不确定请发 Question
|
||||
别忘了填写标题,标题要简短的描述问题
|
||||
Before posting, please try searching in Issues to see if your question has already been asked,
|
||||
Describe the bug in detail so that everyone can understand it
|
||||
Don't forget to fill in the title, which should briefly describe the problem
|
||||
-->
|
||||
|
||||
### 🐛 描述
|
||||
<!--
|
||||
详细的描述该问题
|
||||
Describe the problem in detail
|
||||
-->
|
||||
|
||||
|
||||
@@ -34,8 +30,6 @@ Describe the problem in detail
|
||||
<!--
|
||||
清晰描述复现步骤,让别人也能看到问题
|
||||
确保上述步骤尽可能能够在大多数设备上 100% 复现,以便定位问题原因
|
||||
Clearly describe the reproduction steps so that others can see the problem
|
||||
Ensure that the above steps can be reproduced 100% on most devices as far as possible in order to locate the cause of the problem
|
||||
-->
|
||||
1.
|
||||
2.
|
||||
@@ -43,9 +37,6 @@ Ensure that the above steps can be reproduced 100% on most devices as far as pos
|
||||
|
||||
### 📄 日志信息
|
||||
<!--
|
||||
在程序内 设置 - 通用设置 - 存储空间 - 打开Logs文件夹 找到当天的日志,将文件上传或将关键部分写在此处,在内容的开始与结束上加上 ``` 单独作为一行,如下所示
|
||||
Set in the program - General Settings - storage space - open the logs folder to find the log of the day, upload the file or write the key part here, and add ``` to the beginning and end of the content as a separate line, as shown below
|
||||
|
||||
```
|
||||
- 日志文件所在文件夹路径
|
||||
- Microsoft Store ```%USERPROFILE%\AppData\Local\Packages\4651ED44255E.47979655102CE_k6txddmbb6c52\LocalCache\Logs```
|
||||
@@ -54,7 +45,6 @@ Set in the program - General Settings - storage space - open the logs folder to
|
||||
- Linux ```$XDG_CACHE_HOME/Steam++/Logs``` or ```$HOME/.cache/Steam++/Logs```
|
||||
- Android ```/data/data/net.steampp.app/cache/Logs```
|
||||
你的日志内容
|
||||
Your log content
|
||||
```
|
||||
|
||||
-->
|
||||
@@ -63,7 +53,6 @@ Your log content
|
||||
|
||||
<!--
|
||||
截图可以贴在这里
|
||||
Screenshots can be posted here
|
||||
-->
|
||||
|
||||
### 🚑 其他信息
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
name: "Feature request \U0001F451"
|
||||
about: 对程序的需求或建议 / Suggest an idea for program
|
||||
title: "\U0001F451[Enhancement] "
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
发布前请先尝试在 Issuse 内搜索一下你的 Feature 是否已经被提出过,
|
||||
别忘了填写标题,标题要简短的描述 Feature
|
||||
Before publishing, please try to search in issue to see if your feature has been proposed,
|
||||
Don't forget to fill in the title, which should briefly describe the feature
|
||||
-->
|
||||
|
||||
### 🥰 需求描述(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 @@
|
||||
# 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: "gitsubmodule"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
time: "07:30"
|
||||
timezone: "Asia/Shanghai"
|
||||
labels:
|
||||
- "automatic"
|
||||
- "dependencies"
|
||||
open-pull-requests-limit: 99
|
||||
@@ -3,8 +3,6 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- v3.x
|
||||
- develop
|
||||
- main
|
||||
tags:
|
||||
- "*"
|
||||
pull_request:
|
||||
@@ -33,7 +31,7 @@ jobs:
|
||||
|
||||
- name: Setup .NET
|
||||
if: ${{ matrix.os != 'aigio-win10ltsc-vm' }}
|
||||
uses: actions/setup-dotnet@v3
|
||||
uses: actions/setup-dotnet@v2
|
||||
with:
|
||||
dotnet-version: 7.0.x
|
||||
|
||||
@@ -62,7 +60,7 @@ jobs:
|
||||
# run: dotnet workload install wasm-tools
|
||||
|
||||
- name: Restore Workload
|
||||
run: dotnet workload restore src\BD.WTTS.Client.Avalonia.App\BD.WTTS.Client.Avalonia.App.csproj
|
||||
run: dotnet workload restore
|
||||
|
||||
- name: Verify dotnet info
|
||||
run: dotnet --info
|
||||
|
||||
@@ -1,193 +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 ]
|
||||
os: [ windows-latest, macOS-latest ]
|
||||
# rid: [ fd-win-x64, win-x64, osx-x64, linux-x64,linux-arm64 ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v3
|
||||
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 Android SDK(Unix)
|
||||
if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: sudo dotnet workload install android
|
||||
|
||||
- name: Install Android SDK(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install android
|
||||
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Install Maui(Unix)
|
||||
# if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: sudo 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@v3
|
||||
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@v3
|
||||
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@v3
|
||||
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 fd-win-x86 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@v3
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x86_fde_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x86_fde_${{ env.GITHUB_SHA_SHORT }}.7z
|
||||
|
||||
- name: Upload win-x86 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@v3
|
||||
with:
|
||||
name: '[${{ matrix.configuration }}]${{ env.ProjectName }}_win_x86_${{ env.GITHUB_SHA_SHORT }}'
|
||||
path: src\ST.Client.Desktop.Avalonia.App\bin\${{ matrix.configuration }}\Publish\${{ env.ProjectName }}_win_x86_${{ 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@v3
|
||||
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@v3
|
||||
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@v3
|
||||
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 }}.tar.zst
|
||||
|
||||
- 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@v3
|
||||
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 }}.tar.zst
|
||||
@@ -1,382 +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@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v3
|
||||
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 Android SDK(Unix)
|
||||
if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: sudo dotnet workload install android
|
||||
|
||||
- name: Install Android SDK(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install android
|
||||
|
||||
- name: Install Maui(Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dotnet workload install maui
|
||||
|
||||
- name: Install Maui(Unix)
|
||||
# if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
if: matrix.os == 'macOS-latest'
|
||||
run: sudo 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@v3
|
||||
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@v3
|
||||
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 }}
|
||||
WIN_SIGN_PFX_PWD: ${{ secrets.WIN_SIGN_PFX_PWD }}
|
||||
|
||||
- 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 fd-win-x86 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_x86_fde_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "fd_win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_fde_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package fd-win-x86 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_x86_fde_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_fd_win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_fde_v${{ steps.tag.outputs.tag }}.exe)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package win-x86 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_x86_v${{ steps.tag.outputs.tag }}.7z" "${env:PublishFilePath}"
|
||||
Write-Output "win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_v${{ steps.tag.outputs.tag }}.7z)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package win-x86 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_x86_v${{ steps.tag.outputs.tag }}.exe" "${env:PublishFilePath}"
|
||||
Write-Output "exe_win_x86_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_win_x86_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 tar.zst
|
||||
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 }}.tar.zst" "${env:PublishFilePath}"
|
||||
Write-Output "linux_x64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_x64_v${{ steps.tag.outputs.tag }}.tar.zst)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
|
||||
- name: Package linux-arm64 tar.zst
|
||||
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 }}.tar.zst" "${env:PublishFilePath}"
|
||||
Write-Output "linux_arm64_SHA256=$(.\packaging\SHA256.ps1 ${env:PublishFilePath}\${env:ProjectName}_linux_arm64_v${{ steps.tag.outputs.tag }}.tar.zst)" | 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 }}_win_x86_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.win_x86_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x86_fde_v${{ steps.tag.outputs.tag }}.7z</sub> | <sub>${{ env.fd_win_x86_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x86_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_win_x86_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_win_x86_fde_v${{ steps.tag.outputs.tag }}.exe</sub> | <sub>${{ env.exe_fd_win_x86_SHA256 }}</sub> |
|
||||
|||
|
||||
| <sub>${{ env.ProjectName }}_linux_x64_v${{ steps.tag.outputs.tag }}.tar.zst</sub> | <sub>${{ env.linux_x64_SHA256 }}</sub> |
|
||||
| <sub>${{ env.ProjectName }}_linux_arm64_v${{ steps.tag.outputs.tag }}.tar.zst</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@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
if: matrix.os == 'windows-latest'
|
||||
uses: microsoft/setup-msbuild@v1.3
|
||||
|
||||
- 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@v3
|
||||
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@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET 6
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
if: matrix.os == 'windows-latest'
|
||||
uses: microsoft/setup-msbuild@v1.3
|
||||
|
||||
# - 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.2.0
|
||||
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
|
||||
@@ -34,6 +34,3 @@
|
||||
[submodule "ref/WinAuth"]
|
||||
path = ref/WinAuth
|
||||
url = https://github.com/BeyondDimension/WinAuth.git
|
||||
[submodule "ref/Facepunch.Steamworks"]
|
||||
path = ref/Facepunch.Steamworks
|
||||
url = https://github.com/BeyondDimension/Facepunch.Steamworks.git
|
||||
|
||||
@@ -54,9 +54,9 @@ See details [./doc/download-guide.en.md](./doc/download-guide.en.md)
|
||||
- Windows 11
|
||||
- Windows 10 version 1809(OS internal version 17763) or higher is required
|
||||
- macOS 10.15 or higher is required
|
||||
- Ubuntu 20.04 or higher is required
|
||||
- Debian 11 or higher is required
|
||||
- Fedora 37 or higher is required
|
||||
- Ubuntu 18.04 or higher is required
|
||||
- Debian 10 or higher is required
|
||||
- CentOS 7 or higher is required
|
||||
- Deepin(UOS) 20 or higher is required
|
||||
- ~~iOS 11 or higher is required~~(In development…)
|
||||
- Android 5.0(API 21) or higher is required
|
||||
@@ -79,8 +79,80 @@ Read what we [milestones](https://github.com/BeyondDimension/SteamTools/mileston
|
||||
[Android Studio Electric Eel Or Higher](https://developer.android.com/studio)
|
||||
[Xcode 14 Or Higher](https://developer.apple.com/xcode)
|
||||
|
||||
## 🏗️ Project Structure
|
||||
See details [./src/README.md](./src/README.md)
|
||||
|
||||
## 📄 Open Source Library
|
||||
See details [./doc/open-source-library.md](./doc/open-source-library.md)
|
||||
## 📄 Thanks to the following Open Source Projects
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [YARP](https://github.com/microsoft/reverse-proxy)
|
||||
* [FastGithub](https://github.com/dotnetcore/FastGithub)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [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)
|
||||
* [MessagePack-CSharp](https://github.com/neuecc/MessagePack-CSharp)
|
||||
* [MemoryPack](https://github.com/Cysharp/MemoryPack)
|
||||
* [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)
|
||||
* [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)
|
||||
* [.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)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[English](./README.en.md) | 简体中文
|
||||
|
||||
「Watt Toolkit」是一个开源跨平台的多功能游戏工具箱,此工具的大部分功能都是需要您下载安装 Steam 才能使用。
|
||||
|
||||
|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/releases/latest)
|
||||
[](LICENSE)
|
||||
@@ -30,7 +30,6 @@
|
||||
</div>
|
||||
|
||||
## 🚀 下载渠道
|
||||
- [](https://store.steampowered.com/app/2425030)
|
||||
- [](https://apps.microsoft.com/store/detail/watt-toolkit/9MTCFHS560NG?hl=zh-cn&gl=cn)
|
||||
- [软件官网](https://steampp.net)
|
||||
- [GitHub 发行版](https://github.com/BeyondDimension/SteamTools/releases)
|
||||
@@ -42,23 +41,22 @@
|
||||
详见 [./doc/download-guide.md](./doc/download-guide.md)
|
||||
|
||||
## ✨ 功能
|
||||
全新的 3.0 版本,支持自定义插件功能,以下功能为下载时自带的默认插件,可以自行删除或禁用。
|
||||
1. 网络加速 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" /> <img src="./res/brands/android.svg" width="16" height="16" />
|
||||
- ~~使用 [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy) 开源项目进行本地反代来支持更快的访问游戏网站。~~
|
||||
- 使用 [YARP.ReverseProxy](https://github.com/microsoft/reverse-proxy) 开源项目进行本地反代来支持更快的访问游戏网站。
|
||||
2. 脚本配置 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" />
|
||||
- 通过加速服务拦截网络请求将一些 JS 脚本注入在网页中,提供类似网页插件的功能。
|
||||
3. 账号切换 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" />
|
||||
- 快速切换已在当前 PC 上登录过的 Steam、Epic、Uplay 等等多平台账号,与管理 Steam 家庭共享库排序及禁用等功能。
|
||||
4. 库存游戏 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" />
|
||||
- 直接管理你的 Steam 游戏库存,可以编辑游戏名称和[自定义封面](https://www.steamgriddb.com)。
|
||||
- 一键切换已在当前 PC 上登录过的 Steam 账号,与管理家庭共享库排序及禁用等功能。
|
||||
4. 库存管理 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" />
|
||||
- 让您直接管理 Steam 游戏库存,可以编辑游戏名称和[自定义封面](https://www.steamgriddb.com),也能解锁以及反解锁 Steam 游戏成就。
|
||||
- 监控 Steam 游戏下载进度实现 Steam 游戏下载完成定时关机功能。
|
||||
- 模拟运行 Steam 游戏,让您不用安装和下载对应的游戏也能挂游玩时间和掉落 Steam 卡片
|
||||
- 自助管理 Steam 游戏云存档,随时删除和上传自定义的存档文件至 Steam 云。
|
||||
- 解锁以及反解锁 Steam 游戏成就。
|
||||
- 模拟运行 Steam 游戏,让您不用安装和下载对应的游戏也能挂游玩时间和 Steam 卡片
|
||||
- 自助管理 Steam 游戏云存档,随时删除和上传自定义的存档文件至 Steam 云
|
||||
5. 本地令牌 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" /> <img src="./res/brands/android.svg" width="16" height="16" />
|
||||
- 让您的手机令牌统一保存在电脑中、支持通用HOTP、TOTP、Steam、Google 等令牌导入。
|
||||
- 支持 Steam 登录账号自定绑定生成令牌、支持 Steam 批量确认交易功能。
|
||||
6. ~~自动挂卡(新版本开发中)~~ <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" /> <img src="./res/brands/android.svg" width="16" height="16" />
|
||||
- ~~集成 [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm) 在应用内提供 挂机掉落 Steam 集换式卡牌 等功能。~~
|
||||
- 让您的手机令牌统一保存在电脑中,目前仅支持 Steam 令牌,后续会开发支持更多的令牌种类与云同步令牌。
|
||||
6. 自动挂卡 <img src="./res/brands/windows.svg" width="16" height="16" /> <img src="./res/brands/linux.svg" width="16" height="16" /> <img src="./res/brands/apple.svg" width="16" height="16" /> <img src="./res/brands/android.svg" width="16" height="16" />
|
||||
- 集成 [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm) 在应用内提供 挂机掉落 Steam 集换式卡牌 等功能。
|
||||
7. 游戏工具 <img src="./res/brands/windows.svg" width="16" height="16" />
|
||||
- 强制游戏窗口使用无边框窗口化、更多功能待开发。
|
||||
|
||||
@@ -66,9 +64,9 @@
|
||||
- Windows 11
|
||||
- Windows 10 版本 1809(OS 内部版本 17763)或更高版本
|
||||
- macOS 10.15 或更高版本
|
||||
- Ubuntu 20.04 或更高版本
|
||||
- Debian 11 或更高版本
|
||||
- Fedora 37 或更高版本
|
||||
- Ubuntu 18.04 或更高版本
|
||||
- Debian 10 或更高版本
|
||||
- CentOS 7 或更高版本
|
||||
- Deepin(UOS) 20 或更高版本
|
||||
- ~~iOS 11 或更高版本~~(开发中…)
|
||||
- Android 5.0(API 21) 或更高版本
|
||||
@@ -76,12 +74,8 @@
|
||||
## 🧩 截图
|
||||
<img src="./res/screenshots/screenshot-windows-accelerator.webp" width="800" />
|
||||
<br/>
|
||||
<img src="./res/screenshots/screenshot-windows-gameaccount.webp" width="800" />
|
||||
<br/>
|
||||
<img src="./res/screenshots/screenshot-windows-gamelist.webp" width="800" />
|
||||
<br/>
|
||||
<br/>
|
||||
<!--<img src="./res/screenshots/screenshot-android-authenticator.png" width="800" />-->
|
||||
<img src="./res/screenshots/screenshot-android-authenticator.png" width="800" />
|
||||
|
||||
## 从移动端 Steam App 导入令牌指南
|
||||
- [Android 添加本地令牌(Xposed)](https://github.com/BeyondDimension/SteamTools/issues/2276)
|
||||
@@ -107,7 +101,7 @@
|
||||
- 单个组件
|
||||
- GitHub Extension for Visual Studio(可选)
|
||||
- [Visual Studio Marketplace](https://marketplace.visualstudio.com)
|
||||
- [Avalonia for Visual Studio(可选)](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaVS)
|
||||
- [Avalonia for Visual Studio(可选)](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
|
||||
- [NUnit VS Templates(可选)](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
|
||||
|
||||
[JetBrains Rider](https://www.jetbrains.com/rider)
|
||||
@@ -117,7 +111,7 @@
|
||||
[Xcode 14 或更高版本](https://developer.apple.com/xcode)
|
||||
|
||||
## 🏗️ [项目结构](./src/README.md)
|
||||
详见 [./src/README.md](./src/README.md)
|
||||
详见 [./src/README.md](./src/README.md)
|
||||
|
||||
## 🧑💼 加入我们
|
||||
- [.NET/C# 高级软件工程师(客户端方向)](https://www.zhipin.com/job_detail/b271a34a3efeb84c1XJ_2dW6ElVT.html)
|
||||
@@ -128,5 +122,81 @@
|
||||
- [高级 Web 前端工程师](https://www.zhipin.com/job_detail/e59317c527f3f49e1XJ92d24FVRV.html)
|
||||
-->
|
||||
|
||||
## 📄 [开源代码库](./doc/open-source-library.md)
|
||||
详见 [./doc/open-source-library.md](./doc/open-source-library.md)
|
||||
<!--👇图标如果发生更改,还需更改 Tools.OpenSourceLibraryList(Program.OpenSourceLibraryListEmoji) -->
|
||||
## 📄 感谢以下开源项目
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [YARP](https://github.com/microsoft/reverse-proxy)
|
||||
* [FastGithub](https://github.com/dotnetcore/FastGithub)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [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)
|
||||
* [MessagePack-CSharp](https://github.com/neuecc/MessagePack-CSharp)
|
||||
* [MemoryPack](https://github.com/Cysharp/MemoryPack)
|
||||
* [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)
|
||||
* [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)
|
||||
* [.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,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
run_path=$(dirname "$0")
|
||||
dotnet_path="$run_path/dotnet"
|
||||
dotnet_exec="$dotnet_path/dotnet"
|
||||
export DOTNET_ROOT="$dotnet_path"
|
||||
link_exec="$run_path/Steam++"
|
||||
# 判断符号链接是否存在
|
||||
if [ -L "$link_exec" ]; then
|
||||
echo "符号链接 $link_exec 已存在"
|
||||
else
|
||||
rm -rf "$link_exec" 2>/dev/null
|
||||
echo "创建符号链接 $dotnet_exec 到 $link_exec"
|
||||
ln -s "$dotnet_exec" "$link_exec"
|
||||
chmod +x "$link_exec"
|
||||
fi
|
||||
"$link_exec" "$run_path/assemblies/Steam++.dll" "$@"
|
||||
exit
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/bin/bash
|
||||
base_path="$HOME/WattToolkit"
|
||||
export LC_ALL=en_US.UTF-8
|
||||
if [ "$1" = "-c" ]; then
|
||||
# 只验证 certutil 是否可用
|
||||
if command -v certutil &>/dev/null; then
|
||||
exit 200
|
||||
else
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
Install_certutil() {
|
||||
# 判断发行版类型
|
||||
if command -v certutil &>/dev/null; then
|
||||
echo "certutil 工具已安装。"
|
||||
else
|
||||
echo "证书导入以及验证需要使用 certutil 工具。"
|
||||
# 判断包管理器
|
||||
if command -v apt &>/dev/null; then
|
||||
# 使用 apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y libnss3-tools
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# 使用 dnf (Fedora)
|
||||
sudo dnf install -y nss-tools
|
||||
elif command -v yum &>/dev/null; then
|
||||
# 使用 yum (CentOS/Red Hat)
|
||||
sudo yum install -y nss-tools
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# 使用 pacman (Arch Linux)
|
||||
# sudo pacman -S nss
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
else
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "certutil 工具已安装。"
|
||||
fi
|
||||
}
|
||||
certutil_Init() {
|
||||
certutil -d $HOME/.pki/nssdb -L
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "即将初始化 certutil \$HOME/.pki/nssdb"
|
||||
mkdir -p $HOME/.pki
|
||||
mkdir -p $HOME/.pki/nssdb
|
||||
chmod 700 $HOME/.pki/nssdb
|
||||
certutil -d $HOME/.pki/nssdb -N --empty-password
|
||||
else
|
||||
echo "certutil nssdb 正常"
|
||||
fi
|
||||
}
|
||||
Install_certutil
|
||||
certutil_Init
|
||||
exit 0
|
||||
fi
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
#添加桌面文件
|
||||
run_path=$(dirname "$0")
|
||||
base_path="$(dirname "$run_path")"
|
||||
exec_name="Steam++"
|
||||
rm -rf "$HOME/Desktop/Watt Toolkit.desktop" 2>/dev/null
|
||||
echo "#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Name=Watt Toolkit
|
||||
Exec=$base_path/$exec_name.sh
|
||||
Icon=$base_path/Icons/Watt-Toolkit.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=false" >"$HOME/Desktop/Watt Toolkit.desktop"
|
||||
chmod +x "$HOME/Desktop/Watt Toolkit.desktop"
|
||||
exit 0
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Name=°²×° Watt Toolkit
|
||||
Exec=curl https://steampp.net/pkg/latest/steamdeck/install.sh | bash -s --
|
||||
Icon=steamdeck-gaming-return
|
||||
Terminal=true
|
||||
Type=Application
|
||||
StartupNotify=false
|
||||
@@ -1,208 +0,0 @@
|
||||
#!/bin/bash
|
||||
run_path=$(dirname "$0")
|
||||
base_path="$(dirname "$run_path")"
|
||||
mkdir -p "$base_path"
|
||||
cd "$base_path" || exit 1
|
||||
appVer_path="$base_path/WattToolkit.AppVer"
|
||||
exec_name="Steam++"
|
||||
tar_name="WattToolkit.tgz"
|
||||
tar_path="$base_path/$tar_name"
|
||||
app_name="Watt Toolkit"
|
||||
PROCESS_NAMES=("$exec_name" "$app_name")
|
||||
export LC_ALL=en_US.UTF-8
|
||||
Install_certutil() {
|
||||
# 判断发行版类型
|
||||
if command -v certutil &>/dev/null; then
|
||||
echo "certutil 工具已安装。"
|
||||
else
|
||||
echo "证书导入以及验证需要使用 certutil 工具。"
|
||||
# 判断包管理器
|
||||
if command -v apt &>/dev/null; then
|
||||
# 使用 apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y libnss3-tools
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# 使用 dnf (Fedora)
|
||||
sudo dnf install -y nss-tools
|
||||
elif command -v yum &>/dev/null; then
|
||||
# 使用 yum (CentOS/Red Hat)
|
||||
sudo yum install -y nss-tools
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# 使用 pacman (Arch Linux)
|
||||
# sudo pacman -S nss
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
else
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "certutil 工具已安装。"
|
||||
fi
|
||||
}
|
||||
certutil_Init() {
|
||||
certutil -d $HOME/.pki/nssdb -L
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "即将初始化 certutil \$HOME/.pki/nssdb"
|
||||
mkdir -p $HOME/.pki
|
||||
mkdir -p $HOME/.pki/nssdb
|
||||
chmod 700 $HOME/.pki/nssdb
|
||||
certutil -d $HOME/.pki/nssdb -N --empty-password
|
||||
else
|
||||
echo "certutil nssdb 正常"
|
||||
fi
|
||||
}
|
||||
Install_jq() {
|
||||
# Check if jq is already installed
|
||||
if command -v jq &>/dev/null; then
|
||||
echo "jq 工具已安装。"
|
||||
else
|
||||
echo "jq 用来解析版本更新。"
|
||||
# Check the package manager
|
||||
if command -v apt &>/dev/null; then
|
||||
# Using apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y jq
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# Using dnf (Fedora)
|
||||
sudo dnf install -y jq
|
||||
elif command -v yum &>/dev/null; then
|
||||
# Using yum (CentOS/Red Hat)
|
||||
sudo yum install -y jq
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# Using pacman (Arch Linux)
|
||||
sudo pacman -S jq
|
||||
else
|
||||
echo "请手动安装 jq 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "请手动安装 jq 工具。"
|
||||
fi
|
||||
}
|
||||
Install_zenity() {
|
||||
# 判断发行版类型
|
||||
if command -v zenity &>/dev/null; then
|
||||
echo "zenity 工具已安装。"
|
||||
else
|
||||
echo "安装过程需要 zenity 工具。"
|
||||
# 判断包管理器
|
||||
if command -v apt &>/dev/null; then
|
||||
# 使用 apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y zenity
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# 使用 dnf (Fedora)
|
||||
sudo dnf install -y zenity
|
||||
elif command -v yum &>/dev/null; then
|
||||
# 使用 yum (CentOS/Red Hat)
|
||||
sudo yum install -y zenity
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# 使用 pacman (Arch Linux)
|
||||
# sudo pacman -S zenity
|
||||
echo "请手动安装 zenity 工具。"
|
||||
exit 1
|
||||
else
|
||||
echo "请手动安装 zenity 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "zenity 工具已安装。"
|
||||
fi
|
||||
}
|
||||
|
||||
Show_Run() {
|
||||
local param1=$1
|
||||
# 显示提示框,询问是否运行程序
|
||||
zenity --question --text="$1" --width=400
|
||||
|
||||
# 获取上一个命令的退出码
|
||||
response=$?
|
||||
|
||||
if [ $response -eq 0 ]; then
|
||||
echo "程序已启动。"
|
||||
exit 0 &
|
||||
# 用户点击了 "运行" 按钮,启动程序
|
||||
/bin/sh -c "$base_path/$exec_name.sh"
|
||||
else
|
||||
# 用户点击了 "关闭" 按钮,退出脚本
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
Kill_Process() {
|
||||
# 尝试的次数
|
||||
Kill_MAX_RETRIES=3
|
||||
|
||||
# 循环尝试终止进程
|
||||
for process_name in "${PROCESS_NAMES[@]}"; do
|
||||
kill_retry=1
|
||||
while [ $kill_retry -le $Kill_MAX_RETRIES ]; do
|
||||
pid=$(pgrep "$process_name")
|
||||
if [ -n "$pid" ]; then
|
||||
echo "尝试 $kill_retry: 进程 $process_name 正在运行中。正在终止..."
|
||||
kill $pid
|
||||
sleep 2
|
||||
else
|
||||
break
|
||||
fi
|
||||
kill_retry=$((kill_retry + 1))
|
||||
done
|
||||
done
|
||||
|
||||
for process_name in "${PROCESS_NAMES[@]}"; do
|
||||
# 检查是否成功终止进程
|
||||
if pgrep -x "$process_name" >/dev/null; then
|
||||
echo "无法终止程序 $process_name。尝试次数已达上限。"
|
||||
exit 1
|
||||
else
|
||||
echo "程序 $process_name 已成功终止。"
|
||||
fi
|
||||
done
|
||||
|
||||
}
|
||||
Install_certutil
|
||||
Install_zenity
|
||||
Install_jq
|
||||
certutil_Init
|
||||
Kill_Process
|
||||
|
||||
dotnet_exec="$dotnet_path/dotnet/dotnet"
|
||||
if [ -x "$dotnet_exec" ]; then
|
||||
echo "文件具有执行权限。"
|
||||
else
|
||||
chmod +x "$dotnet_exec"
|
||||
fi
|
||||
chmod +x "$base_path/$exec_name.sh"
|
||||
# xdg-icon-resource install "$base_path/Icons/Watt-Toolkit.png" --size 128 Watt-Toolkit
|
||||
InitDesktop() {
|
||||
while true; do
|
||||
# 使用 zenity 提示用户选择安装路径或使用默认路径
|
||||
choice=$(zenity --list --radiolist --title="请选择要添加到的位置" --column="选择" --column="路径" TRUE "$HOME/.local/share/applications/" FALSE "$HOME/Desktop")
|
||||
|
||||
# 检查用户输入
|
||||
if [ "$choice" == "$HOME/.local/share/applications/" ]; then
|
||||
target_dir="$HOME/.local/share/applications/"
|
||||
break
|
||||
elif [ "$choice" == "$HOME/Desktop" ]; then
|
||||
target_dir="$HOME/Desktop/"
|
||||
break
|
||||
else
|
||||
echo "无效选项,请输入 1 或 2。"
|
||||
fi
|
||||
done
|
||||
#添加桌面文件
|
||||
rm -rf "$target_dir/Watt Toolkit.desktop" 2>/dev/null
|
||||
echo "#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Name=Watt Toolkit
|
||||
Exec=$base_path/$exec_name.sh
|
||||
Icon=$base_path/Icons/Watt-Toolkit.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=false" >"$target_dir/Watt Toolkit.desktop"
|
||||
chmod +x "$target_dir/Watt Toolkit.desktop"
|
||||
|
||||
}
|
||||
InitDesktop
|
||||
# update-desktop-database ~/.local/share/applications
|
||||
#运行程序
|
||||
Show_Run "下载安装完成,是否启动程序?"
|
||||
exit 0
|
||||
@@ -1,393 +0,0 @@
|
||||
#!/bin/bash
|
||||
# 设置默认的 base_path 参数
|
||||
default_base_path="$HOME/WattToolkit"
|
||||
base_path="$default_base_path"
|
||||
|
||||
# 循环直到用户输入有效路径或直接回车
|
||||
while true; do
|
||||
# 使用 zenity 提示用户选择安装路径或使用默认路径
|
||||
custom_base_path=$(zenity --entry --title="安装路径" --text="请输入安装路径(默认为 $default_base_path,不输入则使用默认路径)")
|
||||
|
||||
# 如果用户提供了自定义路径,则使用该路径
|
||||
if [ -n "$custom_base_path" ]; then
|
||||
base_path="$custom_base_path"
|
||||
break
|
||||
elif [ -z "$custom_base_path" ]; then
|
||||
# 用户直接回车,使用默认路径
|
||||
break
|
||||
else
|
||||
# 用户输入无效路径,重新提示
|
||||
echo "无效路径,请重新输入。"
|
||||
fi
|
||||
done
|
||||
|
||||
# 创建安装路径
|
||||
mkdir -p "$base_path" || {
|
||||
echo "无法创建安装路径 $base_path,请检查权限或路径是否正确。"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 切换到安装路径
|
||||
cd "$base_path" || {
|
||||
echo "无法切换到安装路径 $base_path,请检查权限或路径是否正确。"
|
||||
exit 1
|
||||
}
|
||||
|
||||
appVer_path="$base_path/WattToolkit.AppVer"
|
||||
exec_name="Steam++"
|
||||
tar_name="WattToolkit.tgz"
|
||||
tar_path="$base_path/$tar_name"
|
||||
base_url="https://api.steampp.net"
|
||||
architecture=1
|
||||
app_name="Watt Toolkit"
|
||||
PROCESS_NAMES=("$exec_name" "$app_name")
|
||||
export LC_ALL=en_US.UTF-8
|
||||
Install_certutil() {
|
||||
# 判断发行版类型
|
||||
if command -v certutil &>/dev/null; then
|
||||
echo "certutil 工具已安装。"
|
||||
else
|
||||
echo "证书导入以及验证需要使用 certutil 工具。"
|
||||
# 判断包管理器
|
||||
if command -v apt &>/dev/null; then
|
||||
# 使用 apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y libnss3-tools
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# 使用 dnf (Fedora)
|
||||
sudo dnf install -y nss-tools
|
||||
elif command -v yum &>/dev/null; then
|
||||
# 使用 yum (CentOS/Red Hat)
|
||||
sudo yum install -y nss-tools
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# 使用 pacman (Arch Linux)
|
||||
# sudo pacman -S nss
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
else
|
||||
echo "请手动安装 certutil 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "certutil 工具已安装。"
|
||||
fi
|
||||
}
|
||||
certutil_Init() {
|
||||
certutil -d $HOME/.pki/nssdb -L
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "即将初始化 certutil \$HOME/.pki/nssdb"
|
||||
mkdir -p $HOME/.pki
|
||||
mkdir -p $HOME/.pki/nssdb
|
||||
chmod 700 $HOME/.pki/nssdb
|
||||
certutil -d $HOME/.pki/nssdb -N --empty-password
|
||||
else
|
||||
echo "certutil nssdb 正常"
|
||||
fi
|
||||
}
|
||||
Install_jq() {
|
||||
# Check if jq is already installed
|
||||
if command -v jq &>/dev/null; then
|
||||
echo "jq 工具已安装。"
|
||||
else
|
||||
echo "jq 用来解析版本更新。"
|
||||
# Check the package manager
|
||||
if command -v apt &>/dev/null; then
|
||||
# Using apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y jq
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# Using dnf (Fedora)
|
||||
sudo dnf install -y jq
|
||||
elif command -v yum &>/dev/null; then
|
||||
# Using yum (CentOS/Red Hat)
|
||||
sudo yum install -y jq
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# Using pacman (Arch Linux)
|
||||
sudo pacman -S jq
|
||||
else
|
||||
echo "请手动安装 jq 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "请手动安装 jq 工具。"
|
||||
fi
|
||||
}
|
||||
#精简版系统可能没有该工具
|
||||
Install_zenity() {
|
||||
# 判断发行版类型
|
||||
if command -v zenity &>/dev/null; then
|
||||
echo "zenity 工具已安装。"
|
||||
else
|
||||
echo "安装过程需要 zenity 工具。"
|
||||
# 判断包管理器
|
||||
if command -v apt &>/dev/null; then
|
||||
# 使用 apt (Debian/Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y zenity
|
||||
elif command -v dnf &>/dev/null; then
|
||||
# 使用 dnf (Fedora)
|
||||
sudo dnf install -y zenity
|
||||
elif command -v yum &>/dev/null; then
|
||||
# 使用 yum (CentOS/Red Hat)
|
||||
sudo yum install -y zenity
|
||||
elif command -v pacman &>/dev/null; then
|
||||
# 使用 pacman (Arch Linux)
|
||||
# sudo pacman -S zenity
|
||||
echo "请手动安装 zenity 工具。"
|
||||
exit 1
|
||||
else
|
||||
echo "请手动安装 zenity 工具。"
|
||||
exit 1
|
||||
fi
|
||||
echo "zenity 工具已安装。"
|
||||
fi
|
||||
}
|
||||
|
||||
Show_Run() {
|
||||
local param1=$1
|
||||
# 显示提示框,询问是否运行程序
|
||||
zenity --question --text="$1" --width=400
|
||||
|
||||
# 获取上一个命令的退出码
|
||||
response=$?
|
||||
|
||||
if [ $response -eq 0 ]; then
|
||||
echo "程序已启动。"
|
||||
exit 0 &
|
||||
# 用户点击了 "运行" 按钮,启动程序
|
||||
/bin/sh -c "$base_path/$exec_name.sh"
|
||||
else
|
||||
# 用户点击了 "关闭" 按钮,退出脚本
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
Get_NewVer() {
|
||||
#获取系统架构
|
||||
arch=$(uname -m)
|
||||
case $arch in
|
||||
x86_64)
|
||||
architecture=1
|
||||
;;
|
||||
i?86)
|
||||
architecture=0
|
||||
;;
|
||||
arm*)
|
||||
architecture=2
|
||||
;;
|
||||
aarch64)
|
||||
architecture=3
|
||||
;;
|
||||
*)
|
||||
zenity --info --text="未知的设备架构:$arch!" --width=300
|
||||
exit 500
|
||||
;;
|
||||
esac
|
||||
|
||||
# 获取发行版信息
|
||||
read -r os_version <<<"$(cat /etc/os-release | grep -E 'VERSION_ID=' | awk -F'=' '{ print $2 }' | tr -d '"')"
|
||||
|
||||
# 如果 VERSION 为空,则使用 BUILD_ID 填充
|
||||
if [ -z "$os_version" ]; then
|
||||
os_version=$(cat /etc/os-release | grep -E 'BUILD_ID=' | awk -F'=' '{ print $2 }' | tr -d '"')
|
||||
fi
|
||||
|
||||
# 分割版本号
|
||||
IFS='.' read -ra version_parts <<<"$os_version"
|
||||
|
||||
# 提取主版本号和次版本号
|
||||
major_version=${version_parts[0]}
|
||||
minor_version=${version_parts[1]}
|
||||
if [ -z "$minor_version" ]; then
|
||||
minor_version=0
|
||||
fi
|
||||
# 通过 SHA384 文件来判断是否需要更新
|
||||
wget "$base_url/basic/versions/8/16/$architecture/$major_version/$minor_version/-1/0/" -O "$appVer_path" 2>&1
|
||||
n_sha384=$(jq -r '.["\uD83E\uDD93"].Downloads[0].SHA384' "$appVer_path")
|
||||
|
||||
downloads_url=$(jq -r '.["\uD83E\uDD93"].Downloads[0].DownloadUrl' "$appVer_path")
|
||||
|
||||
# 检查 SHA384 值是否为空
|
||||
if [ "$n_sha384" = "" ]; then
|
||||
zenity --info --text="未知的最新版本 Hash:$n_sha384!" --width=300
|
||||
exit 500
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
#本地版本 Hash
|
||||
o_sha384=$(cat "AppVer")
|
||||
if [ -e "AppVer" ]; then
|
||||
if [ "${o_sha384,,}" = "${n_sha384,,}" ]; then
|
||||
Show_Run "已是最新版本,是否启动程序?"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Download_File() {
|
||||
# 删除旧的文件
|
||||
rm -rf $tar_path
|
||||
title="安装"
|
||||
# 检查 o_sha384 是否为空
|
||||
if [ -z "$o_sha384" ]; then
|
||||
title="安装"
|
||||
else
|
||||
title="更新"
|
||||
fi
|
||||
for i in {1..3}; do
|
||||
#下载文件到目标目录
|
||||
wget "$downloads_url" -O "$tar_path" 2>&1 | sed -u 's/.* \([0-9]\+%\)\ \+\([0-9.]\+.\) \(.*\)/\1\n# 下载中 \2\/s, 剩余时间: \3/' | zenity --progress --title="$title Watt Toolkit" --auto-close --width=500
|
||||
|
||||
RUNNING=0
|
||||
while [ $RUNNING -eq 0 ]; do
|
||||
if [ -z "$(pidof zenity)" ]; then
|
||||
pkill wget
|
||||
RUNNING=1
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
sleep 1
|
||||
# 校验下载文件 Hash
|
||||
actual_hash=$(sha384sum "$tar_name" | awk '{ print $1 }')
|
||||
if [ "${actual_hash,,}" = "${n_sha384,,}" ]; then
|
||||
rm "AppVer"
|
||||
echo "${actual_hash,,}" >>"$base_path/AppVer"
|
||||
break 2
|
||||
fi
|
||||
|
||||
if [ "$i" -ge "3" ]; then
|
||||
zenity --error --text="下载错误。" --width=500
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Kill_Process() {
|
||||
# 尝试的次数
|
||||
Kill_MAX_RETRIES=3
|
||||
|
||||
# 循环尝试终止进程
|
||||
for process_name in "${PROCESS_NAMES[@]}"; do
|
||||
kill_retry=1
|
||||
while [ $kill_retry -le $Kill_MAX_RETRIES ]; do
|
||||
pid=$(pgrep "$process_name")
|
||||
if [ -n "$pid" ]; then
|
||||
echo "尝试 $kill_retry: 进程 $process_name 正在运行中。正在终止..."
|
||||
kill $pid
|
||||
sleep 2
|
||||
else
|
||||
break
|
||||
fi
|
||||
kill_retry=$((kill_retry + 1))
|
||||
done
|
||||
done
|
||||
|
||||
for process_name in "${PROCESS_NAMES[@]}"; do
|
||||
# 检查是否成功终止进程
|
||||
if pgrep -x "$process_name" >/dev/null; then
|
||||
echo "无法终止程序 $process_name。尝试次数已达上限。"
|
||||
exit 1
|
||||
else
|
||||
echo "程序 $process_name 已成功终止。"
|
||||
fi
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
Decompression() {
|
||||
echo "开始解压更新。"
|
||||
|
||||
# 使用 zenity 显示进度条对话框,并将解压命令输出重定向到文件
|
||||
tar -xzvf "$tar_name" 2>&1 |
|
||||
zenity --progress \
|
||||
--title="安装中" \
|
||||
--text="正在解压 $tar_name..." \
|
||||
--percentage=20 \
|
||||
--auto-close \
|
||||
--width=500
|
||||
|
||||
# 删除本地版本缓存
|
||||
rm -f "$appVer_path" &>/dev/null
|
||||
dotnet_path="$base_path/dotnet"
|
||||
dotnet_exec="$dotnet_path/dotnet"
|
||||
if [ -x "$dotnet_exec" ]; then
|
||||
echo "文件具有执行权限。"
|
||||
else
|
||||
chmod +x "$dotnet_exec"
|
||||
fi
|
||||
chmod +x "$base_path/$exec_name.sh"
|
||||
}
|
||||
|
||||
#先安装依赖;
|
||||
Install_certutil
|
||||
Install_zenity
|
||||
Install_jq
|
||||
certutil_Init
|
||||
#版本检查更新;
|
||||
Get_NewVer
|
||||
|
||||
# 使用条件判断来检查文件是否存在
|
||||
if [ -f "$tar_path" ]; then
|
||||
#如果本地存在文件与新版本计算 Hash 避免重复下载;
|
||||
temp_hash=$(sha384sum "$tar_path" | awk '{ print $1 }')
|
||||
if [ "${temp_hash,,}" != "${n_sha384,,}" ]; then
|
||||
#下载文件
|
||||
Download_File
|
||||
else
|
||||
rm "$base_path/AppVer"
|
||||
#版本号是最新缓存 输出到文件
|
||||
echo "${temp_hash,,}" >>"$base_path/AppVer"
|
||||
zenity --question --text="本地已有最新安装包是否继续解压?" --width=400
|
||||
|
||||
# 获取上一个命令的退出码
|
||||
response=$?
|
||||
|
||||
if [ $response -eq 0 ]; then
|
||||
echo "继续解压"
|
||||
else
|
||||
# 用户点击了 "关闭" 按钮,退出脚本
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
else
|
||||
#下载文件
|
||||
Download_File
|
||||
fi
|
||||
#解压前尝试杀死旧版本进程
|
||||
Kill_Process
|
||||
#解压
|
||||
Decompression
|
||||
# xdg-icon-resource install "$base_path/Icons/Watt-Toolkit.png" --size 128 Watt-Toolkit
|
||||
InitDesktop() {
|
||||
while true; do
|
||||
# 使用 zenity 提示用户选择安装路径或使用默认路径
|
||||
choice=$(zenity --list --radiolist --title="请选择要添加到的位置" --column="选择" --column="路径" TRUE "$HOME/.local/share/applications/" FALSE "$HOME/Desktop")
|
||||
|
||||
# 检查用户输入
|
||||
if [ "$choice" == "$HOME/.local/share/applications/" ]; then
|
||||
target_dir="$HOME/.local/share/applications/"
|
||||
break
|
||||
elif [ "$choice" == "$HOME/Desktop" ]; then
|
||||
target_dir="$HOME/Desktop/"
|
||||
break
|
||||
else
|
||||
echo "无效选项,请输入 1 或 2。"
|
||||
fi
|
||||
done
|
||||
#添加桌面文件
|
||||
rm -rf "$target_dir/Watt Toolkit.desktop" 2>/dev/null
|
||||
echo "#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Name=Watt Toolkit
|
||||
Exec=$base_path/$exec_name.sh
|
||||
Icon=$base_path/Icons/Watt-Toolkit.png
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=false" >"$target_dir/Watt Toolkit.desktop"
|
||||
chmod +x "$target_dir/Watt Toolkit.desktop"
|
||||
|
||||
}
|
||||
InitDesktop
|
||||
# update-desktop-database ~/.local/share/applications
|
||||
#运行程序
|
||||
Show_Run "下载安装完成,是否启动程序?"
|
||||
exit 0
|
||||
@@ -1,99 +0,0 @@
|
||||
#!/bin/bash
|
||||
run_path=$(dirname "$0")
|
||||
base_path="$(dirname "$run_path")"
|
||||
exec_name="Steam++"
|
||||
app_name="Watt Toolkit"
|
||||
AppData="$XDG_DATA_HOME/Steam++"
|
||||
AppData_t="$HOME/.local/share/Steam++"
|
||||
Cache="$XDG_CACHE_HOME/Steam++"
|
||||
Cache_t="$HOME/.cache/Steam+"
|
||||
PROCESS_NAMES=("$exec_name" "$app_name")
|
||||
export LC_ALL=en_US.UTF-8
|
||||
#检查是否存在 Steam++.sh 避免卸载错误
|
||||
file_to_check="$base_path/Steam++.sh"
|
||||
folders_to_check=("dotnet" "modules" "native" "script" "assemblies")
|
||||
if [ -e "$file_to_check" ]; then
|
||||
echo "文件 $file_to_check 存在"
|
||||
else
|
||||
echo "文件 $file_to_check 不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for folder in "${folders_to_check[@]}"; do
|
||||
folder_path="$base_path/$folder"
|
||||
if [ -d "$folder_path" ]; then
|
||||
echo "文件夹 $folder_path 存在"
|
||||
else
|
||||
echo "文件夹 $folder_path 不存在"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "验证该文件夹是 $app_name 安装目录,请确认是否卸载。"
|
||||
|
||||
read -p "所有文件和文件夹都存在,确认卸载吗? (输入 'y' 确认): " confirmation
|
||||
|
||||
if [ "${confirmation,,}" == "y" ]; then
|
||||
echo "开始执行卸载操作"
|
||||
# 在这里添加您的卸载操作
|
||||
else
|
||||
echo "用户取消卸载操作"
|
||||
exit 0
|
||||
fi
|
||||
Kill_Process() {
|
||||
# 尝试的次数
|
||||
Kill_MAX_RETRIES=3
|
||||
|
||||
# 循环尝试终止进程
|
||||
for process_name in "${PROCESS_NAMES[@]}"; do
|
||||
kill_retry=1
|
||||
while [ $kill_retry -le $Kill_MAX_RETRIES ]; do
|
||||
pid=$(pgrep "$process_name")
|
||||
if [ -n "$pid" ]; then
|
||||
echo "尝试 $kill_retry: 进程 $process_name 正在运行中。正在终止..."
|
||||
kill $pid
|
||||
sleep 2
|
||||
else
|
||||
break
|
||||
fi
|
||||
kill_retry=$((kill_retry + 1))
|
||||
done
|
||||
done
|
||||
|
||||
for process_name in "${PROCESS_NAMES[@]}"; do
|
||||
# 检查是否成功终止进程
|
||||
if pgrep -x "$process_name" >/dev/null; then
|
||||
echo "无法终止程序 $process_name。尝试次数已达上限。"
|
||||
exit 1
|
||||
else
|
||||
echo "程序 $process_name 已成功终止。"
|
||||
fi
|
||||
done
|
||||
|
||||
}
|
||||
Kill_Process
|
||||
|
||||
zenity --question --text="是否删除证书?" --width=400
|
||||
# 获取上一个命令的退出码
|
||||
delCer=$?
|
||||
|
||||
if [ $delCer -eq 0 ]; then
|
||||
certutil -D -d $HOME/.pki/nssdb -n "SteamTools"
|
||||
fi
|
||||
|
||||
zenity --question --text="是否删除用户数据?" --width=400
|
||||
# 获取上一个命令的退出码
|
||||
delUserData=$?
|
||||
|
||||
if [ $delUserData -eq 0 ]; then
|
||||
rm -rf $AppData 2>/dev/null
|
||||
rm -rf $AppData_t 2>/dev/null
|
||||
certutil -D -d $HOME/.pki/nssdb -n "SteamTools"
|
||||
else
|
||||
echo "保留用户数据方便下次安装。"
|
||||
echo "如需删除可手动删除该目录:$AppData 或者 $AppData_t"
|
||||
fi
|
||||
rm -rf $Cache 2>/dev/null
|
||||
rm -rf $Cache_t 2>/dev/null
|
||||
rm -rf $base_path 2>/dev/null
|
||||
rm -rf "$HOME/Desktop/Watt Toolkit.desktop" 2>/dev/null
|
||||
zenity --info --text="卸载完成!" --width=300
|
||||
@@ -1,96 +0,0 @@
|
||||
#!/bin/bash
|
||||
# 判断是否提供了 Build_Mode 参数
|
||||
if [ -z "$1" ]; then
|
||||
Build_Mode="any" # 如果没有提供参数,则设置默认值为 "any"
|
||||
else
|
||||
Build_Mode="$1"
|
||||
fi
|
||||
|
||||
Base_Path="/Users/moxiansheng/Documents/GitHub/SteamTools"
|
||||
App_Path="$Base_Path/src/BD.WTTS.Client.Avalonia.App"
|
||||
Publish_Path="bin/Release/Publish/assemblies"
|
||||
Plugins_Release_Path="bin/Release"
|
||||
CodesignKey_Name="mossimo code"
|
||||
App_Modules_Path="$App_Path/$Publish_Path/modules"
|
||||
echo "编译主程序"
|
||||
cd "$App_Path"
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path" -f net8.0-macos -p:CreatePackage=false -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
|
||||
rm -r "$App_Modules_Path"
|
||||
mkdir -p "$App_Modules_Path"
|
||||
echo "编译插件"
|
||||
#复制插件
|
||||
Copy_Plugins() {
|
||||
local Plugins_Folder=$1
|
||||
local Plugins_Folder_Name=$2
|
||||
local Plugins_FileName=$3
|
||||
mkdir -p "$App_Modules_Path/$Plugins_Folder_Name"
|
||||
cp -r "$Plugins_Folder/$Plugins_FileName" "$App_Modules_Path/$Plugins_Folder_Name/$Plugins_FileName"
|
||||
}
|
||||
echo "编译加速插件"
|
||||
Plugins_Accelerator_Path="$Base_Path/src/BD.WTTS.Client.Plugins.Accelerator"
|
||||
cd "$Plugins_Accelerator_Path"
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path" -f net8.0-macos
|
||||
Copy_Plugins "$Plugins_Release_Path/net8.0-macos" "Accelerator" "BD.WTTS.Client.Plugins.Accelerator.dll"
|
||||
|
||||
Plugins_Accelerator_ReverseProxy_Path="$Base_Path/src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy"
|
||||
cd "$Plugins_Accelerator_ReverseProxy_Path"
|
||||
# 根据 Build_Mode 执行不同逻辑
|
||||
if [ "$Build_Mode" = "any" ]; then
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path/arm64" -f net8.0 -r osx-arm64 -p:PublishSingleFile=true --self-contained -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path/x64" -f net8.0 -r osx-x64 -p:PublishSingleFile=true --self-contained -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
lipo -create "$Publish_Path/arm64/Steam++.Accelerator" "$Publish_Path/x64/Steam++.Accelerator" -output "$Publish_Path/Steam++.Accelerator"
|
||||
Copy_Plugins "$Publish_Path" "Accelerator" "Steam++.Accelerator"
|
||||
elif [ "$Build_Mode" = "arm64" ]; then
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path/arm64" -f net8.0 -r osx-arm64 -p:PublishSingleFile=true --self-contained -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
Copy_Plugins "$Publish_Path/arm64" "Accelerator" "Steam++.Accelerator"
|
||||
elif [ "$Build_Mode" = "x64" ]; then
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path/x64" -f net8.0 -r osx-x64 -p:PublishSingleFile=true --self-contained -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
Copy_Plugins "$Publish_Path/x64" "Accelerator" "Steam++.Accelerator"
|
||||
fi
|
||||
|
||||
echo "编译令牌插件"
|
||||
Plugins_Authenticator_Path="$Base_Path/src/BD.WTTS.Client.Plugins.Authenticator"
|
||||
cd "$Plugins_Authenticator_Path"
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path" -f net8.0-macos -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
Copy_Plugins "$Plugins_Release_Path/net8.0-macos" "Authenticator" "BD.WTTS.Client.Plugins.Authenticator.dll"
|
||||
|
||||
echo "编译账户插件"
|
||||
Plugins_GameAccount_Path="$Base_Path/src/BD.WTTS.Client.Plugins.GameAccount"
|
||||
cd "$Plugins_GameAccount_Path"
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path" -f net8.0-macos -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
Copy_Plugins "$Plugins_Release_Path/net8.0-macos" "GameAccount" "BD.WTTS.Client.Plugins.GameAccount.dll"
|
||||
|
||||
echo "编译游戏库插件"
|
||||
Plugins_GameList_Path="$Base_Path/src/BD.WTTS.Client.Plugins.GameList"
|
||||
cd "$Plugins_GameList_Path"
|
||||
dotnet publish -c Release -p:PublishDir="$Publish_Path" -f net8.0-macos -p:EnableCodeSigning=true -p:CodesignKey="$CodesignKey_Name"
|
||||
Copy_Plugins "$Plugins_Release_Path/net8.0-macos" "GameList" "BD.WTTS.Client.Plugins.GameList.dll"
|
||||
|
||||
echo "复制插件到程序目录"
|
||||
cd "$App_Path"
|
||||
|
||||
# 根据 Build_Mode 执行不同逻辑
|
||||
if [ "$Build_Mode" = "any" ]; then
|
||||
cp -r "$App_Modules_Path" "$Plugins_Release_Path/net8.0-macos/Steam++.app/Contents/MonoBundle"
|
||||
elif [ "$Build_Mode" = "arm64" ]; then
|
||||
cp -r "$App_Modules_Path" "$Plugins_Release_Path/net8.0-macos/osx-arm64/Steam++.app/Contents/MonoBundle"
|
||||
cp -r "$Plugins_Release_Path/net8.0-macos/Steam++.app/Contents/Resources" "$Plugins_Release_Path/net8.0-macos/Steam++.app/Contents"
|
||||
elif [ "$Build_Mode" = "x64" ]; then
|
||||
cp -r "$App_Modules_Path" "$Plugins_Release_Path/net8.0-macos/osx-x64/Steam++.app/Contents/MonoBundle"
|
||||
cp -r "$Plugins_Release_Path/net8.0-macos/Steam++.app/Contents/Resources" "$Plugins_Release_Path/net8.0-macos/Steam++.app/Contents"
|
||||
fi
|
||||
|
||||
echo "代码签名重新手动签名"
|
||||
App_Publish_Path="$App_Path/bin/Release/net8.0-macos/Steam++.app"
|
||||
# #代码签名重新手动签名
|
||||
codesign --remove-signature "$App_Publish_Path"
|
||||
codesign --remove-signature "$App_Publish_Path/Contents/MacOS/Steam++"
|
||||
dylibs=$(find "$App_Publish_Path/Contents/MonoBundle" -type f -name "*.dylib")
|
||||
for dylib in $dylibs; do
|
||||
codesign --remove-signature "$dylib"
|
||||
codesign -f -s "$CodesignKey_Name" "$dylib"
|
||||
done
|
||||
codesign -f -s "$CodesignKey_Name" "$App_Publish_Path/Contents/MacOS/Steam++"
|
||||
codesign -f -s "$CodesignKey_Name" "$App_Publish_Path"
|
||||
sudo xattr -rd com.apple.quarantine "$App_Publish_Path"
|
||||
@@ -135,8 +135,8 @@
|
||||
{
|
||||
"TypeName": "double",
|
||||
"PropertyName": "WindowBackgroundOpacity",
|
||||
"DefaultValue": "OperatingSystem2.IsWindows11AtLeast() ? .0 : .8",
|
||||
"DefaultValueIsConst": false,
|
||||
"DefaultValue": ".8",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "窗口背景不透明度",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
@@ -171,7 +171,7 @@
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "WindowBackgroundCustomImagePath",
|
||||
"DefaultValue": "\"avares://BD.WTTS.Client.Avalonia/UI/Assets/back.png\"",
|
||||
"DefaultValue": "\"/UI/Assets/back.png\"",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "自定义背景图像路径",
|
||||
"IsRegionOrEndregion": null,
|
||||
@@ -203,24 +203,6 @@
|
||||
"Summary": "",
|
||||
"IsRegionOrEndregion": false,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "HashSet<string>",
|
||||
"PropertyName": "SortMenuTabs",
|
||||
"DefaultValue": "null",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "菜单排序",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "StartDefaultPageName",
|
||||
"DefaultValue": "null",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "程序启动时默认页",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
}
|
||||
],
|
||||
"Usings": ""
|
||||
@@ -268,21 +250,12 @@
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "TrayIcon",
|
||||
"DefaultValue": "true",
|
||||
"DefaultValue": "false",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "启用托盘图标",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "MessagePopupNotification",
|
||||
"DefaultValue": "true",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "启用消息推送通知",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "GameListUseLocalCache",
|
||||
@@ -345,114 +318,6 @@
|
||||
"Summary": "禁用插件",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "PluginSafeMode",
|
||||
"DefaultValue": "true",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "插件安全模式",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "DateTimeOffset",
|
||||
"PropertyName": "LastLookNoticeDateTime",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "最后查看通知时间",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "",
|
||||
"PropertyName": "",
|
||||
"DefaultValue": "",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "配置应用程序的 Web 代理",
|
||||
"IsRegionOrEndregion": true,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "AppWebProxyMode",
|
||||
"PropertyName": "WebProxyMode",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 代理模式",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "CustomWebProxyModeHost",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 Host",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": false
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "CustomWebProxyModePort",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 Port",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "CustomWebProxyModeAddress",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 Address",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": false
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "CustomWebProxyModeBypassOnLocal",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 BypassOnLocal",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "CustomWebProxyModeCredentialUserName",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 NetworkCredential.UserName",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": false
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "CustomWebProxyModeCredentialPassword",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 NetworkCredential.Password",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": false
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "CustomWebProxyModeCredentialDomain",
|
||||
"DefaultValue": "default",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Web 自定义代理 NetworkCredential.Domain",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": false
|
||||
},
|
||||
{
|
||||
"TypeName": "",
|
||||
"PropertyName": "",
|
||||
"DefaultValue": "",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "",
|
||||
"IsRegionOrEndregion": false,
|
||||
"IsValueType": null
|
||||
}
|
||||
],
|
||||
"Usings": ""
|
||||
@@ -462,11 +327,11 @@
|
||||
"InterfaceFilePath": "..\\src\\BD.WTTS.Client.Plugins.GameAccount\\Settings\\Abstractions",
|
||||
"Properties": [
|
||||
{
|
||||
"TypeName": "ConcurrentDictionary<string, string?>",
|
||||
"TypeName": "ConcurrentDictionary<long, string?>",
|
||||
"PropertyName": "AccountRemarks",
|
||||
"DefaultValue": "new()",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "账号备注字典",
|
||||
"DefaultValue": "null",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Steam 账号备注字典",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
@@ -513,15 +378,6 @@
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "GridLayoutType",
|
||||
"PropertyName": "GameLibraryLayoutType",
|
||||
"DefaultValue": "GridLayoutType.Grid",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "库存游戏展示布局",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "GameCloudArchiveFilter",
|
||||
@@ -543,8 +399,8 @@
|
||||
{
|
||||
"TypeName": "Dictionary<uint, string?>",
|
||||
"PropertyName": "HideGameList",
|
||||
"DefaultValue": "new()",
|
||||
"DefaultValueIsConst": false,
|
||||
"DefaultValue": "null",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "隐藏的游戏列表",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
@@ -552,8 +408,8 @@
|
||||
{
|
||||
"TypeName": "Dictionary<uint, string?>",
|
||||
"PropertyName": "AFKAppList",
|
||||
"DefaultValue": "new()",
|
||||
"DefaultValueIsConst": false,
|
||||
"DefaultValue": "null",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "挂时长游戏列表",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
@@ -598,12 +454,15 @@
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "SteamProgramPath",
|
||||
"DefaultValue": "null",
|
||||
"DefaultValue": "Ioc.Get<ISteamService>().SteamProgramPath",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "Steam 默认程序路径",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"Sharp": "endif"
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "IsAutoRunSteam",
|
||||
@@ -640,15 +499,6 @@
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "IsRunSteamVGUI",
|
||||
"DefaultValue": "false",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "Steam 以旧版 VGUI 启动",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "IsEnableSteamLaunchNotification",
|
||||
@@ -675,9 +525,6 @@
|
||||
"Summary": "Steam 以管理员权限运行",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"Sharp": "endif"
|
||||
}
|
||||
],
|
||||
"Usings": ""
|
||||
@@ -952,227 +799,6 @@
|
||||
},
|
||||
{
|
||||
"Sharp": "endif"
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "UseDoh",
|
||||
"DefaultValue": "true",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "启用 DNS over HTTPS",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "CustomDohAddres",
|
||||
"DefaultValue": "null",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "自定义 DNS over HTTPS 地址",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
}
|
||||
],
|
||||
"Usings": ""
|
||||
},
|
||||
"SteamIdleSettings": {
|
||||
"ClassFilePath": "..\\src\\BD.WTTS.Client.Plugins.SteamIdleCard\\Settings",
|
||||
"InterfaceFilePath": "..\\src\\BD.WTTS.Client.Plugins.SteamIdleCard\\Settings\\Abstractions",
|
||||
"Properties": [
|
||||
{
|
||||
"TypeName": "TimeSpan",
|
||||
"PropertyName": "IdleTime",
|
||||
"DefaultValue": "TimeSpan.FromMinutes(6)",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "挂卡状态更新时间",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "IdleRule",
|
||||
"PropertyName": "IdleRule",
|
||||
"DefaultValue": "IdleRule.FastMode",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "运行规则",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "IdleSequentital",
|
||||
"PropertyName": "IdleSequentital",
|
||||
"DefaultValue": "IdleSequentital.Default",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "运行顺序",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "MaxIdleCount",
|
||||
"DefaultValue": "30",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "最大并行运行游戏数量",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "double",
|
||||
"PropertyName": "MinRunTime",
|
||||
"DefaultValue": "2",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "最少游戏时间 hours",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "double",
|
||||
"PropertyName": "SwitchTime",
|
||||
"DefaultValue": "5000",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "自动切换游戏时间间隔 ms",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "double",
|
||||
"PropertyName": "RefreshBadgesTime",
|
||||
"DefaultValue": "6",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "自动刷新徽章数据时间间隔 min",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
}
|
||||
],
|
||||
"Usings": ""
|
||||
},
|
||||
"ASFSettings": {
|
||||
"ClassFilePath": "..\\src\\BD.WTTS.Client.Plugins.ArchiSteamFarmPlus\\Settings",
|
||||
"InterfaceFilePath": "..\\src\\BD.WTTS.Client.Plugins.ArchiSteamFarmPlus\\Settings\\Abstractions",
|
||||
"Properties": [
|
||||
{
|
||||
"TypeName": "string",
|
||||
"PropertyName": "ArchiSteamFarmExePath",
|
||||
"DefaultValue": "string.Empty",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "ASF 路径",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": false
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "AutoRunArchiSteamFarm",
|
||||
"DefaultValue": "false",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "程序启动时自动运行 ASF",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "CheckArchiSteamFarmExe",
|
||||
"DefaultValue": "false",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "检查文件安全性",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "ConsoleMaxLineDefault",
|
||||
"DefaultValue": "200",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "控制台默认最大行数",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "MinRangeConsoleMaxLine",
|
||||
"DefaultValue": "DefaultConsoleMaxLineDefault",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "控制台默认最大行数范围最小值",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "MaxRangeConsoleMaxLine",
|
||||
"DefaultValue": "5000",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "控制台默认最大行数范围最大值",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "ConsoleMaxLine",
|
||||
"DefaultValue": "DefaultConsoleMaxLineDefault",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "控制台最大行数",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "ConsoleFontSizeDefault",
|
||||
"DefaultValue": "14",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "MinRangeConsoleFontSize",
|
||||
"DefaultValue": "8",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "MaxRangeConsoleFontSize",
|
||||
"DefaultValue": "24",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "ConsoleFontSize",
|
||||
"DefaultValue": "DefaultConsoleFontSizeDefault",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "控制台字体大小",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "IPCPortIdValue",
|
||||
"DefaultValue": "6242",
|
||||
"DefaultValueIsConst": true,
|
||||
"Summary": "",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": null
|
||||
},
|
||||
{
|
||||
"TypeName": "int",
|
||||
"PropertyName": "IPCPortId",
|
||||
"DefaultValue": "DefaultIPCPortIdValue",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "IPC 端口号,默认值为 <see cref=\"DefaultIPCPortIdValue\" />",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
},
|
||||
{
|
||||
"TypeName": "bool",
|
||||
"PropertyName": "IPCPortOccupiedRandom",
|
||||
"DefaultValue": "true",
|
||||
"DefaultValueIsConst": false,
|
||||
"Summary": "IPC 端口号被占用时是否随机一个未使用的端口号,默认值 <see langword=\"true\" />",
|
||||
"IsRegionOrEndregion": null,
|
||||
"IsValueType": true
|
||||
}
|
||||
],
|
||||
"Usings": ""
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
<!--👇图标如果发生更改,还需更改 BD.WTTS.Client.Tools.OpenSourceLibraryList(Program.OpenSourceLibraryListEmoji) -->
|
||||
## 📄 Open Source Library
|
||||
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
|
||||
* [System.Reactive](https://github.com/dotnet/reactive)
|
||||
* [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)
|
||||
* [YARP](https://github.com/microsoft/reverse-proxy)
|
||||
* [FastGithub](https://github.com/dotnetcore/FastGithub)
|
||||
* [Portable.BouncyCastle](https://github.com/novotnyllc/bc-csharp)
|
||||
* [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)
|
||||
* [MessagePack-CSharp](https://github.com/neuecc/MessagePack-CSharp)
|
||||
* [MemoryPack](https://github.com/Cysharp/MemoryPack)
|
||||
* [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)
|
||||
* [GooglePlayServicesComponents](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)
|
||||
* [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)
|
||||
* [.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,4 +1 @@
|
||||
### [OpenWrt](https://openwrt.org/start)
|
||||
|
||||
TODO
|
||||
Asuswrt-Merlin
|
||||
### [OpenWrt](https://openwrt.org/start)
|
||||
@@ -1,30 +1,62 @@
|
||||
<!-- https://keylol.com/t667906-1-1 -->
|
||||
# 前言
|
||||
Steam++ 是完全开源的,请不要在非官方渠道下载软件。我们也制作了自己的[官网](https://www.steampp.net),大家可以去[官网](https://www.steampp.net)或者开源仓库地址下载。
|
||||
|
||||
# Steam++ 工具箱
|
||||
Steam++是一款开源的跨平台Steam工具箱,请不要在非官方渠道下载软件,
|
||||
[官网](https://www.steampp.net),大家可以去官网或者开源仓库地址下载。
|
||||
|
||||
## x.y.z 更新内容
|
||||
微软商店版本在微软商店检查获取更新即可,一般会比桌面版晚上几天的审核时间。
|
||||
# Steam++工具箱
|
||||
|
||||
|
||||
## 2.6.2更新内容
|
||||
微软商店版本在微软商店检查获取更新即可,一般会比桌面版晚上一天的审核时间。
|
||||
### 版本亮点
|
||||
TODO
|
||||
1. ASF 升级至 **V5.2.0.10**
|
||||
2. 新增 ASF 控制台字体大小、最大行数设置项
|
||||
3. 新增 Steam 下载完成定时关机、睡眠功能
|
||||
4. 新增 代理设置可自定义 DNS
|
||||
5. 新增 ASF 编辑/移除 Bot 功能
|
||||
6. 新增 Microsoft/Xbox 相关加速服务 (需要升级到 **2.6.2** 之后可用)
|
||||
7. 新增 Uplay 相关加速服务 (需要升级到 **2.6.2** 之后可用)
|
||||
8. 新增 OneDrive 等更多相关加速服务 (需要升级到 **2.6.2** 之后可用)
|
||||
9. 优化 Desktop 加速代理性能
|
||||
10. 优化 Desktop 脚本注入打包的性能
|
||||
11. 优化 Desktop 已安装游戏加载性能
|
||||
12. 从此版本开始将使用 Github Action 自动化部署发布
|
||||
|
||||
### 修复问题
|
||||
TODO
|
||||
1. 改进 Desktop 网络加速现默认使用阿里 DNS(223.5.5.5, 223.6.6.6)
|
||||
2. 改进 自动更新包文件校验失败时提示
|
||||
3. 改进 自动更新失败时将自动跳转官网
|
||||
4. 改进 ASF IPC 默认端口号由 1242 改为 6242
|
||||
5. 修复 Linux 与 macOS 中 ASF-UI 解压包文件夹分隔符不正确
|
||||
6. 修复 Windows Hosts 只读时尝试取消只读属性的操作没有正确执行
|
||||
7. 修复 Windows 此软件自动更新删除更新包缓存时因文件占用引发的中断
|
||||
8. 修复 Desktop 高 DPI 下动态桌面错位
|
||||
9. 修复 本地令牌确认交易在登录时可能会卡住
|
||||
10. 修复 Windows 启用动态桌面后全屏可能导致窗口冻结无法操作
|
||||
11. 修复 Windows 动态背景有时会被其他窗口遮挡
|
||||
12. 改进 本地令牌 登录验证码无法加载时可点击在浏览器中查看验证码图片
|
||||
13. 修复 Desktop 加速代理中可能出现的一些错误
|
||||
14. 改进 Desktop 令牌详情 UI
|
||||
15. 改进 Desktop 账号切换中的用户名信息现在默认隐藏
|
||||
16. 改进 Desktop 深色模式与浅色模式的视觉效果
|
||||
17. 修复 Pixiv 加速不能登录的问题
|
||||
18. 修复 Twitch 加速不计算掉宝进度的问题
|
||||
19. 修复 Discord 加速检测更新失败导致无法启动客户端的问题
|
||||
20. 修复 Windows 因添加 JumpList 时可能导致的闪退
|
||||
21. 修复 Desktop 本地令牌 点击锁定后输入密码按回车解锁会循环无限触发锁定的问题
|
||||
|
||||
|
||||
[](https://steampp.net)
|
||||
[]()
|
||||
[]()
|
||||
|
||||
------
|
||||
|
||||
|
||||
## 工具介绍
|
||||
|
||||
`Steam++` 是一款开源的跨平台 Steam 工具箱,所有本地功能完全免费,开源发布于 GitHub,如果您对发布的二进制文件不放心,可以自行下载源码编译运行。
|
||||
此工具的大部分功能都是需要您下载安装 Steam 才能使用。
|
||||
工具预计将整合进大部分常用的 Steam 相关工具,并且尽力做到比原工具更好用。
|
||||
`Steam++`是一款开源的跨平台Steam工具箱,所有本地功能完全免费,开源发布于Github,如果您对发布的二进制文件不放心,可以自行下载源码编译运行。
|
||||
此工具的大部分功能都是需要您下载安装Steam才能使用。
|
||||
工具预计将整合进大部分常用的Steam相关工具,并且尽力做到比原工具更好用。
|
||||
软件截图
|
||||
[hide]
|
||||
[attachimg]1463881[/attachimg]
|
||||
@@ -35,45 +67,46 @@ TODO
|
||||
|
||||
## 核心功能
|
||||
|
||||
### 1. 本地方法访问加快
|
||||
|
||||
略
|
||||
### 1. 通过本地反代理Steam的社区等网页使其能正常访问
|
||||
|
||||
### 2. 快速切换当前设备已经记住登录的 Steam 账号
|
||||
功能使用Titanium-Web-Proxy开源项目进行本地反代,相比SteamCommunity302工具具有更快的启动速度。让用户能够连接上诸如Steam社区(个人资料页)、Discord语音聊天、Twitch直播观看、Origin下载加速、谷歌验证码、Pixiv图片等。
|
||||
|
||||
该功能是读取 Steam 路径下存储的本地用户登录记录直接展示操作,可以多账号切换无需重新输入密码和令牌。如果您的 IP 地址更换,会导致登录状态失效。
|
||||
### 2. 快速切换当前PC已经记住登陆的Steam账号
|
||||
|
||||
### 3. Steam 游戏成就管理
|
||||
该功能是读取Steam路径下存储的本地用户登录记录直接展示操作,可以多账号切换无需重新输入密码和令牌。如果您的ip地址更换,会导致登陆状态失效。
|
||||
|
||||
### 3. Steam游戏成就管理
|
||||
|
||||
能够读取任何游戏的成就信息(包括隐藏成就),并且能进行成就修改,包括成就解锁以及成就反解锁,还能够修改成就统计信息
|
||||
参考 SAM(SteamAchievementManager)进行二次开发,修复了成就语言有中文却依然是英文成就信息的 BUG,修改了游戏列表的加载和操作易用性。
|
||||
参考SAM(SteamAchievementManager)进行二次开发,修复了成就语言有中文却依然是英文成就信息的BUG,修改了游戏列表的加载和操作易用性。
|
||||
注意:滥用成就管理功能可能会导致开发者封禁!
|
||||
[attachimg]1463887[/attachimg]
|
||||
|
||||
### 4. Steam 本地两步身份验证器
|
||||
### 4. Steam本地两步身份验证器
|
||||
|
||||
该功能能够将 Steam 手机令牌储存到您的电脑中,并能够进行与手机端一样的操作。
|
||||
该功能能够将Steam手机令牌储存到您的电脑中,并能够进行与手机端一样的操作。
|
||||
不仅能查看手机令牌,还能进行交易报价确认,并且能一键全部确认。
|
||||
功能参考 WinAuth 开发,功能类似的软件还有 SteamDesktopAuthenticator 等。
|
||||
功能参考WinAuth开发,功能类似的软件有WinAuth、SteamDesktopAuthenticator。
|
||||
本地令牌交易市场报价确认
|
||||
[attachimg]1463890[/attachimg]
|
||||
|
||||
### 5. Steam 内置浏览器脚本注入
|
||||
### 5. Steam内置浏览器脚本注入
|
||||
|
||||
通过反代加速功能将 JS 脚本内置插入了 Steam 客户端内的浏览器,达到了与油猴类似的效果。在脚本工坊中可以从我们的服务器上下载到已经兼容的脚本。我们也会不断添加新的脚本,同时也会对旧的脚本进行维护。
|
||||
通过反代加速功能将js脚本内置插入了Steam客户端内的浏览器,达到了与油猴类似的效果。目前2.0.0.6版本新增了脚本工坊,可以从我们的服务器上下载到已经兼容的脚本。我们也会不断添加新的脚本,同时也会对旧的脚本进行维护。
|
||||
[attachimg]1463883[/attachimg]
|
||||
|
||||
### 6. Steam 家庭库共享排序
|
||||
### 6.Steam家庭库共享排序
|
||||
|
||||
可以排序你的共享库存顺序,避免只能读取 A 的共享游戏,却想玩 B 的共享游戏。
|
||||
可以排序你的共享库存顺序,避免只能读取A的共享游戏,却想玩B的共享游戏。
|
||||
|
||||
### 7. Steam 监控下载完成定时关机
|
||||
### 7.Steam监控下载完成定时关机
|
||||
|
||||
可以监控 Steam 下载列表所有游戏的下载进度并设置下载完成后自动关机或睡眠电脑,节约你的电费。
|
||||
可以监控Steam下载列表所有游戏的下载进度并设置下载完成后自动关机或睡眠电脑,节约你的电费。
|
||||
|
||||
### 8. 已内置 ASF 挂卡功能
|
||||
### 8.已内置ASF挂卡功能
|
||||
|
||||
[ASF](https://github.com/JustArchiNET/ArchiSteamFarm) 大家肯定都不陌生,它实在是太好用了,所以我们内置了 [ASF](https://github.com/JustArchiNET/ArchiSteamFarm) 在 Steam++ 内,并在后续会对 [ASF](https://github.com/JustArchiNET/ArchiSteamFarm) 在 UI 环境下使用做更多增强体验。
|
||||
[ASF](https://github.com/JustArchiNET/ArchiSteamFarm)大家肯定都不陌生,它实在是太好用了,所以我们内置了ASF在Steam++内,并在后续会对ASF在UI环境下使用做更多增强体验。
|
||||
|
||||
### 10. 更多的游戏工具功能
|
||||
|
||||
@@ -88,30 +121,32 @@ Linux 截图:
|
||||
|
||||
|
||||
## 运行环境
|
||||
> 当前版本采用独立部署编译,不需要运行环境也可以运行。
|
||||
|
||||
> 程序使用C# 在 .NET 6.0环境下开发,新版采用独立部署编译,不需要运行环境也可以运行)。
|
||||
|
||||
RuntimeIdentifier | Available | Edition
|
||||
--- | --- | ---
|
||||
win-x64 | ✅ | Preview
|
||||
osx-x64 | ❌ | TODO
|
||||
linux-x64 | ❌ | TODO
|
||||
android-arm64 | ❌ | TODO
|
||||
linux-arm64 | ❌ | TODO
|
||||
osx-arm64 | ❌ | TODO
|
||||
win-arm64 | ❌ | TODO
|
||||
ios-arm64 | ❌ | TODO
|
||||
<!-- 不编译 x86/32 bit 包减少测试工作量,Windows 本机加密 32 bit 与 64 bit 不兼容,涉及本地令牌加密 -->
|
||||
<!-- arm64 for Windows 因 steamclient.dll 缺少 arm64 支持,以及 .NET 目前不支持 ARM64EC,无法加载本机库,涉及库存游戏中的部分功能 -->
|
||||
win-x64 | ✅ | Stable
|
||||
osx-x64 | ✅ | β
|
||||
linux-x64 | ✅ | α
|
||||
android-arm64 | ✅ | α
|
||||
android-arm | ✅ | α
|
||||
linux-arm64 | ✅ | α
|
||||
linux-arm | ✅ | α
|
||||
osx-arm64 | ❌ |
|
||||
win-arm64 | ❌ |
|
||||
ios-arm64 | ❌ |
|
||||
|
||||
|
||||
## 下载
|
||||
> [官网](https://steampp.net/)
|
||||
> [Github](https://github.com/rmbadmin/SteamTools/releases)
|
||||
> [Gitee](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
> [Microsoft Store](https://www.microsoft.com/store/productId/9MTCFHS560NG)
|
||||
> 分流下载:
|
||||
> [hide]
|
||||
> [蓝奏云](https://cliencer.lanzoux.com/b0165duja)
|
||||
> 提取码:1234
|
||||
> [/hide]
|
||||
> 使用过程中可能遇到 Windows Defender 误报,您可以选择添加信任。
|
||||
|
||||
> [官网](https://steampp.net/)
|
||||
> [Github](https://github.com/rmbadmin/SteamTools/releases)
|
||||
> [Gitee](https://gitee.com/rmbgame/SteamTools/releases)
|
||||
> [Microsoft Store](https://www.microsoft.com/store/productId/9MTCFHS560NG)
|
||||
> 分流下载:
|
||||
> [hide]
|
||||
> [蓝奏云](https://cliencer.lanzoux.com/b0165duja)
|
||||
> 提取码:1234
|
||||
> [/hide]
|
||||
> 使用过程中可能遇到windows defender误报,您可以选择添加信任。
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>Watt Toolkit</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.8.3</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.8.3.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>© 长沙次元超越科技有限公司. All Rights Reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,2 +0,0 @@
|
||||
param([string]$file)
|
||||
(Get-FileHash $file -Algorithm SHA256).Hash
|
||||
@@ -1,87 +0,0 @@
|
||||
create_app_structure() {
|
||||
APPNAME=$1
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
APPICONS="${{ Steam++_IcnsFile }}"
|
||||
|
||||
if [ ! -d "$APPDIR" ]; then
|
||||
echo "creating app structure $APPDIR"
|
||||
|
||||
mkdir -vp "$APPDIR"/{Resources,Frameworks}
|
||||
cp -v "$APPICONS" "$APPDIR/Resources/$APPNAME.icns"
|
||||
fi
|
||||
}
|
||||
|
||||
emit_plist() {
|
||||
PLIST_APPNAME=$1
|
||||
PLIST_PATH="$2/Info.plist"
|
||||
|
||||
if [ "$3" ]; then
|
||||
LSUIELEMENT="false"
|
||||
else
|
||||
LSUIELEMENT="true"
|
||||
fi
|
||||
|
||||
if [ ! -f "$PLIST_PATH" ]; then
|
||||
echo "emiting $PLIST_PATH"
|
||||
cat <<EOF > "$PLIST_PATH"
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.steampp.app</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${{ Steam++_ShortVersion }}</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${{ Steam++_Version }}</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh_CN</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${{ Steam++_RunName }}</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>${{ Steam++_RunName }}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>$PLIST_APPNAME</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>LSUIElement</key>
|
||||
<string>$LSUIELEMENT</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>© 长沙次元超越科技有限公司. All Rights Reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
cd "${{ Steam++_OutPutFilePath }}"
|
||||
|
||||
|
||||
BINARYNAME="${{ Steam++_AppName }}"
|
||||
|
||||
echo "Building Avalonia demo..."
|
||||
|
||||
|
||||
APPNAME="$BINARYNAME"
|
||||
APPDIR="$APPNAME.app/Contents"
|
||||
|
||||
rm -rf "$APPDIR"
|
||||
|
||||
create_app_structure "$APPNAME"
|
||||
emit_plist "$APPNAME" "$APPDIR" true
|
||||
|
||||
mv -f "${{ Steam++_APPDIR }}" "$APPDIR/MacOS"
|
||||
chmod +x "$APPDIR/MacOS/Steam++"
|
||||
|
||||
mkdir "${{ Steam++_APPDIR }}"
|
||||
mv -f "${{ Steam++_OutPutFilePath }}/$BINARYNAME.app" "${{ Steam++_APPDIR }}/$BINARYNAME.app"
|
||||
@@ -1 +0,0 @@
|
||||
dotnet publish "..\src\ST.Client.Desktop.Avalonia.App\ST.Client.Avalonia.App.csproj" -c Release -p:PublishProfile=win-x64 -p:DeployOnBuild=true -p:ExtraDefineConstants=win-x64 --nologo
|
||||
@@ -1,82 +0,0 @@
|
||||
param([string]$version,[string]$configuration='Release',[bool]$isPublish=$false)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
Write-Host 'dotnet SDK info'
|
||||
dotnet --info
|
||||
|
||||
$RootPath = Split-Path $PSScriptRoot -Parent
|
||||
$output_dir = "$RootPath\src\ST.Client.Desktop.Avalonia.App\bin\$configuration\Publish"
|
||||
$proj_path = "$RootPath\src\ST.Client.Desktop.Avalonia.App\ST.Client.Avalonia.App.csproj"
|
||||
|
||||
$publishtool_dir = "$RootPath\src\ST.Tools.Publish"
|
||||
$publishtool_exe = "$publishtool_dir\bin\Release\net6.0\p.exe"
|
||||
|
||||
$build_pubxmls = "fd-win-x64","win-x64","fd-win-x86","win-x86","osx-x64","linux-x64","linux-arm64","osx-arm64"
|
||||
|
||||
function Build-PublishTool
|
||||
{
|
||||
if(-not (Test-Path $publishtool_exe))
|
||||
{
|
||||
& dotnet build $publishtool_dir\ST.Tools.Publish.csproj -c Release
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
|
||||
$dev=''
|
||||
if($configuration -eq 'Debug')
|
||||
{
|
||||
$dev = "-dev"
|
||||
}
|
||||
|
||||
& $publishtool_exe ver -token $('"')$env:Token$('"') $dev
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
|
||||
# build App
|
||||
|
||||
Foreach ($pubxml in $build_pubxmls)
|
||||
{
|
||||
Build-App $pubxml
|
||||
}
|
||||
|
||||
& $publishtool_exe full -token $('"')$env:Token$('"') $dev -win_sign_pfx_pwd $('"')$env:WIN_SIGN_PFX_PWD('"')
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
|
||||
function Build-App
|
||||
{
|
||||
param([string]$rid)
|
||||
|
||||
Write-Host "Building $version $rid"
|
||||
|
||||
if($rid.StartsWith("fd-"))
|
||||
{
|
||||
$publishDir = "$output_dir\FrameworkDependent\$rid"
|
||||
}else
|
||||
{
|
||||
$publishDir = "$output_dir\$rid"
|
||||
}
|
||||
|
||||
Remove-Item $publishDir -Recurse -Force -Confirm:$false -ErrorAction Ignore
|
||||
|
||||
if($configuration -eq 'Debug'){ $rid = "dev-$rid" }
|
||||
|
||||
& dotnet publish $proj_path -c $configuration -p:PublishProfile=$rid -p:DeployOnBuild=true -p:ExtraDefineConstants=$rid --nologo
|
||||
|
||||
if ($LASTEXITCODE) { exit $LASTEXITCODE }
|
||||
}
|
||||
|
||||
if($isPublish)
|
||||
{
|
||||
if([String]::IsNullOrEmpty($env:Token))
|
||||
{
|
||||
Write-Error "$version Undefined Token : $env:Token"
|
||||
Exit 1
|
||||
}
|
||||
|
||||
Build-PublishTool
|
||||
}else
|
||||
{
|
||||
Foreach ($pubxml in $build_pubxmls)
|
||||
{
|
||||
Build-App $pubxml
|
||||
}
|
||||
}
|
||||
@@ -1,318 +0,0 @@
|
||||
function Main
|
||||
{
|
||||
begin
|
||||
{
|
||||
$ErrorActionPreference = 'stop'
|
||||
|
||||
$target = 'net472'
|
||||
$result = 'Steam++'
|
||||
$bin = '..\source\SteamTools\bin\x86\Release\'
|
||||
# '*.exe.config'
|
||||
$targetKeywords = '*.exe','*.dll','*.txt','*.VisualElementsManifest.xml','*.pak','*.bin','*.js','Log4net.config'
|
||||
$ignoreKeywords = '*.vshost.*','Microsoft.*.resources.dll','ExPlugin.*.dll'
|
||||
|
||||
$exeSource = '\Steam++.exe'
|
||||
|
||||
if (-not(Test-Path $bin))
|
||||
{
|
||||
throw 'Script detected as locate in invalid path exception!! Make sure exist in <SteamTools repository root>\tools-release\'
|
||||
}
|
||||
}
|
||||
|
||||
end
|
||||
{
|
||||
try
|
||||
{
|
||||
# clean up current
|
||||
Get-ChildItem -Directory | Remove-item -Recurse
|
||||
Get-ChildItem | where { $_.Extension -eq ".zip" } | Remove-Item
|
||||
|
||||
Copy-StrictedFilterFileWithDirectoryStructure -Path $(Join-Path $bin $target) -Destination '.\' -Targets $targetKeywords -Exclude $ignoreKeywords
|
||||
|
||||
# valid path check
|
||||
$versionSource = Join-Path $target $exeSource -Resolve
|
||||
|
||||
if ((Test-Path $versionSource) -and (Test-Path $target))
|
||||
{
|
||||
$version = (Get-ChildItem $versionSource).VersionInfo
|
||||
$result = $result + ' v{0}.{1}.{2}' -f $version.ProductMajorPart, $version.ProductMinorPart,$version.ProductBuildPart
|
||||
|
||||
Rename-Item -NewName $result -Path $target
|
||||
New-ZipCompression -source $(Join-Path $(Get-Location) $result) -destination $(Join-Path $(Get-Location).Path ('./' + $result + '.zip'))
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw $_
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# https://gist.github.com/guitarrapc/e78bbd4ddc07389e17d6
|
||||
function Copy-StrictedFilterFileWithDirectoryStructure
|
||||
{
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[parameter(
|
||||
mandatory = 1,
|
||||
position = 0,
|
||||
ValueFromPipeline = 1,
|
||||
ValueFromPipelineByPropertyName = 1)]
|
||||
[string]
|
||||
$Path,
|
||||
|
||||
[parameter(
|
||||
mandatory = 1,
|
||||
position = 1,
|
||||
ValueFromPipelineByPropertyName = 1)]
|
||||
[string]
|
||||
$Destination,
|
||||
|
||||
[parameter(
|
||||
mandatory = 1,
|
||||
position = 2,
|
||||
ValueFromPipelineByPropertyName = 1)]
|
||||
[string[]]
|
||||
$Targets,
|
||||
|
||||
[parameter(
|
||||
mandatory = 0,
|
||||
position = 3,
|
||||
ValueFromPipelineByPropertyName = 1)]
|
||||
[string[]]
|
||||
$Excludes
|
||||
)
|
||||
|
||||
begin
|
||||
{
|
||||
$list = New-Object 'System.Collections.Generic.List[String]'
|
||||
}
|
||||
|
||||
process
|
||||
{
|
||||
Foreach ($target in $Targets)
|
||||
{
|
||||
# Copy "All Directory Structure" and "File" which Extension type is $ex
|
||||
Copy-Item -Path $Path -Destination $Destination -Force -Recurse -Filter $target
|
||||
}
|
||||
}
|
||||
|
||||
end
|
||||
{
|
||||
# Remove -Exclude Item
|
||||
Foreach ($exclude in $Excludes)
|
||||
{
|
||||
Get-ChildItem -Path $Destination -Recurse -File | where Name -like $exclude | Remove-Item
|
||||
}
|
||||
|
||||
# search Folder which include file
|
||||
$allFolder = Get-ChildItem $Destination -Recurse -Directory
|
||||
$containsFile = $allFolder | where {$_.GetFiles()}
|
||||
$containsFile.FullName `
|
||||
| %{
|
||||
$fileContains = $_
|
||||
$result = $allFolder.FullName `
|
||||
| where {$_ -notin $list} `
|
||||
| where {
|
||||
$shortPath = $_
|
||||
$fileContains -like "$shortPath*"
|
||||
}
|
||||
$result | %{$list.Add($_)}
|
||||
}
|
||||
$folderToKeep = $list | sort -Unique
|
||||
|
||||
# Remove All Empty (none file exist) folders
|
||||
Get-ChildItem -Path $Destination -Recurse -Directory | where fullName -notin $folderToKeep | Remove-Item -Recurse
|
||||
}
|
||||
}
|
||||
|
||||
# http://tech.guitarrapc.com/entry/2013/10/08/040325
|
||||
function New-ZipCompression
|
||||
{
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[parameter(
|
||||
mandatory,
|
||||
position = 0,
|
||||
valuefrompipeline,
|
||||
valuefrompipelinebypropertyname)]
|
||||
[string]
|
||||
$source,
|
||||
|
||||
[parameter(
|
||||
mandatory = 0,
|
||||
position = 1,
|
||||
valuefrompipeline,
|
||||
valuefrompipelinebypropertyname)]
|
||||
[string]
|
||||
$destination,
|
||||
|
||||
[parameter(
|
||||
mandatory = 0,
|
||||
position = 2)]
|
||||
[switch]
|
||||
$quiet,
|
||||
|
||||
[parameter(
|
||||
mandatory = 0,
|
||||
position = 3)]
|
||||
[switch]
|
||||
$force
|
||||
)
|
||||
|
||||
try
|
||||
{
|
||||
Add-Type -AssemblyName 'System.IO.Compression.FileSystem'
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
# check file is directory
|
||||
$file = Get-Item -Path $source
|
||||
|
||||
# set zip extension
|
||||
$zipExtension = '.zip'
|
||||
|
||||
# set desktop as destination path if it null
|
||||
if ([string]::IsNullOrWhiteSpace($destination))
|
||||
{
|
||||
if ($file.Mode -like 'd*')
|
||||
{
|
||||
$destination = (Join-Path ([System.Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop)) [System.IO.Path]::GetFileNameWithoutExtension($source + $zipExtension))
|
||||
}
|
||||
else
|
||||
{
|
||||
$destination = (Join-Path ([System.Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop)) [System.IO.Path]::GetFileNameWithoutExtension(($file | select -First 1 -ExpandProperty fullname))) + $zipExtension
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# check destination is input as .zip
|
||||
if (-not($destination.EndsWith($zipExtension)))
|
||||
{
|
||||
throw ('destination parameter value [{0}] not end with extension {1}' -f $destination, $zipExtension)
|
||||
}
|
||||
|
||||
# check destination is already exist or not
|
||||
if (Test-Path $destination)
|
||||
{
|
||||
Remove-Item -Path $destination -Confirm
|
||||
}
|
||||
|
||||
|
||||
# compressionLevel
|
||||
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
|
||||
|
||||
# check file mode for source
|
||||
Write-Verbose ('file.mode = {0}' -f $file.Mode)
|
||||
|
||||
if ($file.Mode -like 'd*') # Directory should be d---
|
||||
{
|
||||
try # create zip from directory
|
||||
{
|
||||
# force output zip file to new destination path, avoiding destination zip name conflict.
|
||||
if ($force)
|
||||
{
|
||||
# check destination is already exist, CreateFromDirectory will fail with same name of destination file.
|
||||
if (Test-Path $destination)
|
||||
{
|
||||
# show warning for same destination exist.
|
||||
Write-Verbose ('Detected destination name {0} is already exist. Force trying output to new destination zip name.' -f $destination)
|
||||
|
||||
# get current destination information
|
||||
$destinationRoot = [System.IO.Path]::GetDirectoryName($destination)
|
||||
$destinationfile = [System.IO.Path]::GetFileNameWithoutExtension($destination)
|
||||
$destinationExtension = [System.IO.Path]::GetExtension($destination)
|
||||
|
||||
# renew destination name with (2)...(x) until no more same name catch.
|
||||
$count = 2
|
||||
$destination = Join-Path $destinationRoot ($destinationfile + '(' + $count + ')' + $destinationExtension)
|
||||
while (Test-Path $destination)
|
||||
{
|
||||
++$count
|
||||
$destination = Join-Path $destinationRoot ($destinationfile + '(' + $count + ')' + $destinationExtension)
|
||||
}
|
||||
|
||||
# show warning as destination name had been changed due to escape error.
|
||||
Write-Verbose ('Deistination name change to new name {0}' -f $destination)
|
||||
}
|
||||
}
|
||||
|
||||
# include BaseDirectory
|
||||
$includeBaseDirectory = $true
|
||||
|
||||
Write-Verbose ('destination = {0}' -f $destination)
|
||||
|
||||
Write-Verbose ('file.fullname = {0}' -f $file.FullName)
|
||||
Write-Verbose ('compressionLevel = {0}' -f $compressionLevel)
|
||||
Write-Verbose ('includeBaseDirectory = {0}' -f $includeBaseDirectory)
|
||||
|
||||
if ($quiet)
|
||||
{
|
||||
Write-Verbose ('zipping up folder {0} to {1}' -f $file.FullName,$destination)
|
||||
[System.IO.Compression.ZipFile]::CreateFromDirectory($file.fullname,$destination,$compressionLevel,$includeBaseDirectory) > $null
|
||||
$?
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Verbose ('zipping up folder {0} to {1}' -f $file.FullName,$destination)
|
||||
[System.IO.Compression.ZipFile]::CreateFromDirectory($file.fullname,$destination,$compressionLevel,$includeBaseDirectory)
|
||||
Get-Item $destination
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Error $_
|
||||
$?
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
try # create zip from files
|
||||
{
|
||||
# create zip to add
|
||||
$destzip = [System.IO.Compression.Zipfile]::Open($destination,'Update')
|
||||
|
||||
# get items
|
||||
$files = Get-ChildItem -Path $source
|
||||
|
||||
foreach ($file in $files)
|
||||
{
|
||||
$file2 = $file.name
|
||||
|
||||
Write-Verbose ('destzip = {0}' -f $destzip)
|
||||
Write-Verbose ('file.fullname = {0}' -f $file.FullName)
|
||||
Write-Verbose ('file2 = {0}' -f $file2)
|
||||
Write-Verbose ('compressionLevel = {0}' -f $compressionLevel)
|
||||
|
||||
if ($quiet)
|
||||
{
|
||||
Write-Verbose ('zipping up files {0} to {1}' -f $file.FullName,$destzip)
|
||||
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($destzip,$file.fullname,$file2,$compressionLevel) > $null
|
||||
$?
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Verbose ('zipping up files {0} to {1}' -f $file.FullName,$destzip)
|
||||
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($destzip,$file.fullname,$file2,$compressionLevel)
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Write-Error $_
|
||||
$?
|
||||
}
|
||||
finally
|
||||
{
|
||||
# dispose opened zip
|
||||
$destzip.Dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Main
|
||||
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 4.9 MiB |
|
Before Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 929 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 867 B |
|
Before Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
@@ -1 +0,0 @@
|
||||
<svg fill="none" height="35" viewBox="0 0 35 35" width="35" xmlns="http://www.w3.org/2000/svg"><path d="m30.4661 34.928h.2093c2.1842 0 3.9786-1.6362 4.2299-3.7528l.0303-14.1797c-.2484-9.42853-7.9694-16.9955-17.4579-16.9955-9.64507 0-17.4639671 7.8189-17.4639671 17.464 0 9.5419 7.6524471 17.2991 17.1549671 17.464z" fill="#fff"/><g fill="#8b44ac"><path clip-rule="evenodd" d="m17.5239 5.948c-5.4971 0-10.09423 3.85317-11.2379 9.006 1.09492.3069 1.89785 1.3124 1.89785 2.5053 0 1.193-.80293 2.1984-1.89785 2.5054 1.14366 5.1528 5.7408 9.0059 11.2379 9.0059 2.0011 0 3.8829-.5105 5.5223-1.4086v1.3307h5.989v-10.9562c.0055-.1457 0-.3302 0-.4772 0-6.3575-5.1538-11.5113-11.5113-11.5113zm-5.5141 11.5113c0-3.0453 2.4688-5.5141 5.5141-5.5141 3.0454 0 5.5141 2.4688 5.5141 5.5141 0 3.0454-2.4687 5.5141-5.5141 5.5141-3.0453 0-5.5141-2.4687-5.5141-5.5141z" fill-rule="evenodd"/><path d="m7.36841 17.4517c0 1.0174-.82473 1.8421-1.8421 1.8421s-1.84211-.8247-1.84211-1.8421.82474-1.8421 1.84211-1.8421 1.8421.8247 1.8421 1.8421z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000" viewBox="0 0 1000 1000" fill="none"><g opacity="1" transform="translate(0 0) rotate(0)"><mask id="bg-mask-0" fill="white"><use transform="translate(0 0) rotate(0)" xlink:href="#path_0"></use></mask><g mask="url(#bg-mask-0)" ><path id="路径 1" fill-rule="evenodd" style="fill:#8B44AC" opacity="1" d="M458.004,207.814c23.05,-3.91 80.67,-2.15 104.11,2.93c56.64,12.11 104.49,37.3 145.31,76.17c51.17,48.63 82.62,111.33 91.4,181.84c1.18,10.15 1.96,76.95 1.96,174.21v157.82h-154.3v-17.58c0,-9.77 -0.39,-17.58 -0.98,-17.58c-0.58,0 -7.03,2.93 -14.25,6.64c-23.83,11.92 -49.03,19.92 -81.45,25.59c-20.7,3.71 -67.38,4.1 -88.87,0.97c-97.85,-14.06 -181.83,-74.8 -226.17,-163.08c-7.42,-15.04 -19.92,-47.66 -19.92,-52.35c0,-1.36 5.47,-4.88 12.11,-8c31.25,-14.46 50.39,-50.98 44.53,-84.77c-4.49,-25.98 -21.48,-48.83 -44.73,-59.96c-6.64,-3.12 -11.91,-6.84 -11.91,-8.2c0,-4.3 13.48,-39.46 20.7,-53.52c19.34,-38.87 57.42,-83.4 92,-107.81c38.67,-27.34 82.81,-45.51 130.46,-53.32zM474.614,362.114c-53.13,11.32 -94.54,49.41 -110.55,101.75c-5.08,16.6 -5.27,61.53 -0.2,77.93c33.6,108.99 167.58,140.43 244.53,57.42c14.26,-15.42 28.13,-41.01 33.21,-61.13c4.69,-18.75 4.29,-53.51 -0.78,-72.26c-13.48,-48.64 -49.22,-85.16 -98.83,-100.39c-17.58,-5.47 -49.61,-7.04 -67.38,-3.32z"></path><path id="路径 2" fill-rule="evenodd" style="fill:#8B44AC" opacity="1" d="M153.907 541.604C187.107 573.824 242.387 553.514 245.707 508.004C246.877 489.644 242.577 477.344 230.667 465.034C216.407 450.394 192.777 445.114 173.247 451.954C136.917 465.034 126.167 514.454 153.907 541.604Z"></path></g></g><defs><rect id="path_0" x="0" y="0" width="1000.0000000000001" height="1000" /></defs></svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 190 B |
|
Before Width: | Height: | Size: 218 B |
|
Before Width: | Height: | Size: 231 B |
|
Before Width: | Height: | Size: 279 B |
|
Before Width: | Height: | Size: 444 B |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |