mirror of
https://github.com/Vomitblood/stort.git
synced 2024-11-26 05:45:26 +08:00
improvements to background setting logic
This commit is contained in:
parent
2337661fed
commit
72f9121593
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -42,7 +42,7 @@ jobs:
|
||||||
mise install
|
mise install
|
||||||
mise settings set experimental true
|
mise settings set experimental true
|
||||||
|
|
||||||
- name: Install Bun Packages
|
- name: Install bun Packages
|
||||||
run: mise exec bun --command 'bun install'
|
run: mise exec bun --command 'bun install'
|
||||||
|
|
||||||
- name: Build Tauri
|
- name: Build Tauri
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
bun 1.1.21
|
bun 1.1.22
|
||||||
|
nodejs 20.6.1
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Stort
|
# Stort
|
||||||
|
|
||||||
[![Test Build Frontend](https://github.com/Vomitblood/stort/actions/workflows/build-validation.yml/badge.svg)](https://github.com/Vomitblood/stort/actions/workflows/build-validation.yml)
|
[![Build](https://github.com/Vomitblood/stort/actions/workflows/build.yml/badge.svg)](https://github.com/Vomitblood/stort/actions/workflows/build.yml)
|
||||||
A launcher for Steam Deck to be used in Game Mode.
|
A launcher for Steam Deck to be used in Game Mode.
|
||||||
|
|
26
build2.sh
26
build2.sh
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
IMAGE_NAME="ubuntu:22.04"
|
|
||||||
HOST_PROJECT_DIR="$PWD"
|
|
||||||
CONTAINER_PROJECT_DIR="/app"
|
|
||||||
HOST_OUTPUT_DIR="$PWD/src-tauri/target/release/bundle/appimage"
|
|
||||||
CONTAINER_OUTPUT_DIR="$CONTAINER_PROJECT_DIR/src-tauri/target/release/bundle/appimage"
|
|
||||||
USER_ID=$(id -u)
|
|
||||||
GROUP_ID=$(id -g)
|
|
||||||
|
|
||||||
docker pull $IMAGE_NAME
|
|
||||||
|
|
||||||
# run the docker image and remove on completion
|
|
||||||
docker run --rm -it \
|
|
||||||
-v "$HOST_PROJECT_DIR":$CONTAINER_PROJECT_DIR \
|
|
||||||
$IMAGE_NAME \
|
|
||||||
/bin/bash -c "
|
|
||||||
|
|
||||||
# update packages
|
|
||||||
apt update && apt install curl -y && \
|
|
||||||
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \
|
|
||||||
echo $HOME && \
|
|
||||||
source "/root/.cargo/env" && \
|
|
||||||
cargo --version
|
|
||||||
"
|
|
355
package-lock.json
generated
355
package-lock.json
generated
|
@ -13,19 +13,20 @@
|
||||||
"@emotion/server": "^11.11.0",
|
"@emotion/server": "^11.11.0",
|
||||||
"@emotion/styled": "^11.13.0",
|
"@emotion/styled": "^11.13.0",
|
||||||
"@mui/icons-material": "^5.16.6",
|
"@mui/icons-material": "^5.16.6",
|
||||||
|
"@mui/lab": "^5.0.0-alpha.173",
|
||||||
"@mui/material": "^5.16.6",
|
"@mui/material": "^5.16.6",
|
||||||
"@tauri-apps/api": "^1.6.0",
|
"@tauri-apps/api": "^1.6.0",
|
||||||
"@types/lodash": "^4.17.7",
|
|
||||||
"jotai": "^2.9.1",
|
"jotai": "^2.9.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"lowdb": "^7.0.1",
|
|
||||||
"next": "14.2.5",
|
"next": "14.2.5",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
|
"smol-toml": "^1.3.0",
|
||||||
"zustand": "^4.5.4"
|
"zustand": "^4.5.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tauri-apps/cli": "^1.6.0",
|
"@tauri-apps/cli": "^1.6.0",
|
||||||
|
"@types/lodash": "^4.17.7",
|
||||||
"@types/node": "^20.14.14",
|
"@types/node": "^20.14.14",
|
||||||
"@types/react": "^18.3.3",
|
"@types/react": "^18.3.3",
|
||||||
"@types/react-dom": "^18.3.0",
|
"@types/react-dom": "^18.3.0",
|
||||||
|
@ -410,6 +411,40 @@
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@floating-ui/core": {
|
||||||
|
"version": "1.6.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz",
|
||||||
|
"integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==",
|
||||||
|
"dependencies": {
|
||||||
|
"@floating-ui/utils": "^0.2.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@floating-ui/dom": {
|
||||||
|
"version": "1.6.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz",
|
||||||
|
"integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==",
|
||||||
|
"dependencies": {
|
||||||
|
"@floating-ui/core": "^1.6.0",
|
||||||
|
"@floating-ui/utils": "^0.2.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@floating-ui/react-dom": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@floating-ui/dom": "^1.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@floating-ui/utils": {
|
||||||
|
"version": "0.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz",
|
||||||
|
"integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA=="
|
||||||
|
},
|
||||||
"node_modules/@humanwhocodes/config-array": {
|
"node_modules/@humanwhocodes/config-array": {
|
||||||
"version": "0.11.14",
|
"version": "0.11.14",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
@ -519,6 +554,37 @@
|
||||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@mui/base": {
|
||||||
|
"version": "5.0.0-beta.40",
|
||||||
|
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz",
|
||||||
|
"integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": "^7.23.9",
|
||||||
|
"@floating-ui/react-dom": "^2.0.8",
|
||||||
|
"@mui/types": "^7.2.14",
|
||||||
|
"@mui/utils": "^5.15.14",
|
||||||
|
"@popperjs/core": "^2.11.8",
|
||||||
|
"clsx": "^2.1.0",
|
||||||
|
"prop-types": "^15.8.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/mui-org"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@types/react": "^17.0.0 || ^18.0.0",
|
||||||
|
"react": "^17.0.0 || ^18.0.0",
|
||||||
|
"react-dom": "^17.0.0 || ^18.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@types/react": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@mui/core-downloads-tracker": {
|
"node_modules/@mui/core-downloads-tracker": {
|
||||||
"version": "5.16.6",
|
"version": "5.16.6",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -551,6 +617,46 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@mui/lab": {
|
||||||
|
"version": "5.0.0-alpha.173",
|
||||||
|
"resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.173.tgz",
|
||||||
|
"integrity": "sha512-Gt5zopIWwxDgGy/MXcp6GueD84xFFugFai4hYiXY0zowJpTVnIrTQCQXV004Q7rejJ7aaCntX9hpPJqCrioshA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": "^7.23.9",
|
||||||
|
"@mui/base": "5.0.0-beta.40",
|
||||||
|
"@mui/system": "^5.16.5",
|
||||||
|
"@mui/types": "^7.2.15",
|
||||||
|
"@mui/utils": "^5.16.5",
|
||||||
|
"clsx": "^2.1.0",
|
||||||
|
"prop-types": "^15.8.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/mui-org"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@emotion/react": "^11.5.0",
|
||||||
|
"@emotion/styled": "^11.3.0",
|
||||||
|
"@mui/material": ">=5.15.0",
|
||||||
|
"@types/react": "^17.0.0 || ^18.0.0",
|
||||||
|
"react": "^17.0.0 || ^18.0.0",
|
||||||
|
"react-dom": "^17.0.0 || ^18.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@emotion/react": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@emotion/styled": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@types/react": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@mui/material": {
|
"node_modules/@mui/material": {
|
||||||
"version": "5.16.6",
|
"version": "5.16.6",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -739,6 +845,66 @@
|
||||||
"glob": "10.3.10"
|
"glob": "10.3.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@next/swc-darwin-arm64": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@next/swc-darwin-x64": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@next/swc-linux-arm64-gnu": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@next/swc-linux-arm64-musl": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@next/swc-linux-x64-gnu": {
|
"node_modules/@next/swc-linux-x64-gnu": {
|
||||||
"version": "14.2.5",
|
"version": "14.2.5",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
|
@ -767,6 +933,51 @@
|
||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@next/swc-win32-arm64-msvc": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@next/swc-win32-ia32-msvc": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==",
|
||||||
|
"cpu": [
|
||||||
|
"ia32"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@next/swc-win32-x64-msvc": {
|
||||||
|
"version": "14.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz",
|
||||||
|
"integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@nodelib/fs.scandir": {
|
"node_modules/@nodelib/fs.scandir": {
|
||||||
"version": "2.1.5",
|
"version": "2.1.5",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
@ -910,6 +1121,7 @@
|
||||||
},
|
},
|
||||||
"node_modules/@types/lodash": {
|
"node_modules/@types/lodash": {
|
||||||
"version": "4.17.7",
|
"version": "4.17.7",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
|
@ -3360,19 +3572,6 @@
|
||||||
"loose-envify": "cli.js"
|
"loose-envify": "cli.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/lowdb": {
|
|
||||||
"version": "7.0.1",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"steno": "^4.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/typicode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/lru-cache": {
|
"node_modules/lru-cache": {
|
||||||
"version": "10.4.3",
|
"version": "10.4.3",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
@ -4178,6 +4377,17 @@
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/smol-toml": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/cyyynthia"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/source-map": {
|
"node_modules/source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
|
@ -4192,16 +4402,6 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/steno": {
|
|
||||||
"version": "4.0.2",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/typicode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/stop-iteration-iterator": {
|
"node_modules/stop-iteration-iterator": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
@ -4920,111 +5120,6 @@
|
||||||
"optional": true
|
"optional": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"node_modules/@next/swc-darwin-arm64": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@next/swc-darwin-x64": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@next/swc-linux-arm64-gnu": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@next/swc-linux-arm64-musl": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@next/swc-win32-arm64-msvc": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@next/swc-win32-ia32-msvc": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==",
|
|
||||||
"cpu": [
|
|
||||||
"ia32"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@next/swc-win32-x64-msvc": {
|
|
||||||
"version": "14.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz",
|
|
||||||
"integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ pub fn run_tauri_app() {
|
||||||
tauri::Builder::default()
|
tauri::Builder::default()
|
||||||
.invoke_handler(tauri::generate_handler![
|
.invoke_handler(tauri::generate_handler![
|
||||||
crate::wallpaper::process_wallpaper_image,
|
crate::wallpaper::process_wallpaper_image,
|
||||||
crate::wallpaper::delete_old_wallpaper_image,
|
crate::wallpaper::delete_old_wallpaper_images,
|
||||||
])
|
])
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
.expect("error while running tauri application");
|
.expect("error while running tauri application");
|
||||||
|
|
|
@ -35,7 +35,9 @@ pub fn process_wallpaper_image(file_path_string: String) -> Result<String, Strin
|
||||||
.map_err(|e| format!("Failed to get app data directory: {e}"))?;
|
.map_err(|e| format!("Failed to get app data directory: {e}"))?;
|
||||||
|
|
||||||
// construct the destination path
|
// construct the destination path
|
||||||
let destination_path = app_data_dir.join(file_path.file_name().unwrap());
|
let destination_path = app_data_dir
|
||||||
|
.join("wallpaper")
|
||||||
|
.join(file_path.file_name().unwrap());
|
||||||
|
|
||||||
// move the file to the destination
|
// move the file to the destination
|
||||||
crate::fs::copy_file(file_path, &destination_path, true)
|
crate::fs::copy_file(file_path, &destination_path, true)
|
||||||
|
@ -45,12 +47,30 @@ pub fn process_wallpaper_image(file_path_string: String) -> Result<String, Strin
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn delete_old_wallpaper_image(file_path_string: String) -> Result<(), String> {
|
pub fn delete_old_wallpaper_images() -> Result<(), String> {
|
||||||
// convert the strings to paths
|
// convert the string to a Path
|
||||||
let file_path: &std::path::Path = std::path::Path::new(&file_path_string);
|
let app_data_dir = crate::paths::get_app_data_dir()
|
||||||
|
.map_err(|e| format!("Failed to get app data directory: {e}"))?;
|
||||||
|
let directory_path = app_data_dir.join("wallpaper");
|
||||||
|
|
||||||
// delete the old wallpaper
|
// check if the directory exists
|
||||||
crate::fs::delete_file(file_path).map_err(|e| format!("Failed to delete file: {e}"))?;
|
if !directory_path.is_dir() {
|
||||||
|
return Err(format!("Path is not a directory: {:?}", directory_path));
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterate over the files in the directory
|
||||||
|
for entry in
|
||||||
|
std::fs::read_dir(directory_path).map_err(|e| format!("Failed to read directory: {e}"))?
|
||||||
|
{
|
||||||
|
let entry = entry.map_err(|e| format!("Failed to read directory entry: {e}"))?;
|
||||||
|
let path = entry.path();
|
||||||
|
|
||||||
|
// delete the file
|
||||||
|
if path.is_file() {
|
||||||
|
std::fs::remove_file(&path)
|
||||||
|
.map_err(|e| format!("Failed to delete file {:?}: {e}", path))?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeBuildCommand": "bun run build",
|
"beforeBuildCommand": "npm run build",
|
||||||
"beforeDevCommand": "bun run dev",
|
"beforeDevCommand": "npm run dev",
|
||||||
"devPath": "http://localhost:3000",
|
"devPath": "http://localhost:3000",
|
||||||
"distDir": "../out"
|
"distDir": "../out"
|
||||||
},
|
},
|
||||||
|
@ -23,7 +23,8 @@
|
||||||
"/**/*",
|
"/**/*",
|
||||||
"$CONFIG/stort/",
|
"$CONFIG/stort/",
|
||||||
"$CONFIG/stort/**",
|
"$CONFIG/stort/**",
|
||||||
"$HOME/.local/share/stort/*"
|
"$HOME/.local/share/stort/*",
|
||||||
|
"$HOME/.local/share/stort/**"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"notification": {
|
"notification": {
|
||||||
|
@ -39,7 +40,8 @@
|
||||||
"all": true,
|
"all": true,
|
||||||
"asset": true,
|
"asset": true,
|
||||||
"assetScope": [
|
"assetScope": [
|
||||||
"$APPDATA/*"
|
"$APPDATA/*",
|
||||||
|
"$APPDATA/**"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"window": {
|
"window": {
|
||||||
|
|
|
@ -1,9 +1,21 @@
|
||||||
import { Settings } from "@mui/icons-material";
|
|
||||||
import { Box, Stack } from "@mui/material";
|
import { Box, Stack } from "@mui/material";
|
||||||
|
import { useSettings } from "../../contexts/SettingsContext";
|
||||||
|
import { Settings } from "../HeaderBar/Settings/Settings";
|
||||||
import { WindowButtons } from "../HeaderBar/WindowButtons";
|
import { WindowButtons } from "../HeaderBar/WindowButtons";
|
||||||
|
|
||||||
export const FooterBar = () => {
|
export const FooterBar = () => {
|
||||||
|
// contexts
|
||||||
|
const { settings } = useSettings();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
alignItems: "center",
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "row",
|
||||||
|
height: "66px",
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Box
|
<Box
|
||||||
className="titlebar"
|
className="titlebar"
|
||||||
data-tauri-drag-region="true"
|
data-tauri-drag-region="true"
|
||||||
|
@ -11,11 +23,13 @@ export const FooterBar = () => {
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
backdropFilter: "blur(10px)",
|
backdropFilter: "blur(10px)",
|
||||||
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
||||||
|
borderRadius: settings.style.radius + "px",
|
||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
height: "48px",
|
flexGrow: 1,
|
||||||
justifyContent: "space-between",
|
m: 1,
|
||||||
p: 1,
|
p: 1,
|
||||||
|
width: "100%",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box
|
<Box
|
||||||
|
@ -29,6 +43,15 @@ export const FooterBar = () => {
|
||||||
>
|
>
|
||||||
hello this is the left side
|
hello this is the left side
|
||||||
</Box>
|
</Box>
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
alignItems: "center",
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "row",
|
||||||
|
flexGrow: 1,
|
||||||
|
justifyContent: "center",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Box
|
<Box
|
||||||
className="titlebar"
|
className="titlebar"
|
||||||
data-tauri-drag-region="true"
|
data-tauri-drag-region="true"
|
||||||
|
@ -52,5 +75,6 @@ export const FooterBar = () => {
|
||||||
</Stack>
|
</Stack>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
</Box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,7 +21,6 @@ export const Layout = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
key={imageUrl}
|
|
||||||
sx={{
|
sx={{
|
||||||
// Use the URL function for background images
|
// Use the URL function for background images
|
||||||
backgroundColor: settings.background.background_color,
|
backgroundColor: settings.background.background_color,
|
||||||
|
|
|
@ -48,18 +48,13 @@ export const Settings = () => {
|
||||||
|
|
||||||
const applyClickEvent = () => {
|
const applyClickEvent = () => {
|
||||||
setApplyLoading(true);
|
setApplyLoading(true);
|
||||||
|
|
||||||
updateSettings(stagedSettings);
|
updateSettings(stagedSettings);
|
||||||
|
|
||||||
setApplyLoading(false);
|
setApplyLoading(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
const saveClickEvent = () => {
|
const saveClickEvent = () => {
|
||||||
setSaveLoading(true);
|
applyClickEvent();
|
||||||
|
|
||||||
updateSettings(stagedSettings);
|
|
||||||
|
|
||||||
setSaveLoading(false);
|
|
||||||
closeSettings();
|
closeSettings();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { useSettings } from "../../../../contexts/SettingsContext";
|
||||||
import { stagedSettingsAtom } from "../../../../lib/store/jotai/settings";
|
import { stagedSettingsAtom } from "../../../../lib/store/jotai/settings";
|
||||||
import { CategoryTitle } from "../CategoryTitle";
|
import { CategoryTitle } from "../CategoryTitle";
|
||||||
import { SettingsItem } from "../SettingsItem";
|
import { SettingsItem } from "../SettingsItem";
|
||||||
|
import { readBinaryFile } from "@tauri-apps/api/fs";
|
||||||
|
|
||||||
interface SettingsTabBackgroundProps {
|
interface SettingsTabBackgroundProps {
|
||||||
sx?: any;
|
sx?: any;
|
||||||
|
@ -24,7 +25,7 @@ export const SettingsTabBackground: FC<SettingsTabBackgroundProps> = ({ sx }) =>
|
||||||
// states
|
// states
|
||||||
const [oldWallpaperPath, setOldWallpaperPath] = useState<string | null>(null);
|
const [oldWallpaperPath, setOldWallpaperPath] = useState<string | null>(null);
|
||||||
const [targetWallpaperPath, setTargetWallpaperPath] = useState<string | null>(null);
|
const [targetWallpaperPath, setTargetWallpaperPath] = useState<string | null>(null);
|
||||||
const [imageUrl, setImageUrl] = useState<string | null>(null);
|
const [imageBlob, setImageBlob] = useState<string | null>(null);
|
||||||
|
|
||||||
const handleSettingsBackgroundValueChange = (
|
const handleSettingsBackgroundValueChange = (
|
||||||
settingKey: string,
|
settingKey: string,
|
||||||
|
@ -43,13 +44,18 @@ export const SettingsTabBackground: FC<SettingsTabBackgroundProps> = ({ sx }) =>
|
||||||
};
|
};
|
||||||
|
|
||||||
const setImageSrc = async (filePath: string) => {
|
const setImageSrc = async (filePath: string) => {
|
||||||
const assetUrl = convertFileSrc(filePath);
|
const imageBlobTemp = await readBinaryFile(filePath);
|
||||||
setImageUrl(assetUrl);
|
|
||||||
|
if (imageBlobTemp) setImageBlob(URL.createObjectURL(new Blob([imageBlobTemp])));
|
||||||
};
|
};
|
||||||
|
|
||||||
const selectImage = async () => {
|
const selectImage = async () => {
|
||||||
const { appLocalDataDir, basename } = await import("@tauri-apps/api/path");
|
const { appLocalDataDir, basename } = await import("@tauri-apps/api/path");
|
||||||
|
|
||||||
|
// clear the states first
|
||||||
|
setTargetWallpaperPath(null);
|
||||||
|
setImageBlob(null);
|
||||||
|
|
||||||
let selectedFilePath = await open({
|
let selectedFilePath = await open({
|
||||||
multiple: false,
|
multiple: false,
|
||||||
filters: [
|
filters: [
|
||||||
|
@ -71,44 +77,32 @@ export const SettingsTabBackground: FC<SettingsTabBackgroundProps> = ({ sx }) =>
|
||||||
// construct the destination file path
|
// construct the destination file path
|
||||||
const appLocalDataDirPath = await appLocalDataDir();
|
const appLocalDataDirPath = await appLocalDataDir();
|
||||||
const filename = await basename(selectedFilePath);
|
const filename = await basename(selectedFilePath);
|
||||||
const destinationFilePath = appLocalDataDirPath + filename;
|
const destinationFilePath = appLocalDataDirPath + "wallpaper/" + filename;
|
||||||
handleSettingsBackgroundValueChange("background_image_path", destinationFilePath);
|
handleSettingsBackgroundValueChange("background_image_path", destinationFilePath);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const clearImage = async () => {
|
const clearImage = async () => {
|
||||||
if (stagedSettings.background.background_image_path) {
|
handleSettingsBackgroundValueChange("background_image_path", "");
|
||||||
try {
|
|
||||||
await invoke("delete_old_wallpaper_image", {
|
|
||||||
filePathString: stagedSettings.background.background_image_path,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to delete old wallpaper image", error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const newSettings = handleSettingsBackgroundValueChange("background_image_path", "");
|
|
||||||
|
|
||||||
updateSettings(newSettings);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// if settings.background.background_image_path changes, update the image
|
// if settings.background.background_image_path changes, update the image
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const applyWallpaper = async () => {
|
const applyWallpaper = async () => {
|
||||||
|
// apply the new wallpaper image
|
||||||
try {
|
try {
|
||||||
await invoke("process_wallpaper_image", {
|
|
||||||
filePathString: targetWallpaperPath,
|
|
||||||
});
|
|
||||||
// if there is already a wallpaper file, delete it
|
// if there is already a wallpaper file, delete it
|
||||||
if (settings.background.background_image_path) {
|
if (settings.background.background_image_path && oldWallpaperPath) {
|
||||||
try {
|
try {
|
||||||
await invoke("delete_old_wallpaper_image", {
|
await invoke("delete_old_wallpaper_images");
|
||||||
filePathString: oldWallpaperPath,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to delete old wallpaper image", error);
|
console.error("Failed to delete old wallpaper image", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (targetWallpaperPath)
|
||||||
|
await invoke("process_wallpaper_image", {
|
||||||
|
filePathString: targetWallpaperPath,
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
|
@ -120,13 +114,13 @@ export const SettingsTabBackground: FC<SettingsTabBackgroundProps> = ({ sx }) =>
|
||||||
}, [settings.background.background_image_path]);
|
}, [settings.background.background_image_path]);
|
||||||
|
|
||||||
// update the preview image when stagedSettings.background.background_image_path changes
|
// update the preview image when stagedSettings.background.background_image_path changes
|
||||||
// useEffect(() => {
|
useEffect(() => {
|
||||||
// if (stagedSettings.background.background_image_path) {
|
if (targetWallpaperPath) {
|
||||||
// setImageSrc(stagedSettings.background.background_image_path);
|
setImageSrc(targetWallpaperPath);
|
||||||
// } else {
|
} else {
|
||||||
// setImageUrl(null);
|
setImageBlob(null);
|
||||||
// }
|
}
|
||||||
// }, [stagedSettings.background.background_image_path]);
|
}, [targetWallpaperPath]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ sx }}>
|
<Box sx={{ sx }}>
|
||||||
|
@ -143,13 +137,29 @@ export const SettingsTabBackground: FC<SettingsTabBackgroundProps> = ({ sx }) =>
|
||||||
borderRadius: "8px", // Optional: rounded corners
|
borderRadius: "8px", // Optional: rounded corners
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
{imageBlob ? (
|
||||||
<Image
|
<Image
|
||||||
src={imageUrl || "oh no"}
|
src={imageBlob || "oh no"}
|
||||||
alt="Image not found"
|
alt="Image not found"
|
||||||
// fill the box r/catsareliquid
|
// fill the box r/catsareliquid
|
||||||
layout="fill"
|
layout="fill"
|
||||||
objectFit="cover"
|
objectFit="cover"
|
||||||
/>
|
/>
|
||||||
|
) : (
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
alignItems: "center",
|
||||||
|
backgroundColor: "rgba(0, 0, 0, 0.1)",
|
||||||
|
display: "flex",
|
||||||
|
height: "100%",
|
||||||
|
justifyContent: "center",
|
||||||
|
position: "absolute",
|
||||||
|
width: "100%",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
No image selected
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
</Box>
|
</Box>
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
|
@ -164,7 +174,7 @@ export const SettingsTabBackground: FC<SettingsTabBackgroundProps> = ({ sx }) =>
|
||||||
<Button
|
<Button
|
||||||
color="primary"
|
color="primary"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
selectImage().then(() => updateSettings(stagedSettings));
|
selectImage();
|
||||||
}}
|
}}
|
||||||
startIcon={<FileOpenOutlined />}
|
startIcon={<FileOpenOutlined />}
|
||||||
size="small"
|
size="small"
|
||||||
|
|
|
@ -33,7 +33,7 @@ export const WindowButtons = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const close = async () => {
|
const close = async () => {
|
||||||
await exit(1);
|
appWindow?.close();
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
Loading…
Reference in a new issue