mirror of
https://github.com/Xetibo/ReSet.git
synced 2025-04-19 02:58:33 +02:00
feat: Add change sink event
This commit is contained in:
parent
8ef97ac0d9
commit
a84c71d9e1
|
@ -10,7 +10,7 @@ use crate::components::base::utils::{
|
||||||
};
|
};
|
||||||
use crate::components::output::sinkEntry::set_sink_volume;
|
use crate::components::output::sinkEntry::set_sink_volume;
|
||||||
use adw::glib::Object;
|
use adw::glib::Object;
|
||||||
use adw::prelude::{BoxExt, ButtonExt, RangeExt};
|
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, RangeExt};
|
||||||
use adw::{glib, prelude::ListBoxRowExt};
|
use adw::{glib, prelude::ListBoxRowExt};
|
||||||
use dbus::blocking::Connection;
|
use dbus::blocking::Connection;
|
||||||
use dbus::message::SignalArgs;
|
use dbus::message::SignalArgs;
|
||||||
|
@ -341,6 +341,39 @@ pub fn start_output_box_listener(listeners: Arc<Listeners>, sink_box: Arc<SinkBo
|
||||||
println!("fail on sink remove");
|
println!("fail on sink remove");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let res = conn.add_match(sink_changed, move |ir: SinkChanged, _, _| {
|
||||||
|
let sink_box = sink_changed_box.clone();
|
||||||
|
let default_sink = get_default_sink();
|
||||||
|
glib::spawn_future(async move {
|
||||||
|
glib::idle_add_once(move || {
|
||||||
|
let output_box = sink_box.clone();
|
||||||
|
let output_box_imp = output_box.imp();
|
||||||
|
let list = output_box_imp.resetSinkList.lock().unwrap();
|
||||||
|
let entry = list.get(&ir.sink.index);
|
||||||
|
if entry.is_none() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let imp = entry.unwrap().1.imp();
|
||||||
|
let is_default = ir.sink.name == default_sink.name;
|
||||||
|
imp.resetSinkName.set_text(ir.sink.alias.clone().as_str());
|
||||||
|
let volume = ir.sink.volume.first().unwrap_or_else(|| &(0 as u32));
|
||||||
|
let fraction = (*volume as f64 / 655.36).round();
|
||||||
|
let percentage = (fraction).to_string() + "%";
|
||||||
|
imp.resetVolumePercentage.set_text(&percentage);
|
||||||
|
imp.resetVolumeSlider.set_value(*volume as f64);
|
||||||
|
if is_default {
|
||||||
|
imp.resetSelectedSink.set_active(true);
|
||||||
|
} else {
|
||||||
|
imp.resetSelectedSink.set_active(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
true
|
||||||
|
});
|
||||||
|
if res.is_err() {
|
||||||
|
println!("fail on sink remove");
|
||||||
|
return;
|
||||||
|
}
|
||||||
let res = conn.add_match(input_stream_added, move |ir: InputStreamAdded, _, _| {
|
let res = conn.add_match(input_stream_added, move |ir: InputStreamAdded, _, _| {
|
||||||
let sink_box = input_stream_added_box.clone();
|
let sink_box = input_stream_added_box.clone();
|
||||||
glib::spawn_future(async move {
|
glib::spawn_future(async move {
|
||||||
|
|
Loading…
Reference in a new issue