feat: update dependencies to latest compatible versions

- Update frontend dependencies (SolidJS, Vite, Tailwind, etc.)
- Update backend dependencies (Tauri 1.8.3, Tokio, Serde, etc.)
- Fix thread safety issues with SafeDisplay wrapper for ddc-hi::Display
- Resolve display-info API compatibility issues
- All dependencies updated within major version constraints
This commit is contained in:
2025-06-30 17:35:03 +08:00
parent b1fd751090
commit ddf61c861d
6 changed files with 1633 additions and 853 deletions

View File

@ -11,23 +11,23 @@
},
"license": "MIT",
"dependencies": {
"@solidjs/router": "^0.8.2",
"@tauri-apps/api": "^1.3.0",
"debug": "^4.3.4",
"solid-icons": "^1.0.8",
"solid-js": "^1.7.6",
"@solidjs/router": "^0.8.4",
"@tauri-apps/api": "^1.6.0",
"debug": "^4.4.1",
"solid-icons": "^1.1.0",
"solid-js": "^1.9.7",
"solid-tippy": "^0.2.1",
"tippy.js": "^6.3.7"
},
"devDependencies": {
"@tauri-apps/cli": "^1.3.1",
"@types/debug": "^4.1.8",
"@types/node": "^18.16.17",
"autoprefixer": "^10.4.14",
"postcss": "^8.4.24",
"tailwindcss": "^3.3.2",
"@tauri-apps/cli": "^1.6.3",
"@types/debug": "^4.1.12",
"@types/node": "^18.19.113",
"autoprefixer": "^10.4.21",
"postcss": "^8.5.6",
"tailwindcss": "^3.4.17",
"typescript": "^4.9.5",
"vite": "^4.3.9",
"vite-plugin-solid": "^2.7.0"
"vite": "^4.5.14",
"vite-plugin-solid": "^2.11.7"
}
}

68
pnpm-lock.yaml generated
View File

@ -9,19 +9,19 @@ importers:
.:
dependencies:
'@solidjs/router':
specifier: ^0.8.2
specifier: ^0.8.4
version: 0.8.4(solid-js@1.9.7)
'@tauri-apps/api':
specifier: ^1.3.0
specifier: ^1.6.0
version: 1.6.0
debug:
specifier: ^4.3.4
specifier: ^4.4.1
version: 4.4.1
solid-icons:
specifier: ^1.0.8
specifier: ^1.1.0
version: 1.1.0(solid-js@1.9.7)
solid-js:
specifier: ^1.7.6
specifier: ^1.9.7
version: 1.9.7
solid-tippy:
specifier: ^0.2.1
@ -31,31 +31,31 @@ importers:
version: 6.3.7
devDependencies:
'@tauri-apps/cli':
specifier: ^1.3.1
specifier: ^1.6.3
version: 1.6.3
'@types/debug':
specifier: ^4.1.8
specifier: ^4.1.12
version: 4.1.12
'@types/node':
specifier: ^18.16.17
specifier: ^18.19.113
version: 18.19.113
autoprefixer:
specifier: ^10.4.14
specifier: ^10.4.21
version: 10.4.21(postcss@8.5.6)
postcss:
specifier: ^8.4.24
specifier: ^8.5.6
version: 8.5.6
tailwindcss:
specifier: ^3.3.2
specifier: ^3.4.17
version: 3.4.17
typescript:
specifier: ^4.9.5
version: 4.9.5
vite:
specifier: ^4.3.9
specifier: ^4.5.14
version: 4.5.14(@types/node@18.19.113)
vite-plugin-solid:
specifier: ^2.7.0
specifier: ^2.11.7
version: 2.11.7(solid-js@1.9.7)(vite@4.5.14(@types/node@18.19.113))
packages:
@ -281,23 +281,18 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'}
'@jridgewell/gen-mapping@0.3.10':
resolution: {integrity: sha512-HM2F4B9N4cA0RH2KQiIZOHAZqtP4xGS4IZ+SFe1SIbO4dyjf9MTY2Bo3vHYnm0hglWfXqBrzUBSa+cJfl3Xvrg==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/set-array@1.2.1':
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.2':
resolution: {integrity: sha512-gKYheCylLIedI+CSZoDtGkFV9YEBxRRVcfCH7OfAqh4TyUyRjEE6WVE/aXDXX0p8BIe/QgLcaAoI0220KRRFgg==}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
'@jridgewell/trace-mapping@0.3.27':
resolution: {integrity: sha512-VO95AxtSFMelbg3ouljAYnfvTEwSWVt/2YLf+U5Ejd8iT5mXE2Sa/1LGyvySMne2CGsepGLI7KpF3EzE3Aq9Mg==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@ -1014,8 +1009,8 @@ snapshots:
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/gen-mapping': 0.3.10
'@jridgewell/trace-mapping': 0.3.27
'@babel/code-frame@7.27.1':
dependencies:
@ -1049,8 +1044,8 @@ snapshots:
dependencies:
'@babel/parser': 7.27.7
'@babel/types': 7.27.7
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/gen-mapping': 0.3.10
'@jridgewell/trace-mapping': 0.3.27
jsesc: 3.1.0
'@babel/helper-compilation-targets@7.27.2':
@ -1201,22 +1196,19 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@jridgewell/gen-mapping@0.3.8':
'@jridgewell/gen-mapping@0.3.10':
dependencies:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/sourcemap-codec': 1.5.2
'@jridgewell/trace-mapping': 0.3.27
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/set-array@1.2.1': {}
'@jridgewell/sourcemap-codec@1.5.2': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.25':
'@jridgewell/trace-mapping@0.3.27':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/sourcemap-codec': 1.5.2
'@nodelib/fs.scandir@2.1.5':
dependencies:
@ -1751,7 +1743,7 @@ snapshots:
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/gen-mapping': 0.3.10
commander: 4.1.1
glob: 10.4.5
lines-and-columns: 1.2.4

2357
src-tauri/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -5,9 +5,27 @@ use tokio::sync::RwLock;
use super::DisplayState;
// Safe wrapper for Display that implements Send + Sync
pub struct SafeDisplay {
display: Display,
}
unsafe impl Send for SafeDisplay {}
unsafe impl Sync for SafeDisplay {}
impl SafeDisplay {
pub fn new(display: Display) -> Self {
Self { display }
}
pub fn get_mut(&mut self) -> &mut Display {
&mut self.display
}
}
pub struct DisplayHandler {
pub state: Arc<RwLock<DisplayState>>,
pub controller: Arc<RwLock<Display>>,
pub controller: Arc<RwLock<SafeDisplay>>,
}
impl DisplayHandler {
@ -16,7 +34,7 @@ impl DisplayHandler {
let mut temp_state = self.state.read().await.clone();
match controller.handle.get_vcp_feature(0x10) {
match controller.get_mut().handle.get_vcp_feature(0x10) {
Ok(value) => {
temp_state.max_brightness = value.maximum();
temp_state.min_brightness = 0;
@ -24,7 +42,7 @@ impl DisplayHandler {
}
Err(_) => {}
};
match controller.handle.get_vcp_feature(0x12) {
match controller.get_mut().handle.get_vcp_feature(0x12) {
Ok(value) => {
temp_state.max_contrast = value.maximum();
temp_state.min_contrast = 0;
@ -32,7 +50,7 @@ impl DisplayHandler {
}
Err(_) => {}
};
match controller.handle.get_vcp_feature(0xdc) {
match controller.get_mut().handle.get_vcp_feature(0xdc) {
Ok(value) => {
temp_state.max_mode = value.maximum();
temp_state.min_mode = 0;
@ -52,6 +70,7 @@ impl DisplayHandler {
let mut state = self.state.write().await;
controller
.get_mut()
.handle
.set_vcp_feature(0x10, brightness)
.map_err(|err| anyhow::anyhow!("can not set brightness. {:?}", err))?;
@ -69,6 +88,7 @@ impl DisplayHandler {
let mut state = self.state.write().await;
controller
.get_mut()
.handle
.set_vcp_feature(0x12, contrast)
.map_err(|err| anyhow::anyhow!("can not set contrast. {:?}", err))?;
@ -84,6 +104,7 @@ impl DisplayHandler {
let mut state = self.state.write().await;
controller
.get_mut()
.handle
.set_vcp_feature(0xdc, mode)
.map_err(|err| anyhow::anyhow!("can not set mode. {:?}", err))?;

View File

@ -13,7 +13,7 @@ use crate::{
rpc::{BoardMessageChannels, DisplaySetting},
};
use super::{display_handler::DisplayHandler, display_state::DisplayState};
use super::{display_handler::{DisplayHandler, SafeDisplay}, display_state::DisplayState};
const CONFIG_FILE_NAME: &str = "cc.ivanli.ambient_light/displays.toml";
@ -85,7 +85,8 @@ impl DisplayManager {
let controllers = Display::enumerate();
for display in controllers {
let controller = Arc::new(RwLock::new(display));
let safe_display = SafeDisplay::new(display);
let controller = Arc::new(RwLock::new(safe_display));
let state = Arc::new(RwLock::new(DisplayState::default()));
let handler = DisplayHandler {
state: state.clone(),

View File

@ -20,7 +20,6 @@ use serde::{Deserialize, Serialize};
use serde_json::to_string;
use tauri::{http::ResponseBuilder, regex, Manager};
use volume::VolumeManager;
#[derive(Serialize, Deserialize)]
#[serde(remote = "DisplayInfo")]
struct DisplayInfoDef {