No more once_cell
Fix system audio check that didn't work because the API returns ()
This commit is contained in:
7
Cargo.lock
generated
7
Cargo.lock
generated
@@ -6,17 +6,10 @@ version = 3
|
|||||||
name = "auto_mute_tool"
|
name = "auto_mute_tool"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"once_cell",
|
|
||||||
"widestring",
|
"widestring",
|
||||||
"windows",
|
"windows",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "once_cell"
|
|
||||||
version = "1.17.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.51"
|
version = "1.0.51"
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
widestring = "1.0.2"
|
widestring = "1.0.2"
|
||||||
once_cell = "1.17.1"
|
|
||||||
|
|
||||||
[dependencies.windows]
|
[dependencies.windows]
|
||||||
version = "0.44.0"
|
version = "0.44.0"
|
||||||
|
|||||||
1
mute.txt
1
mute.txt
@@ -14,3 +14,4 @@ sm64.us.f3dex2e.exe
|
|||||||
teardown.exe
|
teardown.exe
|
||||||
underrail.exe
|
underrail.exe
|
||||||
valheim.exe
|
valheim.exe
|
||||||
|
Spotify.exe
|
||||||
@@ -11,12 +11,6 @@ pub(crate) struct DeviceNotificationClient {
|
|||||||
pub(crate) callback: Box<dyn Fn(&windows::core::PCWSTR)>
|
pub(crate) callback: Box<dyn Fn(&windows::core::PCWSTR)>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for DeviceNotificationClient {
|
|
||||||
fn drop(&mut self) {
|
|
||||||
println!("DNC drop");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IMMNotificationClient_Impl for DeviceNotificationClient {
|
impl IMMNotificationClient_Impl for DeviceNotificationClient {
|
||||||
fn OnDeviceStateChanged(
|
fn OnDeviceStateChanged(
|
||||||
&self,
|
&self,
|
||||||
@@ -32,8 +26,6 @@ impl IMMNotificationClient_Impl for DeviceNotificationClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn OnDeviceRemoved(&self, _pwstrdeviceid: &windows::core::PCWSTR) -> windows::core::Result<()> {
|
fn OnDeviceRemoved(&self, _pwstrdeviceid: &windows::core::PCWSTR) -> windows::core::Result<()> {
|
||||||
println!("OnDeviceRemoved");
|
|
||||||
// TODO: Remove device and all its sessions
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
18
src/main.rs
18
src/main.rs
@@ -12,7 +12,11 @@ use std::{
|
|||||||
io::{BufRead, BufReader},
|
io::{BufRead, BufReader},
|
||||||
path::Path,
|
path::Path,
|
||||||
ptr::null_mut,
|
ptr::null_mut,
|
||||||
sync::{Arc, Mutex, mpsc::{self, Sender, Receiver}}, thread,
|
sync::{
|
||||||
|
mpsc::{self, Receiver, Sender},
|
||||||
|
Arc, Mutex,
|
||||||
|
},
|
||||||
|
thread,
|
||||||
};
|
};
|
||||||
|
|
||||||
use sm_session_notifier::SMSessionNotifier;
|
use sm_session_notifier::SMSessionNotifier;
|
||||||
@@ -51,11 +55,6 @@ impl SessionMuter {
|
|||||||
self: &mut SessionMuter,
|
self: &mut SessionMuter,
|
||||||
session: IAudioSessionControl2,
|
session: IAudioSessionControl2,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
unsafe {
|
|
||||||
if session.IsSystemSoundsSession().is_ok() {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
match self.session_to_filename(&session) {
|
match self.session_to_filename(&session) {
|
||||||
Ok(file_name) => {
|
Ok(file_name) => {
|
||||||
let fn_str = file_name.to_string_lossy().to_string();
|
let fn_str = file_name.to_string_lossy().to_string();
|
||||||
@@ -68,9 +67,7 @@ impl SessionMuter {
|
|||||||
self.sessions.push(session);
|
self.sessions.push(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(_) => {}
|
||||||
println!("Unable to get filename for session {:?}", err);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -136,7 +133,7 @@ fn main() {
|
|||||||
.boot_devices()
|
.boot_devices()
|
||||||
.expect("failed to get initial audio devices and sessions");
|
.expect("failed to get initial audio devices and sessions");
|
||||||
|
|
||||||
let (tx, rx) : (Sender<String>, Receiver<String>) = mpsc::channel();
|
let (tx, rx): (Sender<String>, Receiver<String>) = mpsc::channel();
|
||||||
*WIN_CHANGE_CHANNEL_TX.lock().unwrap().borrow_mut() = Some(tx);
|
*WIN_CHANGE_CHANNEL_TX.lock().unwrap().borrow_mut() = Some(tx);
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
@@ -147,5 +144,4 @@ fn main() {
|
|||||||
let path = rx.recv().unwrap();
|
let path = rx.recv().unwrap();
|
||||||
muter.lock().unwrap().notify_window_changed(&path);
|
muter.lock().unwrap().notify_window_changed(&path);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,3 @@ impl IAudioSessionNotification_Impl for SessionNotification {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for SessionNotification {
|
|
||||||
fn drop(&mut self) {
|
|
||||||
println!("SN drop");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
use std::{
|
use std::{
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
sync::{mpsc::Sender, Arc, Mutex},
|
sync::{mpsc::Sender, Mutex},
|
||||||
};
|
};
|
||||||
|
|
||||||
use once_cell::sync::Lazy;
|
|
||||||
use windows::Win32::{
|
use windows::Win32::{
|
||||||
Foundation::{HINSTANCE, HWND},
|
Foundation::{HINSTANCE, HWND},
|
||||||
UI::{
|
UI::{
|
||||||
@@ -18,8 +18,7 @@ use windows::Win32::{
|
|||||||
|
|
||||||
use crate::pid_to_exe::pid_to_exe_path;
|
use crate::pid_to_exe::pid_to_exe_path;
|
||||||
|
|
||||||
pub static WIN_CHANGE_CHANNEL_TX: Lazy<Arc<Mutex<RefCell<Option<Sender<String>>>>>> =
|
pub static WIN_CHANGE_CHANNEL_TX: Mutex<RefCell<Option<Sender<String>>>> = Mutex::new(RefCell::new(None));
|
||||||
Lazy::new(|| Arc::new(Mutex::new(RefCell::new(None))));
|
|
||||||
|
|
||||||
unsafe extern "system" fn win_event_proc(
|
unsafe extern "system" fn win_event_proc(
|
||||||
_hook: HWINEVENTHOOK,
|
_hook: HWINEVENTHOOK,
|
||||||
|
|||||||
Reference in New Issue
Block a user