mirror of
https://github.com/wavetermdev/wails.git
synced 2026-04-22 15:26:15 -07:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 485a983f26 |
@@ -0,0 +1 @@
|
||||
runtime/assets/default.html
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true,
|
||||
"node": true,
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2016,
|
||||
"sourceType": "module",
|
||||
},
|
||||
"rules": {
|
||||
"indent": [
|
||||
"error",
|
||||
"tab"
|
||||
],
|
||||
"linebreak-style": [
|
||||
"error",
|
||||
"unix"
|
||||
],
|
||||
"quotes": [
|
||||
"error",
|
||||
"single"
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
["leaanthony","stffabi","misitebao","dependabot[bot]","github-actions[bot]","tmclane","bh90210","Lyimmi","ianmjones","konez2k","rh12503","dedo1911","raguay","OlegGulevskyy","napalu","marktohark","codydbentley","ATenderholt","acheong08","akhudek","LGiki","Snider","timkippdev","xijaja","ValentinTrinque","allcontributors[bot]","adalessa","fdidron","hi019","Vaelatern","sebastian0x62","gelleson","ilgityildirim","Chronophylos","antimatter96","gwynforthewyn","avengerweb","achhabra2","willdot","scottopell","JulioDRF","jaesung9507","pierrejoye","marcus-crane","lontten","BillBuilt","albert-sun","phoenix147","Wakeful-Cloud","aayush420","artooro","mondy","redraskal","Ironpark","Juneezee","fallendusk","qaisjp","noahgorstein","Licoy","eft","boreq","wandercn","zllovesuki","Watson-Sei","joshm998","Nexus26404","BuckeyeCoder","edwargix","bdwyertech","oSethoum","SupianIDz","Xhofe","derhasi","i7tsov","NullCode1337","mholt","tk103331","Holmqvist1990","gotid","tong3jie","ckilb","cybertramp","sgosiaco","marvinhosea","ParkourLiu","cuigege","liang-li-dev","joshbuddy","o8x","rnice01","hotafrika","arifali123","almas1992","binyamin","ParvinEyvazov","AlbinoDrought","SheetJSDev","imgbot[bot]","prurigro","KiddoV","shinshin86","Debdut","Gurkengewuerz","giopalma","Maicarons2022","RyoTagami","SamHennessy","h8gi","MyNameIsAres","skamensky","Orijhins","sidwebworks","tomanagle","abtin","andywenk","LukenSkyne","NanoNik","chenxiao1990","daodao97","Yz4230","edwardbrowncross","TechplexEngineer","rayshoo","Junkher","polikow","zandercodes","benjamin-thomas","jicg","gardc","bearsh","stefpap","fengweiqiang","MikeSchaap","GargantuaX","buddyabaddon","flin7","raitonoberu","AlienRecall","meatherly","marcio199226","TAINCER","stankovic98","LanguageAgnostic","Baiyuetribe","diogox","s12chung","aschey","sithembiso","Igogrek","amaury-tobias","SophieAu","alexmat","elie-g","kyoto44","Jarek-SRT","Rested","kraney","mewmew","bt","ocelotsloth","ghost","MagicFun1241","lambdajack","yesgs","kmuchmore"]
|
||||
@@ -7,7 +7,7 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
***Please note: No bug reports are currently being accepted for Wails v3***
|
||||
***Please note: No new bug reports are being accepted for Wails v1***
|
||||
Before submitting this issue, please do the following:
|
||||
- Do a web search for your error. This usually leads to a much better understanding of the issue.
|
||||
- Prove that the error is indeed a Wails bug and not an application bug, with a specific set of steps to reproduce.
|
||||
@@ -84,4 +84,4 @@ body:
|
||||
description: Add any other context about the problem here.
|
||||
placeholder: Add any other context about the problem here.
|
||||
validations:
|
||||
required: false
|
||||
required: false
|
||||
@@ -1,9 +1,5 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Discord Chat
|
||||
url: https://discord.gg/BrRSWTaxVK
|
||||
about: Ask questions and discuss with other Wails users in real time.
|
||||
|
||||
- name: GitHub Community Discussions
|
||||
url: https://github.com/wailsapp/wails/discussions
|
||||
about: If your question is not a feature or a bug, please go to the discussion panel and retrieve if your question already exists before submitting.
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
# Description
|
||||
|
||||
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
|
||||
|
||||
Fixes # (issue)
|
||||
|
||||
## Type of change
|
||||
|
||||
Please delete options that are not relevant.
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] This change requires a documentation update
|
||||
|
||||
# How Has This Been Tested?
|
||||
|
||||
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration using `wails doctor`.
|
||||
|
||||
- [ ] Windows
|
||||
- [ ] macOS
|
||||
- [ ] Linux
|
||||
|
||||
## Test Configuration
|
||||
|
||||
Please paste the output of `wails doctor`. If you are unable to run this command, please describe your environment in as much detail as possible.
|
||||
|
||||
# Checklist:
|
||||
|
||||
- [ ] I have updated `website/src/pages/changelog.mdx` with details of this PR
|
||||
- [ ] My code follows the general coding style of this project
|
||||
- [ ] I have performed a self-review of my own code
|
||||
- [ ] I have commented my code, particularly in hard-to-understand areas
|
||||
- [ ] I have made corresponding changes to the documentation
|
||||
- [ ] My changes generate no new warnings
|
||||
- [ ] I have added tests that prove my fix is effective or that my feature works
|
||||
- [ ] New and existing unit tests pass locally with my changes
|
||||
@@ -0,0 +1,49 @@
|
||||
name: update-contributors-svg
|
||||
|
||||
on:
|
||||
workflow_dispatch: # Can trigger manually
|
||||
schedule:
|
||||
- cron: '0 7 * * *' # Schedule on everyday 7:00
|
||||
|
||||
jobs:
|
||||
update-svg:
|
||||
name: Update contributors SVG
|
||||
runs-on: ubuntu-latest # You can also try macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: lts/*
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
with:
|
||||
version: 7
|
||||
|
||||
- name: Run SVG generation script
|
||||
run: pnpx make-github-contributor-svg -t ${{ secrets.GITHUB_TOKEN }} -o wailsapp -r wails
|
||||
|
||||
- name: Move svg
|
||||
run: mv .github-contributors/*.svg website/static/img/
|
||||
|
||||
- name: Commit
|
||||
uses: EndBug/add-and-commit@v9
|
||||
with:
|
||||
message: "chore(workflow): update contributors image"
|
||||
add: "website/static/img/*"
|
||||
new_branch: "chore/update-contributors-svg"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: "chore(workflow): update contributors image"
|
||||
title: "chore(workflow): update contributors image"
|
||||
body: "This PR was automatically generated by a GitHub workflow"
|
||||
branch: chore/update-contributors-svg
|
||||
base: master
|
||||
labels: "chore, workflow"
|
||||
@@ -0,0 +1,17 @@
|
||||
name: Label Sponsors
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened]
|
||||
issues:
|
||||
types: [opened]
|
||||
jobs:
|
||||
build:
|
||||
name: is-sponsor-label
|
||||
if: github.repository == 'wailsapp/wails'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: JasonEtco/is-sponsor-label-action@v1
|
||||
with:
|
||||
label: Sponsor ❤️
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -2,8 +2,6 @@ name: Sync Translations
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
|
||||
jobs:
|
||||
sync-translated-documents:
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# This is an example goreleaser.yaml file with some sane defaults.
|
||||
# Make sure to check the documentation at http://goreleaser.com
|
||||
|
||||
builds:
|
||||
- env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- windows
|
||||
- linux
|
||||
- darwin
|
||||
goarch:
|
||||
- 386
|
||||
- amd64
|
||||
ignore:
|
||||
- goos: darwin
|
||||
goarch: 386
|
||||
main: ./cmd/wails/main.go
|
||||
archive:
|
||||
replacements:
|
||||
darwin: Darwin
|
||||
linux: Linux
|
||||
windows: Windows
|
||||
386: i386
|
||||
amd64: x86_64
|
||||
checksum:
|
||||
name_template: 'checksums.txt'
|
||||
snapshot:
|
||||
name_template: "{{ .Tag }}-next"
|
||||
changelog:
|
||||
sort: asc
|
||||
filters:
|
||||
exclude:
|
||||
- '^docs:'
|
||||
- '^test:'
|
||||
@@ -0,0 +1,6 @@
|
||||
jshint:
|
||||
config_file: .jshintrc
|
||||
eslint:
|
||||
enabled: true
|
||||
config_file: .eslintrc
|
||||
ignore_file: .eslintignore
|
||||
@@ -1,3 +0,0 @@
|
||||
website
|
||||
v2
|
||||
v3
|
||||
@@ -1,6 +0,0 @@
|
||||
overrides:
|
||||
- files:
|
||||
- "**/*.md"
|
||||
options:
|
||||
printWidth: 80
|
||||
proseWrap: always
|
||||
+2
-3
@@ -26,8 +26,8 @@
|
||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow">
|
||||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
<a href="https://app.slack.com/client/T029RQSE6/CJ4P9F7MZ">
|
||||
<img alt="Slack" src="https://img.shields.io/badge/slack-gophers%2Fwails%20-blue?logo=slack"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
@@ -58,7 +58,6 @@
|
||||
- [スポンサー](#スポンサー)
|
||||
- [始め方](#始め方)
|
||||
- [FAQ](#faq)
|
||||
- [スター数の推移](#スター数の推移)
|
||||
- [コントリビューター](#コントリビューター)
|
||||
- [特記事項](#特記事項)
|
||||
- [スペシャルサンクス](#スペシャルサンクス)
|
||||
|
||||
+2
-3
@@ -26,8 +26,8 @@
|
||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow">
|
||||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
<a href="https://app.slack.com/client/T029RQSE6/CJ4P9F7MZ">
|
||||
<img alt="Slack" src="https://img.shields.io/badge/slack-gophers%2Fwails%20-blue?logo=slack"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
@@ -57,7 +57,6 @@
|
||||
- [시작하기](#시작하기)
|
||||
- [스폰서](#스폰서)
|
||||
- [FAQ](#faq)
|
||||
- [Stargazers 성장 추세](#stargazers-성장-추세)
|
||||
- [기여자](#기여자)
|
||||
- [라이센스](#라이센스)
|
||||
- [영감](#영감)
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow">
|
||||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
<a href="https://app.slack.com/client/T029RQSE6/CJ4P9F7MZ">
|
||||
<img alt="Slack" src="https://img.shields.io/badge/slack-gophers%2Fwails%20-blue?logo=slack"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
@@ -55,7 +55,6 @@
|
||||
- [Getting Started](#getting-started)
|
||||
- [Sponsors](#sponsors)
|
||||
- [FAQ](#faq)
|
||||
- [Stargazers over time](#stargazers-over-time)
|
||||
- [Contributors](#contributors)
|
||||
- [License](#license)
|
||||
- [Inspiration](#inspiration)
|
||||
@@ -92,9 +91,9 @@ The installation instructions are on the [official website](https://wails.io/doc
|
||||
|
||||
## Sponsors
|
||||
|
||||
|
||||
This project is supported by these kind people / companies:
|
||||
<img src="website/static/img/sponsors.svg" style="width:100%;max-width:800px;"/>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://wails.io/img/sponsor/jetbrains-grayscale.webp" style="width: 100px"/>
|
||||
</p>
|
||||
|
||||
+2
-3
@@ -26,8 +26,8 @@
|
||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow">
|
||||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
<a href="https://app.slack.com/client/T029RQSE6/CJ4P9F7MZ">
|
||||
<img alt="Slack" src="https://img.shields.io/badge/slack-gophers%2Fwails%20-blue?logo=slack"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
@@ -57,7 +57,6 @@
|
||||
- [快速入门](#快速入门)
|
||||
- [赞助商](#赞助商)
|
||||
- [常见问题](#常见问题)
|
||||
- [星星增长趋势](#星星增长趋势)
|
||||
- [贡献者](#贡献者)
|
||||
- [许可证](#许可证)
|
||||
- [灵感](#灵感)
|
||||
|
||||
+5
-28
@@ -2,19 +2,8 @@
|
||||
|
||||
version: "3"
|
||||
|
||||
includes:
|
||||
website:
|
||||
taskfile: website
|
||||
dir: website
|
||||
|
||||
v2:
|
||||
taskfile: v2
|
||||
dir: v2
|
||||
optional: true
|
||||
v3:
|
||||
taskfile: v3
|
||||
dir: v3
|
||||
optional: true
|
||||
vars:
|
||||
GREETING: Hello, World!
|
||||
|
||||
tasks:
|
||||
contributors:check:
|
||||
@@ -29,19 +18,7 @@ tasks:
|
||||
cmds:
|
||||
- npx -y all-contributors-cli generate
|
||||
|
||||
format:md:
|
||||
release:
|
||||
dir: v2/tools/release
|
||||
cmds:
|
||||
- npx prettier --write "**/*.md"
|
||||
|
||||
format:
|
||||
cmds:
|
||||
- task: format:md
|
||||
|
||||
format-all-md:
|
||||
cmds:
|
||||
- task: format:md
|
||||
- task: website:format:md
|
||||
- task: v2:format:md
|
||||
# - task: v2:website:format
|
||||
- task: v3:format:md
|
||||
# - task: v3:website:format:md
|
||||
- go run release.go
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
package wails
|
||||
|
||||
import (
|
||||
"os"
|
||||
"syscall"
|
||||
|
||||
"github.com/syossan27/tebata"
|
||||
"github.com/wailsapp/wails/cmd"
|
||||
"github.com/wailsapp/wails/lib/binding"
|
||||
"github.com/wailsapp/wails/lib/event"
|
||||
"github.com/wailsapp/wails/lib/interfaces"
|
||||
"github.com/wailsapp/wails/lib/ipc"
|
||||
"github.com/wailsapp/wails/lib/logger"
|
||||
"github.com/wailsapp/wails/lib/renderer"
|
||||
wailsruntime "github.com/wailsapp/wails/runtime"
|
||||
)
|
||||
|
||||
// -------------------------------- Compile time Flags ------------------------------
|
||||
|
||||
// BuildMode indicates what mode we are in
|
||||
var BuildMode = cmd.BuildModeProd
|
||||
|
||||
// Runtime is the Go Runtime struct
|
||||
type Runtime = wailsruntime.Runtime
|
||||
|
||||
// Store is a state store used for syncing with
|
||||
// the front end
|
||||
type Store = wailsruntime.Store
|
||||
|
||||
// CustomLogger is a specialised logger
|
||||
type CustomLogger = logger.CustomLogger
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
|
||||
// App defines the main application struct
|
||||
type App struct {
|
||||
config *AppConfig // The Application configuration object
|
||||
cli *cmd.Cli // In debug mode, we have a cli
|
||||
renderer interfaces.Renderer // The renderer is what we will render the app to
|
||||
logLevel string // The log level of the app
|
||||
ipc interfaces.IPCManager // Handles the IPC calls
|
||||
log *logger.CustomLogger // Logger
|
||||
bindingManager interfaces.BindingManager // Handles binding of Go code to renderer
|
||||
eventManager interfaces.EventManager // Handles all the events
|
||||
runtime interfaces.Runtime // The runtime object for registered structs
|
||||
}
|
||||
|
||||
// CreateApp creates the application window with the given configuration
|
||||
// If none given, the defaults are used
|
||||
func CreateApp(optionalConfig ...*AppConfig) *App {
|
||||
var userConfig *AppConfig
|
||||
if len(optionalConfig) > 0 {
|
||||
userConfig = optionalConfig[0]
|
||||
}
|
||||
|
||||
result := &App{
|
||||
logLevel: "debug",
|
||||
renderer: renderer.NewWebView(),
|
||||
ipc: ipc.NewManager(),
|
||||
bindingManager: binding.NewManager(),
|
||||
eventManager: event.NewManager(),
|
||||
log: logger.NewCustomLogger("App"),
|
||||
}
|
||||
|
||||
appconfig, err := newConfig(userConfig)
|
||||
if err != nil {
|
||||
result.log.Fatalf("Cannot use custom HTML: %s", err.Error())
|
||||
}
|
||||
result.config = appconfig
|
||||
|
||||
// Set up the CLI if not in release mode
|
||||
if BuildMode != cmd.BuildModeProd {
|
||||
result.cli = result.setupCli()
|
||||
} else {
|
||||
// Disable Inspector in release mode
|
||||
result.config.DisableInspector = true
|
||||
}
|
||||
|
||||
// Platform specific init
|
||||
platformInit()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// Run the app
|
||||
func (a *App) Run() error {
|
||||
|
||||
if BuildMode != cmd.BuildModeProd {
|
||||
return a.cli.Run()
|
||||
}
|
||||
|
||||
a.logLevel = "error"
|
||||
err := a.start()
|
||||
if err != nil {
|
||||
a.log.Error(err.Error())
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (a *App) start() error {
|
||||
|
||||
// Set the log level
|
||||
logger.SetLogLevel(a.logLevel)
|
||||
|
||||
// Log starup
|
||||
a.log.Info("Starting")
|
||||
|
||||
// Check if we are to run in bridge mode
|
||||
if BuildMode == cmd.BuildModeBridge {
|
||||
a.renderer = renderer.NewBridge()
|
||||
}
|
||||
|
||||
// Initialise the renderer
|
||||
err := a.renderer.Initialise(a.config, a.ipc, a.eventManager)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Start signal handler
|
||||
t := tebata.New(os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
||||
t.Reserve(func() {
|
||||
a.log.Debug("SIGNAL CAUGHT! Starting Shutdown")
|
||||
a.renderer.Close()
|
||||
})
|
||||
|
||||
// Start event manager and give it our renderer
|
||||
a.eventManager.Start(a.renderer)
|
||||
|
||||
// Start the IPC Manager and give it the event manager and binding manager
|
||||
a.ipc.Start(a.eventManager, a.bindingManager)
|
||||
|
||||
// Create the runtime
|
||||
a.runtime = wailsruntime.NewRuntime(a.eventManager, a.renderer)
|
||||
|
||||
// Start binding manager and give it our renderer
|
||||
err = a.bindingManager.Start(a.renderer, a.runtime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Defer the shutdown
|
||||
defer a.shutdown()
|
||||
|
||||
// Run the renderer
|
||||
err = a.renderer.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// shutdown the app
|
||||
func (a *App) shutdown() {
|
||||
// Make sure this is only called once
|
||||
a.log.Debug("Shutting down")
|
||||
|
||||
// Shutdown Binding Manager
|
||||
a.bindingManager.Shutdown()
|
||||
|
||||
// Shutdown IPC Manager
|
||||
a.ipc.Shutdown()
|
||||
|
||||
// Shutdown Event Manager
|
||||
a.eventManager.Shutdown()
|
||||
|
||||
a.log.Debug("Cleanly Shutdown")
|
||||
}
|
||||
|
||||
// Bind allows the user to bind the given object
|
||||
// with the application
|
||||
func (a *App) Bind(object interface{}) {
|
||||
a.bindingManager.Bind(object)
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user