feat: 支持翻转灯条段。
This commit is contained in:
@ -122,8 +122,36 @@ impl ConfigManager {
|
||||
log::info!("mapper: {:?}", mapper);
|
||||
}
|
||||
}
|
||||
|
||||
Self::rebuild_mappers(&mut config);
|
||||
|
||||
let cloned_config = config.clone();
|
||||
|
||||
drop(config);
|
||||
|
||||
self.update(&cloned_config).await?;
|
||||
|
||||
self.config_update_sender
|
||||
.send(cloned_config)
|
||||
.map_err(|e| anyhow::anyhow!("Failed to send config update: {}", e))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn reverse_led_strip_part(
|
||||
&self,
|
||||
display_id: u32,
|
||||
border: Border,
|
||||
) -> anyhow::Result<()> {
|
||||
let mut config = self.config.write().await;
|
||||
|
||||
for (index, strip) in config.clone().strips.iter().enumerate() {
|
||||
if strip.display_id == display_id && strip.border == border {
|
||||
let mut mapper = config.mappers[index].borrow_mut();
|
||||
|
||||
let start = mapper.start;
|
||||
mapper.start = mapper.end;
|
||||
mapper.end = start;
|
||||
}
|
||||
}
|
||||
|
||||
let cloned_config = config.clone();
|
||||
|
||||
|
@ -175,6 +175,18 @@ async fn move_strip_part(display_id: u32, border: Border, target_start: usize) -
|
||||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn reverse_led_strip_part(display_id: u32, border: Border) -> Result<(), String> {
|
||||
let config_manager = ambient_light::ConfigManager::global().await;
|
||||
config_manager
|
||||
.reverse_led_strip_part(display_id, border)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
error!("can not reverse led strip part: {}", e);
|
||||
e.to_string()
|
||||
})
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
env_logger::init();
|
||||
@ -197,6 +209,7 @@ async fn main() {
|
||||
patch_led_strip_len,
|
||||
send_colors,
|
||||
move_strip_part,
|
||||
reverse_led_strip_part,
|
||||
])
|
||||
.register_uri_scheme_protocol("ambient-light", move |_app, request| {
|
||||
let response = ResponseBuilder::new().header("Access-Control-Allow-Origin", "*");
|
||||
|
@ -4,13 +4,13 @@ use core_graphics::display::{
|
||||
kCGNullWindowID, kCGWindowImageDefault, kCGWindowListOptionOnScreenOnly, CGDisplay,
|
||||
};
|
||||
use paris::{error, info, warn};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tauri::{async_runtime::RwLock, Window};
|
||||
use tokio::sync::{watch, OnceCell};
|
||||
|
||||
use crate::{
|
||||
ambient_light::{SamplePointConfig, SamplePointMapper},
|
||||
screenshot::{LedSamplePoints, ScreenSamplePoints, Screenshot, ScreenshotPayload}, led_color::LedColor,
|
||||
led_color::LedColor,
|
||||
screenshot::{ScreenSamplePoints, Screenshot, ScreenshotPayload},
|
||||
};
|
||||
|
||||
pub fn take_screenshot(display_id: u32, scale_factor: f32) -> anyhow::Result<Screenshot> {
|
||||
@ -220,7 +220,6 @@ impl ScreenshotManager {
|
||||
configs: &Vec<SamplePointConfig>,
|
||||
screenshots: &Vec<Screenshot>,
|
||||
) -> Vec<LedColor> {
|
||||
|
||||
let mut all_colors = vec![];
|
||||
|
||||
for (index, screenshot) in screenshots.iter().enumerate() {
|
||||
@ -233,7 +232,10 @@ impl ScreenshotManager {
|
||||
all_colors
|
||||
}
|
||||
|
||||
pub async fn get_sorted_colors(colors: &Vec<LedColor>, mappers: &Vec<SamplePointMapper>) -> Vec<u8> {
|
||||
pub async fn get_sorted_colors(
|
||||
colors: &Vec<LedColor>,
|
||||
mappers: &Vec<SamplePointMapper>,
|
||||
) -> Vec<u8> {
|
||||
let total_leds = mappers
|
||||
.iter()
|
||||
.map(|mapper| usize::max(mapper.start, mapper.end))
|
||||
|
Reference in New Issue
Block a user