notifications settings
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -3722,7 +3722,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wlx-overlay-s"
|
name = "wlx-overlay-s"
|
||||||
version = "0.2.2"
|
version = "0.2.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"ash",
|
"ash",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ debug = true
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "wlx-overlay-s"
|
name = "wlx-overlay-s"
|
||||||
version = "0.2.2"
|
version = "0.2.3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
use dbus::{blocking::Connection, channel::MatchingReceiver, message::MatchRule};
|
use dbus::{blocking::Connection, channel::MatchingReceiver, message::MatchRule};
|
||||||
use serde::Deserialize;
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{
|
use std::{
|
||||||
sync::{
|
path::PathBuf,
|
||||||
mpsc::{self},
|
sync::{mpsc, Arc},
|
||||||
Arc,
|
|
||||||
},
|
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{overlays::toast::Toast, state::AppState};
|
use crate::{config::def_true, config_io, overlays::toast::Toast, state::AppState};
|
||||||
|
|
||||||
pub struct NotificationManager {
|
pub struct NotificationManager {
|
||||||
rx_toast: mpsc::Receiver<Toast>,
|
rx_toast: mpsc::Receiver<Toast>,
|
||||||
@@ -31,9 +29,14 @@ impl NotificationManager {
|
|||||||
let _ = c.process(Duration::ZERO);
|
let _ = c.process(Duration::ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.rx_toast.try_iter().for_each(|toast| {
|
if app.session.config.notifications_enabled {
|
||||||
toast.submit(app);
|
self.rx_toast.try_iter().for_each(|toast| {
|
||||||
});
|
toast.submit(app);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// consume without submitting
|
||||||
|
self.rx_toast.try_iter().last();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_dbus(&mut self) {
|
pub fn run_dbus(&mut self) {
|
||||||
@@ -208,3 +211,29 @@ struct XsoMessage {
|
|||||||
sourceApp: Option<Arc<str>>,
|
sourceApp: Option<Arc<str>>,
|
||||||
alwaysShow: Option<bool>,
|
alwaysShow: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize)]
|
||||||
|
pub struct NotifiConf {
|
||||||
|
#[serde(default = "def_true")]
|
||||||
|
pub notifications_enabled: bool,
|
||||||
|
|
||||||
|
#[serde(default = "def_true")]
|
||||||
|
pub notifications_sound_enabled: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_config_path() -> PathBuf {
|
||||||
|
let mut path = config_io::get_conf_d_path();
|
||||||
|
path.push("notifications.yaml");
|
||||||
|
path
|
||||||
|
}
|
||||||
|
pub fn save_notifications(app: &mut AppState) -> anyhow::Result<()> {
|
||||||
|
let conf = NotifiConf {
|
||||||
|
notifications_enabled: app.session.config.notifications_enabled,
|
||||||
|
notifications_sound_enabled: app.session.config.notifications_sound_enabled,
|
||||||
|
};
|
||||||
|
|
||||||
|
let yaml = serde_yaml::to_string(&conf)?;
|
||||||
|
std::fs::write(get_config_path(), yaml)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ fn def_click_freeze_time_ms() -> u32 {
|
|||||||
300
|
300
|
||||||
}
|
}
|
||||||
|
|
||||||
fn def_true() -> bool {
|
pub fn def_true() -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ use crate::{
|
|||||||
backend::{
|
backend::{
|
||||||
common::{ColorChannel, OverlaySelector, SystemTask, TaskType},
|
common::{ColorChannel, OverlaySelector, SystemTask, TaskType},
|
||||||
input::PointerMode,
|
input::PointerMode,
|
||||||
|
notifications::save_notifications,
|
||||||
overlay::RelativeTo,
|
overlay::RelativeTo,
|
||||||
},
|
},
|
||||||
overlays::{
|
overlays::{
|
||||||
@@ -44,6 +45,8 @@ pub enum Axis {
|
|||||||
|
|
||||||
#[derive(Deserialize, Clone)]
|
#[derive(Deserialize, Clone)]
|
||||||
pub enum SystemAction {
|
pub enum SystemAction {
|
||||||
|
ToggleNotificationSounds,
|
||||||
|
ToggleNotifications,
|
||||||
PlayspaceResetOffset,
|
PlayspaceResetOffset,
|
||||||
PlayspaceFixFloor,
|
PlayspaceFixFloor,
|
||||||
RecalculateExtent,
|
RecalculateExtent,
|
||||||
@@ -315,10 +318,46 @@ fn run_system(action: &SystemAction, app: &mut AppState) {
|
|||||||
SystemAction::RecalculateExtent => {
|
SystemAction::RecalculateExtent => {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
SystemAction::ToggleNotifications => {
|
||||||
|
app.session.config.notifications_enabled = !app.session.config.notifications_enabled;
|
||||||
|
Toast::new(
|
||||||
|
format!(
|
||||||
|
"Notifications are {}.",
|
||||||
|
if app.session.config.notifications_enabled {
|
||||||
|
"enabled"
|
||||||
|
} else {
|
||||||
|
"disabled"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
|
"".into(),
|
||||||
|
)
|
||||||
|
.submit(app);
|
||||||
|
}
|
||||||
|
SystemAction::ToggleNotificationSounds => {
|
||||||
|
app.session.config.notifications_sound_enabled =
|
||||||
|
!app.session.config.notifications_sound_enabled;
|
||||||
|
Toast::new(
|
||||||
|
format!(
|
||||||
|
"Notification sounds are {}.",
|
||||||
|
if app.session.config.notifications_sound_enabled {
|
||||||
|
"enabled"
|
||||||
|
} else {
|
||||||
|
"disabled"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
|
"".into(),
|
||||||
|
)
|
||||||
|
.submit(app);
|
||||||
|
}
|
||||||
SystemAction::PersistConfig => {
|
SystemAction::PersistConfig => {
|
||||||
if let Err(e) = save_watch(app) {
|
if let Err(e) = save_watch(app) {
|
||||||
log::error!("Failed to save watch config: {:?}", e);
|
log::error!("Failed to save watch config: {:?}", e);
|
||||||
};
|
};
|
||||||
|
if let Err(e) = save_notifications(app) {
|
||||||
|
log::error!("Failed to save notifications config: {:?}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ impl Toast {
|
|||||||
|
|
||||||
let destroy_at = instant.add(std::time::Duration::from_secs_f32(self.timeout));
|
let destroy_at = instant.add(std::time::Duration::from_secs_f32(self.timeout));
|
||||||
|
|
||||||
let has_sound = self.sound;
|
let has_sound = self.sound && app.session.config.notifications_sound_enabled;
|
||||||
|
|
||||||
app.tasks.enqueue_at(
|
app.tasks.enqueue_at(
|
||||||
TaskType::CreateOverlay(
|
TaskType::CreateOverlay(
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
width: 0.3
|
width: 0.3
|
||||||
|
|
||||||
size: [600, 520]
|
size: [600, 700]
|
||||||
|
|
||||||
# +X: right, +Y: up, +Z: back
|
# +X: right, +Y: up, +Z: back
|
||||||
spawn_pos: [0, -0.1, -0.5]
|
spawn_pos: [0, -0.1, -0.5]
|
||||||
@@ -502,12 +502,45 @@ elements:
|
|||||||
- type: System
|
- type: System
|
||||||
action: PlayspaceResetOffset
|
action: PlayspaceResetOffset
|
||||||
|
|
||||||
|
####### Notifications Section #######
|
||||||
|
|
||||||
- type: Panel
|
- type: Panel
|
||||||
rect: [50, 460, 500, 1]
|
rect: [50, 460, 500, 1]
|
||||||
bg_color: "#c0c0c0"
|
bg_color: "#c0c0c0"
|
||||||
|
|
||||||
|
- type: Label
|
||||||
|
rect: [325, 480, 90, 24]
|
||||||
|
font_size: 18
|
||||||
|
fg_color: "#ffffff"
|
||||||
|
source: Static
|
||||||
|
text: Notifications
|
||||||
|
|
||||||
- type: Button
|
- type: Button
|
||||||
rect: [330, 480, 220, 30]
|
rect: [330, 495, 220, 30]
|
||||||
|
font_size: 12
|
||||||
|
fg_color: "#ffffff"
|
||||||
|
bg_color: "#606020"
|
||||||
|
text: "Enabled"
|
||||||
|
click_down:
|
||||||
|
- type: System
|
||||||
|
action: ToggleNotifications
|
||||||
|
|
||||||
|
- type: Button
|
||||||
|
rect: [330, 545, 220, 30]
|
||||||
|
font_size: 12
|
||||||
|
fg_color: "#ffffff"
|
||||||
|
bg_color: "#606020"
|
||||||
|
text: "Sound Enabled"
|
||||||
|
click_down:
|
||||||
|
- type: System
|
||||||
|
action: ToggleNotificationSounds
|
||||||
|
|
||||||
|
- type: Panel
|
||||||
|
rect: [50, 595, 500, 1]
|
||||||
|
bg_color: "#c0c0c0"
|
||||||
|
|
||||||
|
- type: Button
|
||||||
|
rect: [330, 615, 220, 30]
|
||||||
font_size: 12
|
font_size: 12
|
||||||
fg_color: "#ffffff"
|
fg_color: "#ffffff"
|
||||||
bg_color: "#206060"
|
bg_color: "#206060"
|
||||||
|
|||||||
Reference in New Issue
Block a user